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.