domingo, 26 de abril de 2015

Consultas de combinación en SQL Server - Parte 2



  • Consultas Externas
Al igual que las consultas de combinación internas, combina los valores comunes de los campos indicados y además de la tabla que queramos, devuelve también el resto de valores aunque no coincidan. Para ello usaremos las siguientes opciones combinadas con join:

Sintaxis:

Select tablaprincipal.campo, tablaacombinar.campo
From tablaprincipal
left join / right join / cross join tabla
on condición

- Left Join: Indica que muestre todos los resultados de la columna de la izquierda
- Right Join: Indica que muestre todos los resultados de la columna de la derecha
- Cross Join: Muestra un producto cartesiano combinando todos los resultados de las dos tablas.

Ejemplos 1: 

SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
LEFT OUTER JOIN DEPT
ON EMP.DEPT_NO=DEPT.DEPT_NO
ORDER BY DEPT.DNOMBRE

Si existiera algún empleado que no tenga asignado un departamento, la consulta traería los datos del empleado, pero el nombre del departamento tendría el valor null porque no tendría ningún departamento asociado y en la consulta le estamos diciendo que seleccione los empleados aunque no tengan departamento asociado, ponemos como principal la tabla de la izquierda (EMP).



Ejemplo 2: 

SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
RIGHT OUTER JOIN DEPT
ON EMP.DEPT_NO=DEPT.DEPT_NO
ORDER BY DEPT.DNOMBRE

En esta consulta el departamento de producción tiene valores null porque le hemos dicho que seleccione la tabla de la derecha como principal (dept), con lo cual selecciona todos los campos de la tabla departamentos con coincidencias con emp o sin ellas.


Ejemplo 3:

SELECT APELLIDO,OFICIO,DNOMBRE
FROM EMP
CROSS JOIN DEPT

Realiza un producto cartesiano combinando todos los empleados con todos los departamentos.



Combinaciones con mas de dos tablas

Ya hemos visto como combinar 2 tablas con inner join, el siguiente ejemplo muestra como combinar las 3 tablas que tenemos en la base de datos. Podremos combinar tantas tablas como queramos usando inner join o full join.

SELECT P.APELLIDO AS [APELLIDO]
,S.NOMBRE AS [SALA]
,H.NOMBRE AS [HOSPITAL],
S.NUM_CAMA AS [Nº DE CAMAS]
FROM PLANTILLA P INNER JOIN SALA AS S
ON P.HOSPITAL_COD = S.HOSPITAL_COD
AND P.SALA_COD = S.SALA_COD
INNER JOIN HOSPITAL AS H
ON H.HOSPITAL_COD = P.HOSPITAL_COD


Podremos usar tantos inner join como queramos en nuestras consultas, pero habrá que tener cuidado a la hora de realizar las combinaciones para que no salgan productos cartesianos en la consulta.

Esta consulta devuelve el nombre del empleado, el nombre de la sala donde trabaja, el nombre del hospital y el número de camas. 


Combinar los valores de una tabla sobre sí misma 

Para ello crearemos dos copias de la misma tabla poniéndole un alías, para posteriorme nte combinar los resultados de ambas copias.

SELECT A.EMP_NO AS [PRIMER EMPLEADO]
,A.APELLIDO,A.DEPT_NO
,B.EMP_NO AS [SEGUNDO EMPLEADO],
B.APELLIDO
FROM EMP AS A INNER JOIN EMP AS B
ON A.EMP_NO = B.EMP_NO
ORDER BY B.EMP_NO


Espero haber ayudado en algo. Hasta la próxima oportunidad!







No hay comentarios:

Publicar un comentario en la entrada