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.