sql >> Database >  >> RDS >> Mysql

Wanneer gebruik je een left outer join?

Joins worden gebruikt om twee gerelateerde tabellen te combineren.

In uw voorbeeld kunt u de tabel Medewerker en de tabel Afdeling als volgt combineren:

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

Dit zou resulteren in een recordset zoals:

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

Ik heb een INNER JOIN . gebruikt boven. INNER JOIN s combineer twee tabellen zodat alleen records met overeenkomsten in beide tabellen worden weergegeven en ze zijn samengevoegd in dit geval op het afdelingsnummer (veld DNO in Medewerker, DNUMBER in Afdelingstabel).

LEFT JOIN s kunt u twee tabellen combineren wanneer u records in de eerste tabel heeft, maar misschien niet records in de tweede tabel hebben. Stel dat u bijvoorbeeld een lijst wilt van alle werknemers, plus eventuele personen ten laste:

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

Het probleem hier is dat als een werknemer niet een afhankelijke hebben, dan wordt hun record helemaal niet weergegeven -- omdat er geen overeenkomend record in de DEPENDENT-tabel is.

U gebruikt dus een links join die alle gegevens aan de "links" (d.w.z. de eerste tabel) bewaart en alle overeenkomende gegevens aan de "rechts" (de tweede tabel) binnenhaalt:

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

Nu krijgen we alle van de personeelsdossiers. Als er geen overeenkomende afhankelijke(n) zijn voor een bepaalde werknemer, wordt de dependent_first en dependent_last velden zijn null.



  1. MySQL InnoDB:verschil tussen `FOR UPDATE` en `LOCK IN SHARE MODE`

  2. MySqlCommand Command.Parameters.Add is verouderd

  3. Een studentendatabase maken met Microsoft Access

  4. Hoe voer ik een IF...THEN uit in een SQL SELECT?