Esta operación non é necesaria desde un rexistro nunha táboa para ter un rexistro relacionado co rexistro. O rexistro mantense na táboa combinada aínda que non hai correspondente na outra táboa.
Hai tres tipos de combinacións externas, a esquerda, a unión correcta e a conexión completa, onde se toman todos os rexistros Da mesa á esquerda ou á táboa correcta, ou todos os rexistros respectivamente.
xemped îdeditar
O resultado desta operación sempre contén todos os rexistros da táboa da esquerda (a primeira táboa mencionada na consulta), independentemente de que exista un rexistro correspondente na táboa da dereita.
A esquerda A declaración devolve o par de todos os valores da mesa esquerda cos valores da táboa correcta correspondente, se hai, ou devolver un valor nulo nulo nos campos do TA Bla dereita cando non hai correspondencia.
A diferenza do resultado presentado nos exemplos de combinación interna onde non se mostrou o empregado cuxo departamento non existía, no seguinte exemplo, presentaranse empregados co seu respectivo departamento e, ademais, un empregado cuxo departamento non existe.
O empregado que non ten apartamento está situado na zona amarela do diagrama á dereita, mentres que os empregados co departamento están na zona de laranxa, na intersección dun e b.
Exemplo de esquerda para a combinación externa:
SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
empregado | departamento | ||||||||
---|---|---|---|---|---|---|---|---|---|
apelido | idDepartment | nome | idDepartment | ||||||
33 | 33 | 33 | andrade | 31 | Vendas | 31 | |||
Róbinson | 34 | Produción | 34 | Zolano | 34 | 34 | |||
GASPAR | 36 | null | null | ||||||
Steinberg | 33 | Enxeñaría | 33 |
Únete á esquerda excluíndo a intersección
Se desexa mostrar só os rexistros da primeira táboa que non teñen correspondente no segundo, pode engadir a condición n adecuado na cláusula onde. Isto dará aos empregados que non están asignados a ningún departamento, que no diagrama da dereita están representados en amarelo.
SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento WHERE departamento.IDDepartamento IS NULL
empregado | departamento | |||
---|---|---|---|---|
apelido | idDepartment | nome | idDepartment | |
GASPAR | 36 | null | null |
Dereito Únete ou right joineditar
Esta operación é unha imaxe reflectida do anterior; O resultado desta operación sempre contén todos os rexistros da táboa da dereita (a segunda táboa mencionada na consulta), independentemente de que exista ou non un rexistro correspondente na táboa da esquerda. o A oración directa dereita devolve todos os valores da táboa correcta cos valores da táboa esquerda correspondente, se hai ou devolver un valor nulo nulo nos campos da táboa esquerda cando non hai correspondencia.
No diagrama da dereita, os departamentos que non teñen empregados están na zona verde mentres os departamentos dos empregados están na área de laranxa, na intersección dun e B.
Ejemplo de dereito Únete a la combinación externa:
SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado |
||
---|---|---|
apelido |
||
Zolano
34 producción 34 |
||
Jordan
33 Ingeniería 33 |
||
Robinson
34 producción 34 |
||
Steinberg
33 Ingeniería 33 |
||
Andrade
31 Ventas 31 |
||
máis | máis
catálogo Cadeo 35 |
En este caso El Área de Mercadeo fue presentada nos resultados, aunque intensa ou Hay empleados rexistrados en dicha área.
Right Únete excluyendo la intersecciónEditar
si se quieren Mostrar los Rexistros solo de Tabla de la Departamento de That tengan ou correspondientes en la Tabla de Empleado, é puede agregar la adecuada condición en la cláusula Where. Nos segundo esto that los departamentos ou tengan asignados ningun empleado. En el diagrama de la Derecha, esto se represen En verde.
SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento WHERE empleado.IDDepartamento IS NULL
Empleado |
||
---|---|---|
apelido |
||
máis | máis
Mercadeo 35 |
equivalencia entre Esquerda Únete y dereito JOINEditar
Hay una total de equivalencia entre las That usan sentencias Esquerda Únete y las That usan Únete dereito. Todo lo que se puede hacer con uno se puede hacer con el otro. Cambiando la Perspectiva de Do es la Tabla Izquierda y oído es la Tabla Derecha, y teniendo Coidado con las Condicións, é puede hacer la sentencia equivalente.
Por Ejemplo, hagamos El dereito Únete anterior Pero esta vez usando Esquerda unir. Dereito Únete en el anterior é consideraba Empleado Tabla la la izquierda y la Tabla Departamento de la Derecha. Para hacer un Esquerda Únete equivalente cambiamos de Perspectiva y “volteamos” Las tablas. Consideremos Ahora la Tabla Departamento de la izquierda y la Tabla de la Derecha Empleado. Podemos obtener Exactamente El mismo resultado con la sentencia Siguiente:
SELECT * FROM departamento LEFT OUTER JOIN empleado ON departamento.IDDepartamento = empleado.IDDepartamento WHERE empleado.IDEmpleado IS NULL
Departamento |
|||
---|---|---|---|
NombreDepartamento |
|||
Mercadeo
35 |
máis | máis |
combinacion completa (Full unión externa) Editar
This Operación presenta los resultados de Tabla Tabla Izquierda Derecha y aunque ou tengan correspondencia alguna en la Otra Tabla. La Tabla combinada contendrá, entonces, todo los rexistros de ambas tablas y presentará valores nulos nulos para rexistros que pareja.
En el diagrama de la Derecha, El Area anaranjada represen los empleados That estan Asociados a un departamento, área para Amarilla El de los empleados That estan en ningun ou departamento, y el verde área para los que hai Departamentos Tienen empleados.
Ejemplo de combinación externa:
SELECT * FROM empleado FULL OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado |
|||
---|---|---|---|
apelido |
|||
Zolano
34 producción 34 |
|||
Jordan
33 Ingeniería 33 |
|||
Robinson
34 producción 34 |
|||
Gaspar
36 |
máis | máis | |
Andrade
31 Ventas |
|||
máis | máis
Mercadeo 35 |
Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su Área correspondiente, y se muestra ademas El Departamento de Mercadeo con valor nulo nos empleados de ESA Área.
Algunos Sistemas de bases de datos ou soportan This funcinalidad, Pero This puede ser emulada a través de las combinaciones da Táboa Izquierda, Táboa Derecha y de la sentencia de Unión Unión.
o mismo Ejemplo puede expresarse Así:
SELECT * FROM empleado LEFT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento UNION SELECT * FROM empleado RIGHT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
completa excluyendo la intersecciónEditar
Ela é quieren Amosar Los de solo rexistros de Las tablas That ou tengan correspondencia en la Otra, é pueden agregar las Condicións adecuadas en la cláusula Where.
En el diagrama de la Derecha, Amarilla El Area Representa los empleados That ou estan asignados a ningun departamento, mientras que el zona verde represen los Departamentos que no empleados Tienen.
SELECT * FROM empleado FULL OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento WHERE (empleado.IDDepartamento IS NULL) OR (departamento.IDDepartamento is NULL)
Empleado |
|||
---|---|---|---|
apelido |
|||
Gaspar
36 |
máis | máis | |
máis | máis
Mercadeo 35 |