Cómo utilizar unirse al exterior sql
Cuando se está uniendo dos tablas SQL, la primera (lo llaman el otro a la izquierda) puede tener filas que no tienen homólogos a juego en la segunda tabla (el de la derecha). Por el contrario, la tabla de la derecha puede tener filas que no tienen homólogos coincidentes en la tabla de la izquierda.
Si se realiza una combinación interna en esas mesas, todas las filas coincidentes se excluyen de la salida. Combinaciones externas, Sin embargo, no excluyen las filas no coincidentes. Combinaciones externas vienen en tres tipos: la externa izquierda, se unen a la externa derecha y la externa completa.
Izquierda combinación externa
En una consulta que incluye una combinación, la mesa de la izquierda es la que precede a la palabra clave ÚNETE, y la tabla de la derecha es la que sigue. los izquierda combinación externa preserva filas coincidentes de la tabla a la izquierda, pero descarta filas coincidentes de la tabla de la derecha.
Para comprender combinaciones externas, considere una base de datos corporativa que mantiene registros de empleados, departamentos y ubicaciones de la empresa.
LOCATION_ID | CIUDAD |
---|---|
1 | Boston |
3 | Tampa |
5 | Chicago |
Aquí la empresa un seguimiento de los departamentos.
DEPT_ID | LOCATION_ID | NOMBRE |
---|---|---|
21 | 1 | Ventas |
24 | 1 | Admin |
27 | 5 | Reparación |
29 | 5 | Valores |
Aquí la empresa un seguimiento de los empleados.
EMP_ID | DEPT_ID | NOMBRE |
---|---|---|
61 | 24 | Iglesia |
63 | 27 | McCoy |
Ahora suponga que desea ver todos los datos de todos los empleados, incluyendo el departamento y la ubicación. Usted consigue esto con un equi-join:
* SELECT DE UBICACIÓN L, DEPTO D, EMPLEADO EWHERE L.LocationID = D.LocationIDAND D.DeptID = E.DeptID -
Esta declaración produce el siguiente resultado:
1 Boston 24 1 Administrador 61 24 Kirk5 Chicago 27 5 63 27 Reparación McCoy
Esta tabla de resultados da todos los datos de todos los empleados, incluyendo la ubicación y departamento. El equicombinación obras porque cada empleado tiene un lugar y un departamento.
A continuación, supongamos que usted desea que los datos sobre los lugares, con los datos del departamento y de los empleados relacionados. Este es un problema diferente porque puede existir una ubicación sin ningún tipo de departamentos asociados. Para conseguir lo que quieres, tienes que usar una combinación externa, como en el siguiente ejemplo:
SELECT * FROM UBICACIÓN L LEFT OUTER JOIN DEPARTAMENTO DON (L.LocationID = D.LocationID) LEFT OUTER JOIN EON EMPLEADO (D.DeptID = E.DeptID) -
Esto se unen datos saca de tres mesas. En primer lugar, la ubicación de la tabla se une a la tabla DEPT. El conjunto de resultados es entonces unida a la tabla EMPLOYEE. Las filas de la tabla a la izquierda del LEFT OUTER JOIN operador que no tienen ninguna fila correspondiente en la tabla de la derecha se incluyen en el resultado.
Así, en el primero se unen, se incluyen todos los lugares, incluso si no existe una sección asociada con ellos. En el segundo unirse, se incluyen todos los departamentos, aunque existe ningún empleado asociado con ellos. El resultado es el siguiente:
1 Boston 24 1 Administrador 61 24 Kirk5 Chicago 27 5 63 27 Reparación McCoy3 Tampa NULL NULL NULL NULL NULL NULL5 Chicago 29 5 Stock NULL NULL NULL1 Boston 21 1 Ventas NULL NULL NULL
Las dos primeras filas son las mismas que las dos filas de resultado en el ejemplo anterior. La tercera fila (3 Tampa) Tiene valores nulos en las columnas de departamento y de los empleados porque no hay departamentos se definen para Tampa y sin empleados están estacionados allí.
La cuarta y quinta filas (5 Chicago y 1 Boston) Contienen datos sobre la Valores y el Ventas departamentos, pero la Empleado columnas para estas filas contienen valores nulos, porque estos dos departamentos no tienen empleados. Esta combinación externa te dice todo lo que el equi-join te dijo - además de lo siguiente:
Todas las ubicaciones de la empresa, ya sea que tengan o no alguna departamentos
Todos los departamentos de la empresa, si tienen cualquier empleado o no
Las filas devueltas en el ejemplo anterior no se garantiza que sea en el orden que desee. El orden puede variar de una aplicación a la siguiente. Para asegurarse de que las filas devueltas están en el orden que desee, añadir una ORDER BY cláusula a su SELECT declaración, así:
SELECT * FROM UBICACIÓN L LEFT OUTER JOIN DEPARTAMENTO DON (L.LocationID = D.LocationID) LEFT OUTER JOIN EON EMPLEADO (D.DeptID = E.DeptID) ORDER BY L.LocationID, D.DeptID, E.EmpID-
Usted puede abreviar el exterior izquierdo se unen a la lengua como LEFT JOIN porque no hay tal cosa como una izquierda interior unirse.
Derecha combinación externa
los derecho combinación externa preserva filas coincidentes de la tabla de la derecha, pero descarta filas coincidentes de la tabla de la izquierda. Se puede utilizar en las mismas mesas y obtener el mismo resultado invirtiendo el orden en que se presentan las tablas de la unión:
SELECT * FROM EMPLOYEE E RIGHT OUTER JOIN DEPARTAMENTO DON (D.DeptID = E.DeptID) RIGHT OUTER JOIN UBICACIÓN LON (L.LocationID = D.LocationID) -
En esta formulación, el primero se unen produce una tabla que contiene todos los departamentos, si tienen un empleado asociado o no. El segundo unirse produce una tabla que contiene todos los lugares, si tienen un departamento de asociado o no.
Usted puede abreviar el exterior derecha se unen lenguaje como RIGHT JOIN porque no hay tal cosa como un derecho interior unirse.
Externa completa
los completa combinación externa combina las funciones de la combinación externa izquierda y la externa derecha. Conserva las filas no coincidentes tanto de la las tablas izquierdo y derecho. Considere el caso más general de la base de datos de la empresa utilizada en los ejemplos anteriores. Podría tener
Ubicaciones sin departamentos
Departamentos con ninguna ubicación
Departamentos sin empleados
Los empleados que no tienen departamentos
Para mostrar todas las localizaciones, departamentos y empleados, independientemente de si tienen filas correspondientes en las otras mesas, utilice una combinación externa completa el siguiente formulario:
SELECT * FROM UBICACIÓN L FULL OUTER JOIN DEPARTAMENTO DON (L.LocationID = D.LocationID) FULL OUTER JOIN EON EMPLEADO (D.DeptID = E.DeptID) -
Usted puede abreviar el full-exterior-unirse a la lengua como COMPLETO ÚNETE porque no hay tal cosa como un completo interior unirse.