Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wann verwendet man einen Left Outer Join?

Joins werden verwendet, um zwei verwandte Tabellen miteinander zu kombinieren.

In Ihrem Beispiel können Sie die Employee-Tabelle und die Department-Tabelle wie folgt kombinieren:

SELECT FNAME, LNAME, DNAME
FROM
EMPLOYEE INNER JOIN DEPARTMENT ON EMPLOYEE.DNO=DEPARTMENT.DNUMBER

Dies würde zu einem Datensatz wie folgt führen:

FNAME   LNAME   DNAME
-----   -----   -----
John    Smith   Research
John    Doe     Administration

Ich habe einen INNER JOIN verwendet Oben. INNER JOIN s Kombinieren Sie zwei Tabellen, sodass nur Datensätze mit Übereinstimmungen in beiden Tabellen werden angezeigt und verknüpft in diesem Fall auf die Abteilungsnummer (Feld DNO in Mitarbeiter, DNUMBER in Abteilungstabelle).

LEFT JOIN s erlauben Ihnen, zwei Tabellen zu kombinieren, wenn Sie Datensätze in der ersten Tabelle haben, aber möglicherweise nicht haben Datensätze in der zweiten Tabelle. Nehmen wir beispielsweise an, Sie möchten eine Liste aller Mitarbeiter sowie aller abhängigen Personen:

SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_last, DEPENDENT.LNAME as dependent_last
FROM
EMPLOYEE INNER JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN

Das Problem dabei ist, dass, wenn ein Mitarbeiter nicht eine abhängige Person haben, dann wird ihr Datensatz überhaupt nicht angezeigt -- weil es keinen übereinstimmenden Datensatz in der DEPENDENT-Tabelle gibt.

Sie verwenden also eine links join, der alle Daten auf der "linken" (d. h. der ersten Tabelle) behält und alle übereinstimmenden Daten auf der "rechten" (der zweiten Tabelle) einzieht:

SELECT EMPLOYEE.FNAME as employee_first, EMPLOYEE.LNAME as employee_last, DEPENDENT.FNAME as dependent_first, DEPENDENT.LNAME as dependent_last
FROM
EMPLOYEE LEFT JOIN DEPENDENT ON EMPLOYEE.SSN=DEPENDENT.ESSN

Jetzt bekommen wir alle der Mitarbeiterakten. Wenn es für einen bestimmten Mitarbeiter keine übereinstimmenden Angehörigen gibt, wird der dependent_first und dependent_last Felder sind null.