Joins används för att kombinera två relaterade tabeller tillsammans.
I ditt exempel kan du kombinera tabellen Anställd och Avdelningstabellen, så här:
SELECT FNAME, LNAME, DNAME
FROM
EMPLOYEE INNER JOIN DEPARTMENT ON EMPLOYEE.DNO=DEPARTMENT.DNUMBER
Detta skulle resultera i en postuppsättning som:
FNAME LNAME DNAME
----- ----- -----
John Smith Research
John Doe Administration
Jag använde en INNER JOIN
ovan. INNER JOIN
s kombinera två tabeller så att endast poster med matchningar i båda tabellerna visas och de är sammanfogade i detta fall på avdelningsnumret (fältet DNO i Anställd, DNUMBER i avdelningstabellen).
LEFT JOIN
s låter dig kombinera två tabeller när du har poster i den första tabellen men kanske inte har rekord i den andra tabellen. Låt oss till exempel säga att du vill ha en lista över alla anställda, plus eventuella anhöriga:
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
Problemet här är att om en anställd inte gör det har en beroende, kommer deras post inte att dyka upp alls -- eftersom det inte finns någon matchande post i DEPENDENT-tabellen.
Så du använder en vänster join som behåller all data till "vänster" (d.v.s. den första tabellen) och hämtar matchande data till "höger" (den andra tabellen):
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 får vi alla av de anställdas register. Om det inte finns några matchande beroende(r) för en given anställd, visas dependent_first
och dependent_last
fälten kommer att vara null.