Download Conferencia #7: Lenguaje SQL Estándar. Ejemplos. File

Document related concepts
no text concepts found
Transcript
Bases de Datos
Conferencia 7. Lenguaje SQL Estándar.
Ejemplos.
Contenido
Surgimiento del SQL.
 Componentes del Lenguaje.
 Estructuras Básicas.
 Operadores y Comandos.
 Consultas de Recuperación.
 Ejemplos.

Surgimiento

Surge como parte de un SGBD relacional
denominado System R, a principios de
los años 70.

Evoluciona y cambia su nombre desde
SEQUEL hasta el SQL actual.

El último estándar conocido es de los 90.
Componentes del Lenguaje

DDL (Data Description Language).

DCL (Data Control Language).

DML (Data Manipulation Language).
Nota: El SQL contiene comandos para sus 3 partes componentes.
Componentes del DDL

CREATE TABLE: Crear una tabla en la base de datos.

ALTER TABLE: Modificar la estructura de una tabla
después de creada.

DROP TABLE: Eliminar una tabla.
Componentes del DCL

GRANT: Otorgar permisos de acceso a la BD.

REVOKE: Quitar privilegios de acceso.
Componentes del DML
Aquí se encuentran los comandos encargados de
realizar las consultas, además de los que permiten
insertar, suprimir y modificar tuplas.
Entre los más importantes están:

SELECT: Realizar consultas (recuperaciones).

INSERT: Insertar tuplas.

UPDATE: Modificar tuplas.

DELETE: Eliminar tuplas.
Estructura básica del comando SELECT
SELECT: Listar los atributos deseados (Proyección del Álgebra).
FROM: Listar las tablas (Producto cartesiano del Álgebra).
WHERE: Predicado de selección. Contiene atributos de las tablas del
FROM. Incluye las expresiones de combinación entre las tablas para el
JOIN del Álgebra.
Una instrucción SELECT incluye obligatoriamente las cláusulas SELECT y
FROM
Ejemplo
SELECT snom
FROM SUMIN
WHERE mun=’H.Vieja’
Recupera los nombres de los suministradores que radican en la H.Vieja.
El predicado del WHERE permite expresiones con los operadores lógicos
AND, OR, NOT.
Operadores de la cláusula WHERE
Además de los operadores lógicos y los de comparación (<, >, >=,
<=, =, etc.), existen otros operadores. Éstos son:
BETWEEN: Para expresiones que incluyan rango de valores.
LIKE: Se emplea en patrones o modelos para las comparaciones de
cadenas de caracteres.
Ejemplo
SELECT s
FROM SP
WHERE cant BETWEEN 10 AND 20
Para los patrones del LIKE se emplean los caracteres % y -, que hacen
la función de comodines, donde:
%:
-
Significa cualquier subcadena.
: Significa cualquier carácter.
Estos operadores de comparación pueden combinarse con NOT
Tuplas duplicadas
DISTINCT: Para eliminar tuplas duplicadas
Su inverso es ALL (valor implícito).
Ejemplo:
SELECT s
FROM SP
Se obtienen los mismos s repetidos tantas veces como ellos estén
involucrados en un suministro
Se evita con:
SELECT DISTINCT s
FROM SP
Consultas con más de una tabla
El “Join” en SQL puede lograrse de la siguiente forma:
SELECT snom
FROM SUMIN,SP
WHERE snum=s AND cant >50
Si en ambas tablas el atributo ‘numero del suministrador’ tuviera el
mismo nombre, por ej. snum, se hace uso de nombres calificados:
WHERE SUMIN.snum = SP.snum AND cant >50
Consultas anidadas
En SQL es posible anidar un SELECT dentro de otro (sin
restricciones de profundidad en el anidamiento, al menos en
teoría)
Ejemplo:
Recuperar los nombres de los suministradores que suministran el
producto ‘P2’. (Hay más de una forma de obtenerlo en SQL).
Solución
Variante 1 (Con el uso del JOIN)
SELECT snom
FROM SUMIN,SP
WHERE snum=s AND p=’P2’
Variante 2 (Con el uso de Consultas Anidadas)
SELECT snom
FROM SUMIN
WHERE snum IN
(SELECT s
FROM SP
WHERE p=’P2’)
Operadores SOME y ALL
Los operadores IN, SOME, ALL permiten comparación de conjuntos:
SOME: Algún
ALL: Todos
Ejemplo:
SELECT pnom
FROM PROD
WHERE peso>ALL
(SELECT peso
FROM PROD
WHERE color = ’rojo’)
Esta consulta encuentra los nombres
de los productos cuyo peso es mayor
que el peso de los productos de color
rojo.
Ordenamiento
ORDER BY: Garantiza que las tuplas obtenidas
aparezcan en cierto orden.
Ejemplo:
SELECT snom
FROM SUMIN
WHERE Mun = ’H.Vieja’
ORDER BY snom
El orden implícito es ascendente pero puede especificarse lo contrario con ASC,
DESC.
El ordenamiento puede ser sobre múltiples atributos.
Funciones de agregación
Funciones que operan sobre los valores de una columna.
AVG: realiza una media de una columna de datos numéricos.
COUNT: cuenta el número de elementos seleccionados en una
columna.
COUNT(*): cuenta el número de filas en el resultado de la consulta.
MIN: determina el menor valor de una columna.
MAX: determina el mayor valor de una columna.
SUM: proporciona el total de la suma de una columna de datos
numéricos
Ejemplos
SELECT COUNT(*)
FROM SUMIN
Devuelve cantidad de suministradores
SELECT COUNT(DISTINCT s)
FROM SP
Cantidad de suministradores que tienen suministros
SELECT SUM (cant)
FROM SP
WHERE p=’P1’
Suma de las cantidades de ‘P1’ suministradas.
Grupos de tuplas
GROUP BY: En esta cláusula se especifica un atributo (o varios
atributos) y el efecto es como si se formaran “grupos” en la
tabla, donde en cada grupo formado estarán las tuplas con igual
valor en el atributo(s) especificado(s) en el GROUP BY
Ejemplo
SELECT p, SUM(cant)
FROM SP
GROUP BY p
De esta forma es posible calcular la suma de la cantidad
suministrada, no sólo para el producto ‘P1’, sino para todos los
productos.
Ejemplo
También es posible usar funciones en una subconsulta:
SELECT pnom
FROM PROD
WHERE peso> (SELECT AVG(peso) FROM PROD)
Condiciones para grupos
HAVING: Se emplea para declarar una condición o predicado
para que sea aplicado a los grupos y no a las tuplas.
Ejemplo:
SELECT p,SUM(cant)
FROM SP
GROUP BY p
HAVING SUM(cant) > 100
GROUP BY y HAVING
El empleo de GROUP BY y HAVING exige que:
 cada expresión del SELECT tenga un solo valor por grupo.
 la expresión de HAVING tenga un solo valor por grupo.
Es decir, no es posible tener:
SELECT p,cant
From SP
Group By p
Having cant>100
porque cant no tiene un solo valor para cada p
Ejemplo
SELECT AVG(cant)
FROM SUMIN,SP
WHERE SUMIN.snum=SP.s AND mun =‘Plaza’
GROUP BY SP.s
HAVING COUNT(DISTINCT p)  3
En este ejemplo se calcula el valor promedio del atributo cant para aquellos
suministradores que radican en Plaza y que, además, suministran más de
tres productos diferentes.
Comandos para modificar tuplas
DELETE
Ejemplos:
1) DELETE
From PROD
Where peso Between 10 and 50
2) DELETE
From SP
Comandos para modificar tuplas
INSERT INTO
INSERT
INTO R[(atr[,atr…])]
VALUES (constante[,constante…])
INSERT
INTO R[(atr[,atr…])]
SELECT ….
FROM.. .
WHERE…
para una tupla.
para varias tuplas
Ejemplos
1) INSERT INTO SUMIN (snum,snom,mun)
VALUES (‘S6’,’Perez’,’Cerro’)
2) INSERT
INTO SUMIN (snum,snom,mun)
SELECT snum,snom,mun
FROM STEMP
WHERE mun=’Cerro’
Comandos para modificar tuplas
UPDATE
Cambiar los valores de las tuplas deseadas.
UPDATE R
SET Atr=Exp[,Atr=exp..]
Where P
Ejemplo
Update PROD
Set color = ‘rojo’
peso = peso + 5
Where pnum=’P1’
Vistas
Las vistas son el resultado de operaciones del Álgebra Relacional
sobre tablas o entre tablas y otras vistas almacenándose de ellas en
la BD sólo su definición, es decir, el comando que las define.
CREATE VIEW <Nombre>
AS <comando SELECT que la define>
Ejemplo
CREATE VIEW CantProd
As SELECT p, SUM(cant)
FROM SP
GROUP BY p
DROP VIEW < Nombre> para eliminar la vista de la BD
Combinación Interna
INNER JOIN: En el resultado se incluyen sólo las filas que “ casan” en
las tablas combinadas. Corresponde al JOIN del Álgebra relacional.
Ejemplo:
SELECT SUMIN.snom, SP.p, SP.cant;
FROM SUMIN INNER JOIN SP ON SUMIN.snum = SP.s
Nombres de los suministradores que tienen suministros junto con el # del
producto y la cantidad que de este se suministra
Combinaciones externas
LEFT JOIN: Incluye todas las filas de la tabla de la izquierda (la que
aparece a la izquierda de la palabra LEFT) y las que casan de la
derecha.
Ejemplo:
SELECT SUMIN.snom, SP.p, SP.cant;
FROM SUMIN LEFT OUTER JOIN SP
ON SUMIN.snum = SP.s
Todos los suministradores. En el caso de los que no tienen suministros, en
las columnas p y cant aparece un NULL.
Combinaciones externas
RIGHT JOIN: Incluye todas las filas de la tabla de la derecha, más
las que casan. Si la tabla de la derecha es una tabla secundaria en
una relación (como lo es SP respecto a SUMIN), esta operación
sirve para encontrar las violaciones de la integridad referencial en
un sistema que no la chequee. Rellena con NULL los campos en
que no haya valores por tratarse de filas que no casan.
Combinaciones externas
FULL JOIN: Incluye todas las filas de las 2 tablas,
casen o no.
Conclusiones.

Estándar para la recuperación de
información en modelos relacionales.

Lenguaje de recuperación formalizado
sobre el álgebra y cálculo relacional.
Estudio Independiente
Definir las vistas en el caso de estudio de la asignatura que
permitan:
• Listar los datos de los obreros cuyo salario sea mayor de 200
pesos.
• Determinar el nombre de cada empresa asociada a la entidad
agrícola y la cantidad de trabajadores de cada una de ellas.