05/06/2015 Objetivo Base de datos II El alumno elaborará consultas avanzadas utilizando un SGBD para desplegar información de acuerdo a las necesidades de la organización. UNIDAD IV. Consultas avanzadas MC Ricardo Israel Roque Covarrubias Resultado de Aprendizaje Contenido Elaborará con base en un caso de estudio un compendio que incluya los SCRIPTS de: 5 consultas locales 5 consultas remotas 5 subconsultas 5 consultas con conjuntos. 1. 2. 3. Consultas multitablas. Subconsultas. Operaciones con conjuntos operaciones MC Ricardo Israel Roque Covarrubias de MC Ricardo Israel Roque Covarrubias 1. Consultas Multitablas Producto cartesiano Producto cartesiano INNER JOIN OUTER JOIN MC Ricardo Israel Roque Covarrubias El producto cartesiano se indica poniendo en la FROM las tablas que queremos componer separadas por comas, podemos obtener así el producto cartesiano de dos, tres, o más tablas. MC Ricardo Israel Roque Covarrubias 1 05/06/2015 INNER JOIN El INNER JOIN es otro tipo de composición de tablas, permite emparejar filas de distintas tablas de forma más eficiente que con el producto cartesiano cuando una de las columnas de emparejamiento está indexada. MC Ricardo Israel Roque Covarrubias INNER JOIN SELECT campos FROM gente INNER JOIN empresa ON gente.cod_empleado = empresa.cod_empleado MC Ricardo Israel Roque Covarrubias SELECT * FROM (pedidos INNER JOIN clientes ON pedidos.clie = clientes.numclie) INNER JOIN empleados ON pedidos.rep = empleados.numemp SELECT * FROM clientes INNER JOIN (pedidos INNER JOIN empleados ON pedidos.rep = empleados.numemp) ON pedidos.clie = clientes.numclie MC Ricardo Israel Roque Covarrubias INNER JOIN Ya que en vez de hacer el producto cartesiano completo y luego seleccionar la filas que cumplen la condición de emparejamiento, para cada fila de una de las tablas busca directamente en la otra tabla las filas que cumplen la condición, con lo cual se emparejan sólo las filas que luego aparecen en el resultado. MC Ricardo Israel Roque Covarrubias INNER JOIN LEFT JOIN RIGHT JOIN FULL JOIN MC Ricardo Israel Roque Covarrubias SELECT * FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND (pedidos.producto = productos.idproducto) MC Ricardo Israel Roque Covarrubias 2 05/06/2015 2. Subconsultas Subconsulta como tabla derivada Es un conjunto de registros dentro de una consulta que funciona como una tabla Ocupa el lugar de la tabla en la cláusula FROM 2. Subconsultas USE northwind SELECT T.orderid, T.customerid FROM (SELECT orderid, customerid FROM orders ) AS T MC Ricardo Israel Roque Covarrubias 2. Subconsultas Subconsulta correlacionada Cuando crea una subconsulta correlacionada, las subconsultas internas se evalúan repetidamente, una vez por cada fila de la consulta externa USE northwind SELECT orderid, customeridFROM orders AS or1 WHERE 20 < (SELECT quantity FROM [order details] AS od WHERE or1.orderid = od.orderid AND od.productid = 23) MC Ricardo Israel Roque Covarrubias Subconsulta como una expresión Se evalúa y trata como una expresión Se ejecuta una vez para la instrucción entera USE pubs SELECT title, price,( SELECT AVG(price) FROM titles) AS promedio, price-(SELECT AVG(price) FROM titles) AS diferencia FROM titles WHERE type='popular_comp MC Ricardo Israel Roque Covarrubias 2. Subconsultas USE northwind SELECT DISTINCT productid, quantity FROM [order details] AS ord1 WHERE quantity = (SELECT MAX(quantity) FROM [order details] AS ord2 WHERE ord1.productid = ord2.productid) En este ejemplo se devuelve una lista de productos y el pedido mayor realizado hasta la fecha de cada producto de la tabla order details. MC Ricardo Israel Roque Covarrubias 2. Subconsultas 2. Subconsultas USE pubs SELECT DISTINCT t1.type FROM titles AS t1 WHERE t1.type IN(SELECT t2.type FROM titles AS t2 WHERE t1.pub_id = t2.pub_id) USE pubs SELECT t1.type, t1.title, t1.priceFROM titles AS t1WHERE t1.price > ( SELECT AVG(t2.price)FROM titles AS t2WHERE t1.type = t2.type ) En este ejemplo se utiliza una subconsulta correlacionada para buscar los tipos de libros publicados por más de un editor. MC Ricardo Israel Roque Covarrubias En este ejemplo se buscan todos los títulos con un precio mayor que el precio promedio para libros del mismo tipo. MC Ricardo Israel Roque Covarrubias 3 05/06/2015 2. Subconsultas EXISTS y NOT EXISTS: Determinar si hay datos en una lista de valores USE NorthWind SELECT lastname, employeeid FROM employees AS e WHERE EXISTS ( SELECT * FROM orders AS o WHERE e.employeeid = o.employeeid AND o.orderdate = '5/9/1997' ) En este ejemplo se utiliza una subconsulta correlacionada con un operador EXISTS en la cláusula WHERE para devolver una lista de empleados que realizaron pedidos el día 5/9/1997 MC Ricardo Israel Roque Covarrubias 3. Union UNION: Crea un conjunto de resultados a partir de varias consultas Unir (UNION) todas (ALL) las filas de dos columnas de tablas diferentes. select City from Employees union all select City from Customers Devuelve la suma de todas las filas en ambas columnas. MC Ricardo Israel Roque Covarrubias 3. Union UNION Unir (UNION) las filas de dos columnas de tablas diferentes sin repetir ningún valor. select City from Employees union select City from Customers Devuelve la suma de todas las filas en ambas columnas pero con valores únicos. MC Ricardo Israel Roque Covarrubias 4