Această operație nu este necesară dintr-o înregistrare într-un tabel pentru a avea o înregistrare înregistrată. Înregistrarea este menținută în tabelul combinat, deși nu există nici o corespondență în cealaltă tabel.
Există trei tipuri de combinații externe, alăturat stânga, alăturați-vă și alăturați complet, unde toate înregistrările sunt luate Din tabelul din stânga sau toată tabelul drept sau toate înregistrările.
Joinditar
Rezultatul acestei operațiuni conține întotdeauna toate înregistrările din tabelul din stânga (primul tabel menționat în interogare), indiferent dacă există o înregistrare corespunzătoare în tabelul din partea dreaptă.
Alăturați stânga declarația returnează perechea tuturor valorilor mesei stângi cu valorile mesei drepte corespunzătoare, dacă există sau returnați o valoare nulă nulă în câmpurile TA Dreapta blah atunci când nu există corespondență.
Spre deosebire de rezultatul prezentat în exemplele de combinație internă în care angajatul nu a fost prezentat al cărui departament nu exista, în exemplul următor, vor fi prezentate angajații cu departamentul lor respectiv și, în plus, un angajat al cărui departament nu există.
Angajatul care nu are un apartament este situat în zona galbenă a diagramei din dreapta, în timp ce angajații cu departamente se află în zona portocalie, la intersecția dintre A și B.
Exemplu de răsturnare stânga pentru combinația externă:
div>
SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
Departamentul | |||
---|---|---|---|
Prenume | IdDepartamentul | Nume | idddepartment |
33 | 33 | 33 | Andrade | 31 | 31 |
Róbinson | 34 | ||
zolano | 34 | ||
36 | null | ||
steinberg | 33 | Inginerie | 33 |
Alăturați-vă, cu excepția intersecției
Diagrama Venn reprezentând răbdarea din stânga, între tabelele A și B, adăugând o condiție în care cheile B sunt nulate
dacă doriți să afișați numai înregistrările primei tabele care nu au corespunzător în al doilea, puteți adăuga starea n adecvat în clauza unde. Acest lucru ne va oferi angajaților care nu sunt repartizați la niciun departament, care în diagrama din dreapta sunt reprezentate în galben.
Div>
SELECT * FROM empleado LEFT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento WHERE departamento.IDDepartamento IS NULL
Departamentul | |||
---|---|---|---|
Prenume | Iddepartment | Nume | idddepartment |
Gaspar | 36 | Null |
Drept exterior Alăturați-vă sau dreapta Joinditar
Această operație este o imagine reflectată a celei anterioare; Rezultatul acestei operațiuni conține întotdeauna toate înregistrările din tabelul din dreapta (al doilea tabel menționat în interogare), indiferent dacă există sau nu o înregistrare corespunzătoare în tabelul din stânga. Propoziție dreapta exterioară Returnează toate valorile mesei drepte cu valorile tabelului stâng corespunzător, dacă există sau returnați o valoare nulă nulă în câmpurile din tabelul din stânga când nu există corespondență.
În diagrama din dreapta, departamentele care nu au angajați sunt în zona verde, în timp ce departamentele angajaților se află în zona portocalie, la intersecția A și B.
Ejemplo de dreapta Alăturați-vă para la combinación iluminare:
SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
Empleado conținut> |
||
---|---|---|
Apellido conținut> |
||
Zolano
34 PRODUCCIÓN 34 |
||
Jordan
33 Ingeniería 33 |
||
Robinson
34 PRODUCCIÓN 34 |
||
Steinberg
33 Ingeniería 33 |
||
Andrade
31 Ventas 31 |
||
peste | peste
catalog Cadeo 35 |
En Este caso el Zonă de Mercadeo FUE presentada en los Resultados, aunque intensă sau Hay eMPLEADOS registrados en dicha Zona.
dreapta Alăturați-vă excluyendo la intersecciónEditar
Si se quieren Mostrar los registros solo de la Departamento Tabla de que Tengan sau correspondientes en la Empleado de Tabla, este pUEDE agregar la adecuada condición en la clausula Unde. Nr doua esto que los Departamentos sau Tengan asignados ningún Empleado. En el diagrama de la Derecha, esto se reprezentantului en verde.
SELECT * FROM empleado RIGHT OUTER JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento WHERE empleado.IDDepartamento IS NULL
Empleado conținut> |
||
---|---|---|
Apellido conținut> |
||
peste | peste
Mercadeo 35 |
Alăturați-equivalência entre stânga y dreapta JOINEditar
fân una totală equivalência Entre las que USAN sentencias stânga Alăturați-y las que USAN Înscrie-te pe dreapta. Todo lo que se puede Hacer con uno se puede Hacer con El otro. Cambiando la Perspectiva Do es la Tabla Izquierda y auzit es la Tabla Derecha, y teniendo Cuidado con las condiciones, este PUEDE Hacer la POTRIVIT equivalente.
Por ejemplo, hagamos el dreapta Alăturați-vă anterior Pero Esta vez usando Stânga A te alatura. Dreptul Alăturați-en el anterioară este consideraba Empleado la la Izquierda Tabla y la Departamento de la Tabla Derecha. Para hacer ONU stânga Alăturați-vă equivalente cambiamos de y „volteamos Perspectiva” Tablas las. Consideremos Ahora la Departamento de la Tabla Izquierda y la Derecha de la Tabla Empleado. Podemos obtener exactamente el mismo resultado con la POTRIVIT Siguiente:
SELECT * FROM departamento LEFT OUTER JOIN empleado ON departamento.IDDepartamento = empleado.IDDepartamento WHERE empleado.IDEmpleado IS NULL
Departamento conținut> |
|||||
---|---|---|---|---|---|
NombreDepartamento conținut> |
|||||
Mercadeo
35 |
peste | peste |
Empleado conținut> |
|||
---|---|---|---|
Apellido conținut> |
|||
Zolano
34 PRODUCCIÓN 34 |
|||
Jordan
33 Ingeniería 33 |
|||
Robinson
34 PRODUCCIÓN 34 |
|||
Gaspar
36 |
peste | peste | |
Andrade
31 Ventas |
|||
peste | peste
Mercadeo 35 |
Como se puede Notar, en Este caso se encuentra el Empleado Gaspar con valor nulo en su Zona correspondiente, y se muestra además el Departamento de Mercadeo con valor nulo en los empleados ESA Area.
Algunos Sistemas de baze de Datos sau soportan Esta funcionalidad, pero Esta pUEDE Ser emulada la Traves de combinaciones las de Tabla Izquierda, Tabla Derecha y de la POTRIVIT Union Union.
El mismo ejemplo pUEDE expresarse Asi:
SELECT * FROM empleado LEFT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento UNION SELECT * FROM empleado RIGHT JOIN departamento ON empleado.IDDepartamento = departamento.IDDepartamento
completa Alăturați-vă excluyendo la intersecciónEditar
E Ea este quieren Mostrar solo los registros de Tablas las que sau Tengan correspondencia en la Otra, este pueden agregar Las condiciones adecuadas en la clausula În cazul în care.
En el Diagrama de la Derecha, el Zona Amarilla reprezentantului los EMPLEADOS que sau estan asignados la ningún Departamento, mientras que el Zona verde reprezentantului los Departamentos que nicio 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 conținut> Gaspar
|
36 peste |
peste |
|
||
---|---|---|---|---|---|
peste | peste
Mercadeo 35 |