Clase 07- Consultas Multitablas - Subconsultas

21
Consultas Multitablas - Subconsultas Prof. Javier García Andonaire

Transcript of Clase 07- Consultas Multitablas - Subconsultas

Page 1: Clase 07- Consultas Multitablas - Subconsultas

Consultas Multitablas - Subconsultas

Prof. Javier García Andonaire

Page 2: Clase 07- Consultas Multitablas - Subconsultas

Consultas Multitabla

Las consultas no siempre involucran una sola tabla de datos, generalmente involucran dos o mas tablas de datos generándose a partir de esto una consulta llamada multitabla. Gracias al concepto de llave foránea podemos relacionar 2 o más tablas en base a los campos en común que éstas poseen y realizar combinaciones entre ellas.

Page 3: Clase 07- Consultas Multitablas - Subconsultas

Unión InternaEl operador INNER JOIN

Una combinación interna es aquélla en la que los valores de las columnas que se están combinando se comparan mediante un operador de comparación.

En el estándar SQL-92, las combinaciones internas se pueden especificar en las cláusulas FROM o WHERE. Éste es el único tipo de combinación que SQL-92 admite en la cláusula WHERE. Las combinaciones internas especificadas en la cláusula WHERE se conocen como combinaciones internas al estilo antiguo.

Page 4: Clase 07- Consultas Multitablas - Subconsultas

Sintaxis INNER JOINUSE DATABASESELECT Lista_CamposFROM Tabla_1 A INNER JOIN Tabla_2 BON A.Campo1 = B.Campo1

*A y B son Alias de las tablas Tabla_1 y Tabla_2 respectivamente.* Campo1 y Campo2 deben representar lo mismo.

USE DATABASESELECT Lista_CamposFROM Tabla_1 A ,Tabla_2 BWHERE A.Campo1 = B.Campo1

*A esto se le conoce como combinación equivalente.

Page 5: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo INNER JOIN

USE VentasDBSELECT *FROM Cliente A INNER JOIN Factura BON A.IdCliente = B.IdCliente

*IdCliente es el campo relación(FK) en la Tabla Factura*Esta consulta devolverá únicamente los registros de la tabla Cliente que encuentren una coincidencia en la tabla Factura.

USE VentasDBSELECT *FROM Cliente A , Factura BWHERE A.IdCliente = B.IdCliente

*Combinación Equivalente

Page 6: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo INNER JOIN

Page 7: Clase 07- Consultas Multitablas - Subconsultas

El operador LEFT OUTER JOIN Las combinaciones internas sólo devuelven filas cuando

hay una fila de ambas tablas, como mínimo, que coincide con la condición de la combinación. Las combinaciones internas eliminan las filas que no coinciden con alguna fila de la otra tabla. Sin embargo, las combinaciones externas devuelven todas las filas de una de las tablas o vistas mencionadas en la cláusula FROM, como mínimo, siempre que tales filas cumplan con alguna de las condiciones de búsqueda de WHERE o HAVING.

Todas las filas se recuperarán de la tabla izquierda a la que se haya hecho referencia con una combinación externa izquierda (LEFT OUTER JOIN), y de la tabla derecha a la que se haya hecho referencia con una combinación externa derecha (RIGHT OUTER JOIN)

Page 8: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo LEFT OUTER JOIN

SELECT Lista_CamposFROM Tabla1 A LEFT OUTER JOIN TAbla2 BON A.Campo1=B.Campo1

*A y B son Alias de las tablas Tabla_1 y Tabla_2 respectivamente.* Campo1 y Campo2 deben representar lo mismo.

USE VentasDBSELECT *FROM Cliente A LEFT OUTER JOIN Factura BON A.IdCliente = B.IdCliente*IdCliente es el campo relación(FK) en la Tabla Factura

*LEFT OUTER JOIN incluye en el resultado todas las filas de la tabla Cliente, tanto si hay una coincidencia en la columna IdCliente de la tabla Factura como si no la hay. Observe que, en los resultados, hay algunos clientes que en los campos que difieren a NumeroFactura contienen valores NULL, dado que no hay coincidencia en la columna cod_cli.

Page 9: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo LEFT OUTER JOIN

Page 10: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo LEFT OUTER JOIN

Page 11: Clase 07- Consultas Multitablas - Subconsultas

El operador RIGHT OUTER JOIN

Este operador es similar a LEFT OUTER JOIN. En realidad todo depende donde coloquemos las tablas a combinar. SELECT Lista_CamposFROM Tabla1 A RIGHT OUTER JOIN TAbla2 BON A.Campo1=B.Campo1

*A y B son Alias de las tablas Tabla_1 y Tabla_2 respectivamente.* Campo1 y Campo2 deben representar lo mismo.

Page 12: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo RIGHT OUTER JOIN supongamos que se requiere una lista de la razón

social de Clientes, sus direcciones y los nombres de distrito donde se ubican, INCLUYENDO AQUELLOS DE DISTRITOS DONDE NO HAY CLIENTES REGISTRADOS.SELECT RAZONSOCIAL, DIRECCIONLEGAL, NOMBREDISTRITO FROM CLIENTE A RIGHT OUTER JOIN DISTRITO B ON A.CODDISTRITO=B.CODDISTRITO

Page 13: Clase 07- Consultas Multitablas - Subconsultas

Ejemplo RIGHT OUTER JOIN

Page 14: Clase 07- Consultas Multitablas - Subconsultas

El operador FULL OUTER JOIN

Representa una combinación completa que incluirá todas las filas de ambas tablas, sin tener en cuenta si los valores cumplen con la condición de combinación.SELECT RAZONSOCIAL, DIRECCIONLEGAL, NOMBREDISTRITO FROM CLIENTE A FULL OUTER JOIN DISTRITO B ON A.CODDISTRITO=B.CODDISTRITO

Page 15: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas

Una consulta anidad o subconsulta es una consulta SELECT que devuelve un valor único y está anidada en una instrucción SELECT, INSERT, UPDATE o DELETE, o dentro de otra subconsulta. Una subconsulta se puede utilizar en cualquier parte en la que se permita una expresión. En este ejemplo se utiliza una subconsulta.SELECT Lista_Campos FROM Tabla

WHERE Campo IN ( SELECT Campo FROM Tabla WHERE Condición )

Page 16: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas

Se llama también subconsulta a una consulta o selección interna, mientras que la instrucción que contiene una subconsulta también es conocida como consulta o selección externa.

Muchas de las instrucciones Transact-SQL que incluyen subconsultas se pueden formular también como combinaciones. Otras preguntas se pueden formular sólo con subconsultas.

Page 17: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas - Ejemplo

SELECT COD_VEN, NOM_VEN FROM TB_VENDEDORWHERE COD_VEN = ( SELECT COD_VEN FROM TB_FACTURA WHERE NUM_FAC = 'FA003' )

Selecciona el Código de Vendedor, Nombre de Vendedor para el Código de Vendedor seleccionado de la Factura cuyo numero sea ‘FA003’.

Page 18: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas - Ejemplo

SELECT IdCliente, Ap_paterno,Ap_materno FROM CLIENTEWHERE IdCliente =(SELECT IdCliente FROM FACTURA WHERE NumeroFactura ='1100000100')

Page 19: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas

Una subconsulta anidada en la instrucción externa SELECT tiene los siguientes componentes: Una consulta SELECT normal, que incluye los

componentes normales de la lista de selección.

Una cláusula normal FROM que incluye uno o más nombres de tablas o vistas.

Una cláusula opcional WHERE. Una cláusula opcional GROUP BY. Una cláusula opcional HAVING.

Page 20: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas

La consulta SELECT de una subconsulta se incluye siempre entre paréntesis. No puede incluir una cláusula COMPUTE y sólo puede incluir una cláusula ORDER BY cuando se especifica también una cláusula TOP.

Una subconsulta puede anidarse dentro de la cláusula WHERE o HAVING de una instrucción externa SELECT, INSERT, UPDATE o DELETE, o dentro de otra subconsulta.

Page 21: Clase 07- Consultas Multitablas - Subconsultas

Consultas Anidadas

Se puede disponer de hasta 32 niveles de anidamiento, aunque el límite varía dependiendo de la memoria disponible y de la complejidad del resto de las expresiones de la consulta. Las consultas individuales puede que no admitan anidamientos por encima de 32 niveles. Una subconsulta puede aparecer en cualquier parte en la que se pueda usar una expresión, si devuelve un valor individual.