Introducción a SQL (DML) Grupo de Ingeniería del Software y Bases de Datos Departamento de Lenguajes y Sistemas Informáticos Universidad de Sevilla noviembre 2013 Introducción a SQL Objetivos de este tema Ser capaz de usar el SQL DML para manipular modelos relaciones (Crear, Modificar y Borrar Datos). Ser capaz de usar el SQL DML para consultar modelos relacionales. noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 1 IISSI 1
Inserción de datos en una tabla Sirve para añadir tuplas en la base de datos Sintaxis: INSERT INTO <nombre_tabla> (<columna1>, <columna2>,...) VALUES (<valor1>, <valor2>,...) Si se introducen todos los valores de la tupla, la sintaxis puede ser: INSERT INTO <nombre_tabla> VALUES (<valor1>, <valor2>,...) Ejemplo INSERT INTO Empleado (idempleado, nombre, dirección, ) VALUES (1, Mario González, Avd República Argentina 4, ); noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 2 Inserción de datos en una tabla Se pueden añadir las filas resultantes de a una consulta Sintaxis: INSERT INTO <nombre_tabla> (<columna1>, <columna2>,...) SELECT (<columna1>, <columna2>,...) FROM [WHERE <condición>] Ejemplo: INSERT INTO EmpResponsables(idempleado, idsucursal, salario) SELECT idempleado, idsucursal, salario FROM empleado e, sucursal s WHERE s.responsable=e.idempleado; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 3 IISSI 2
Borrado de datos en una tabla Para destruir una tabla (estructura y datos): DROP TABLE <nombre_tabla>; Para eliminar algunas filas de una tabla: DELETE FROM <tabla> [WHERE <condición>]; Para eliminar todo el contenido de una tabla, pero no su estructura: TRUNCATE TABLE <nombre_tabla>; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 4 Borrado de datos en una tabla DELETE elimina las filas completas de una tabla que cumplan la clausula establecida en el WHERE Sintaxis: DELETE FROM TABLE WHERE <condición>; Ejemplo: elimina los Empleados de Sevilla DELETE FROM empleados WHERE provincia = Sevilla ; Ejemplo: Borrar los inmuebles de los empleados de la sucursal 8 DELETE FROM inmuebles WHERE idempleadoin (SELECT idempleado FROM empleado WHERE idsucursal=8); noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 5 IISSI 3
Modificación de datos en una tabla UPDATE modifica valores de columnas en una o más filas de una sola tabla. La Cláusula SET especifica columnas que modificar y nuevos valores La Cláusula WHERE selecciona las filas a actualizar. Si no hay WHERE, se aplica la modificación a todas las filas. Sintaxis: UPDATE <nombre_tabla> SET col1 = [valor1], col2 = [valor2], WHERE <condición> noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 6 Modificación de datos en una tabla Ejemplo: Incrementa un 10% el sueldo de los empleados que cobren menos de 1000 euros UPDATE empleado SET sueldo = sueldo*1,1 WHERE sueldo <1000; Ejemplo: Incrementa un 10% a los responsables de las sucursales UPDATE empleado SET sueldo= sueldo*1,1 WHERE idempleadoin (SELECT idempleado FROM empleado, sucursal WHERE empleado.idempleado=sucursal.responsable); noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 7 IISSI 4
Consultas Básicas Sintaxis: SELECT <lista de columnas> FROM <lista de tablas> WHERE <condición>; Ejemplos: SELECT nombre, salario FROM empleado WHERE empleado.salario > 1000 AND departamento= Comercial ; SELECT * FROM empleado WHERE...; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 8 Producto Cartesiano El producto cartesina devuelve una nueva relación con todas las posibles combinaciones entre las tuplas de las relaciones involucradas. SELECT * FROM A, B; a b c x y a x a y b x b y c x c y noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 9 IISSI 5
Producto Cartesiano El producto Cartesiano puede ir combinado con condicionales donde se relacionen los atributos de ambas tablas. Inmuebles de más de 1000 euros con el nombre del empleado que lo gestiona SELECT inmueble.idinmueble, empleado.nombre FROM inmueble, empleado WHERE inmueble.idempleado = empleado.idempleado AND inmueble.precio>1000; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 10 Natural join Si los campos por los que se hace una comparación de igualdad en el producto cartesiano tienen el mismo nombre, se puede hacer el join natural: SELECT inmueble.idinmueble, empleado.nombre FROM (inmueble natural join empleado) Es equivalente a: SELECT inmueble.idinmueble, empleado.nombre FROM inmueble, empleado WHERE inmueble.idempleado=empleado.idempleado noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 11 IISSI 6
Renombrado Se puede renombrar tanto los atributos obtenidos en la proyección, como las tablas involucradas en la consulta. SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor FROM Empleado E, Empleado S WHERE E.nssjefe = S.nss; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 12 Operaciones aritméticas En las consultas se pueden aplicar operaciones aritméticas sobre las columnas de la relación que se obtiene. Ejemplo: Obtener una nueva relación con los salarios de los empleados que trabajan en la sucursal de la Avenida de las Ciencias 10, tras recibir un aumento del 10%. SELECT nombre, 1.1*sueldo FROM Empleado, Sucursal WHERE sucursal.dirección= Avenida de las ciencias 10 AND sucursal.idsucursal = empleado.idsucursal; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 13 IISSI 7
Tuplas repetidas Es sabido que las relaciones en una base de datos relacional no pueden tener tuplas repetidas. Pero una consulta que obtenga un subconjunto de los atributos de una relación, puede mostrar información repetida. nif nss nombre edad sueldo 12.345.678-Z 123.456.789 Abel Abad 21 24.000 23.456.789-D 234.567.890 Braulio Brío 32 36.000 34.567.890-V 345.678.901 Carlos Cepa 32 36.000 45.678.901-G 456.789.012 David Díaz 54 15.000 SQL no elimina por defecto filas repetidasdel resultado de una consulta, porque... Eliminación de duplicados costosa (ordenar+recorrer+eliminar) El usuariopuede desear ver las filas repetidas en el resultado Si se aplicauna función agregadaa filas, rara vez deben noviembre 2012 eliminarse Introducción a la las Ingeniería duplicadas del Software y a los Sistemas de Información 14 Tuplas repetidas Para eliminar explícitamente estas tuplas de salida se utiliza el operador DISTINCT. Ejemplos: Salarios de todos los empleados SELECT edad, sueldo FROM Empleado; * Pueden salir tuplas duplicadas SELECT DISTINCT edad, sueldo FROM Empleado; * No saldrán tuplas duplicadas edad sueldo 21 24.000 32 36.000 32 36.000 54 15.000 edad sueldo 21 24.000 32 36.000 54 15.000 noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 15 IISSI 8
Ordenación de tuplas Es sabido que en el modelo relacional la posición de las tuplas en las tablas no es relevante, ya que una relación corresponde a la idea matemática de conjunto SQL permite presentar las filas resultado de una consulta de forma ordenada en funciónde las necesidadesde de cada momento mediante la cláusula ORDER BY: Ordenación según valores de una o varias columnas Ascendente ASC (por defecto) ) o Descendente DESC Las filas no se ordenan en disco: se ven ordenadas, pero no lo están en la tabla. Ejemplo: Nombrede los empleadosordenados por su sueldo SELECT empleados.nombre FROM empleados ORDER BY sueldo; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 16 Funciones de Agregación SQL permite hacer operaciones de agregación sobre las relaciones. Función COUNT( ): Cuenta el número de filas o de valores especificados en una consulta Funciones SUM( ), MAX( ), MIN( ), AVG( ): Suma, máximo, mínimo y media aritmética (promedio) Ejemplo: Calcular la suma de los sueldos, el máximo, el mínimo, la media y contar todos los empleados. SELECT SUM(sueldo), MAX(sueldo), MIN(sueldo), AVG(sueldo), COUNT(*) FROM empleados; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 17 IISSI 9
Funciones de Agregación con Agrupación Se utilizan cuando se quieren aplicar funciones agregadas a subgrupos de tuplasde una relación con el mismo valor. Se definen los atributos de agrupación y se pueden aplicar las funciones a cada uno de los grupos formados. Ejemplo: Mostrar para cada sucursal, el número de trabajadores y su sueldo medio. SELECT sucursal, COUNT(*), AVG(sueldo) FROM Empleado GROUP BY sucursal; A IdEmpleado Sucursal Sueldo IdEmpleado Sueldo 1 A 1000 2 A 1500 3 B 1200 4 C 900 5 C 2100 C 1 1000 2 1500 B IdEmpleado IdEmpleado Sueldo Sueldo 4 900 5 2100 3 1200 noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 18 Funciones de Agregación con Condiciones Es posible especificar una condición sobre el grupo de tuplas asociado a cada valor de los atributos de agrupación con la cláusula HAVING. Sólo los grupos que cumplan la condición formarán parte de la relación de salida de la consulta. Ejemplo: Mostrar para cada sucursal, el número de trabajadores y su sueldo medio siempre que la sucursal tenga al menos dos trabajadores. SELECT sucursal, COUNT(*), AVG(sueldo) FROM Empleado GROUP BY sucursal HAVING COUNT(*)>1; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 19 IISSI 10
Operacines de Conjuntos Como las relaciones corresponden a la idea matemática de conjunto, se pueden utiliza las operaciones de UNION (U), INTERSECT ( ), EXCEPT EXCEPT ( ) (minus en ORACLE). Como resultado se obtiene un nuevo conjunto de filas donde las filas repetidasse se eliminan Las tablas operando han de ser compatibles en tipo: igual nº de columnas, y columnas correspondientes con el mismo dominio Ejemplo: Identificador de las propiedades donde está involucrado el empleado con DNI 78945612D, tanto como responsable como gerente de la sucursal. ( SELECT inmueble.idpropiedad FROM Inmueble WHERE inmueble.idempleado= 78945612D ) UNION ( SELECT inmueble.idpropiedad FROM inmueble, empleado, sucursal WHERE sucursal.responsable= 78945612D and sucursal.idsucursal=empleado.idsucursal and empleado.idempleado=inmueble.idempleado); Para NO eliminar duplicadosde manera explícitase utiliza la clausula ALL. UNION ALL, INTERSECT ALL, EXCEPT ALL noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 20 Más Operadores en la cláusula WHERE La cláusula WHERE puede estar formada por: Una combinación de comparaciones booleanas con los operadores AND, OR y NOT Operador EXISTS Operador IN Operadores ALL, ANY o SOME Between Unique Top (no soportado en Oracle 9i, donde hay que utilizar el atributo rownum que tienen las tablas) Is null Like noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 21 IISSI 11
Operador EXISTS EXISTS(S), comprueba si la tabla S está vacía Devuelve TRUE si la tabla S contiene al menos una fila y FALSE en caso contrario S suele ser una consulta anidada correlacionada Ejemplos: Nombre de empleados que llevan al menos un piso SELECT nombre from empleados e WHERE EXISTS (SELECT * FROM inmuebles WHERE inmuebles.idempleado=e.idempleado); Nombre de empleados que NO llevan ningún noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 22 piso Operador IN El operador de comparación IN permite comparar un valor individual v (generalmente un nombre de atributo) con un conjunto de valores V (generalmente una consulta anidada). Devuelve TRUE si v es uno de los elementos de V. Ejemplo: Nombre de empleados que llevan al menos un piso SELECT nombre FROM empleados WHERE idempleado IN (SELECT idempleado FROM inmuebles); También es posible utilizar IN con un conjunto explícito de valores Ejemplo: Nombre de los empleados que trabajan en las sucursales 1, 2 ó 3. SELECT nombre FROM empleado WHERE idsucursal IN (1,2,3); noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 23 IISSI 12
Operadores ANY/SOME, ALL Operador ANY(SOME) Sintaxis: t <op> [ANY SOME] S, donde <op> puede ser {>,, <,,, = } Compara una fila t con las filas resultado de la consulta anidada S Devuelve TRUE si alguna fila e de S cumple que t <op> e OperadorALL (otro uso del mismo operador) Sintaxis: t <op> ALL S, <op> puede ser { >,, <,,, = } Compara una fila t con filas resultado de una consulta anidada S Devuelve TRUE si para todafila e de S se cumple que t <op> e Ejemplo: Nombres de los empleados cuyo salario es menor que el de todoslos empleadosde la sucursal 3. SELECT nombre FROM Empleado WHERE sueldo< ALL (SELECT sueldo FROM Empleado WHERE idsucursal=3 ); noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 24 Operadores BETWEEN y UNIQUE BETWEEN permite describir rangos de valores en las condicionales de SELECT Ejemplo: Empleados que cobran entre 1000 y 2000 euros SELECT * FROM empleado WHERE empleado.sueldo BETWEEN 1000 and 2000; UNIQUE comprueba si existen tuplas duplicadas Ejemplo: Nombre de los empleados que son responsables de una única sucursal SELECT * FROM empleado WHERE UNIQUE (SELECT idsucursal from sucursal WHERE empleado.idempleado=sucursal.responsable); noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 25 IISSI 13
Operadores TOP y NULOS TOP limita el número de filas que devuelve la la consulta SELECT TOP N <lista de atributos> NULOS Suele ir combinado con una consulta que devuelve las tuplas ordenadas por algún atributo. Se utiliza para saber si un campo está vacío, porque al comparar cualquier objeto con NULL da FALSE. V is NULL, V is NOT NULL Ejemplo: Empleados que no pertenecen a ninguna sucursal SELECT nombre from empleado WHERE idsucursal IS NULL noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 26 Operador LIKE para comparara subcadenas Para comparar cadenas de caracteres se utiliza el operador de comparación LIKE. Las cadenas parciales se especifican mediante los caracteres reservados % (lista de caracteres) y _ (sólo un carácter). Ejemplo: Lista de las sucursales cuya dirección es avenida de las ciencias SELECT * FROM sucursales WHERE dirección LIKE Avenida de las ciencias ; noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 27 IISSI 14
Operadores de Conjunto: INNER JOIN y OUTER JOIN Es otra forma de permite combinar registros de dos o más tablas. INNER JOIN devuelve los registros cuyos valores están en ambas tablas SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name Ejemplo: Empleados con los inmuebles que tienen asignados SELECT * FROM empleados INNER JOIN inmuebles ON inmuebles.idempleado = empleado.idempleado noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 28 Operadores de Conjunto: INNER JOIN y OUTER JOIN Es otra forma de permite combinar registros de dos o más tablas. FULL JOINdevuelve los registros de ambas tablas, aunque no existan valores iguales entre ellas SELECT * FROM TableA FULL JOINTableB ON TableA.name = TableB.name Ejemplo: Todos los empleados y todos los inmuebles que tienen asignados SELECT * FROM empleados FULL JOIN inmuebles ON inmuebles.idempleado = empleado.idempleado noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 29 IISSI 15
Operadores de Conjunto: INNER JOIN y OUTER JOIN Es otra forma de permite combinar registros de dos o más tablas. LEFT JOIN devuelve los registros de ambas tablas, aunque no existan valores iguales entre ellas SELECT * FROM TableA LEFT JOINTableB ON TableA.name = TableB.name Ejemplo: Todos los empleados y si tienen inmuebles asignados también la información de ellos SELECT * FROM empleados LEFT JOIN inmuebles ON inmuebles.idempleado = empleado.idempleado noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 30 Operadores de Conjunto: INNER JOIN y OUTER JOIN IdInmueble IdEmpleado 1 A 2 C RIGHT LEFT FULL INNER IdEmpleado Nombre IdInmueble IdEmpleado Nombre 1 A Eva NULL B Patricia IdInmueble IdEmpleado Nombre 1 A Eva 2 C NULL IdInmueble IdEmpleado Nombre 1 A Eva 2 C NULL NULL B Patricia IdInmueble IdEmpleado Nombre 1 A Eva A B Eva Patricia noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 31 IISSI 16
Resumen Consultas JOIN noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 32 Consultas de Agregados Complejas Es posible utilizar operadores complejos del tipo de ALL junto a consultas anidadas en las condiciones sobre agrupaciones Ejemplo: Sucursal con mayor número de empleados Utilizando ALL: SELECT E.idSucursal, count(*) FROM empleado E GROUP BY idsucursal HAVING count(*) >= ALL (SELECT count(*) FROM empleado GROUP BY idsucursal) noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 33 IISSI 17
Consultas de Agregados Complejas Utilizando SELECT Anidado: SELECT E.idSucursal, count(*) FROM empleado E GROUP BY idsucursal HAVING count(*) >= ALL (SELECT max(maximo) FROM (SELECT count(*) as maximo FROM empleado GROUP BY idsucursal ) ) noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 34 Orden de las. 1) FROM (es decir, la reunión o joinde tablas, si se especifica más de una) 2) WHERE 3) GROUP BY 4) HAVING 5) SELECT 6) ORDER BY noviembre 2012 Introducción a la Ingeniería del Software y a los Sistemas de Información 35 IISSI 18