sql >> Databasteknik >  >> RDS >> Mysql

När ska man använda en vänster ytterskarv?

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.



  1. .patch_storage

  2. Ansluter till Amazon RDS-instans genom EC2-instans med MySQL Workbench

  3. Så här avslutar du PostgreSQL kommandoradsverktyg:psql

  4. Postgres rekursiv fråga med row_to_json