sql >> Database teknologi >  >> RDS >> Mysql

Hvornår skal man bruge en venstre udvendig samling?

Joins bruges til at kombinere to relaterede tabeller sammen.

I dit eksempel kan du kombinere tabellen medarbejder og afdelingstabellen, sådan:

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

Dette ville resultere i et rekordsæt som:

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

Jeg brugte en INNER JOIN over. INNER JOIN s kombinere to tabeller, så kun poster med match i begge tabeller vises, og de er forenet i dette tilfælde på afdelingsnummeret (felt DNO i Medarbejder, DNUMMER i afdelingstabel).

LEFT JOIN s giver dig mulighed for at kombinere to tabeller, når du har poster i den første tabel, men måske ikke har poster i den anden tabel. Lad os f.eks. sige, at du vil have en liste over alle medarbejdere plus eventuelle pårørende:

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 her er, at hvis en medarbejder ikke gør det har en afhængig, så vises deres post slet ikke -- fordi der ikke er nogen matchende post i DEPENDENT-tabellen.

Så du bruger en venstre join, som gemmer alle data til "venstre" (dvs. den første tabel) og trækker alle matchende data ind til "højre" (den anden tabel):

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 alle af medarbejdernes optegnelser. Hvis der ikke er nogen matchende afhængig(e) for en given medarbejder, er dependent_first og dependent_last felter vil være nul.



  1. SQLite - Opret et forhold

  2. Sådan sammenlignes dato i SQL

  3. Base64-kodning og afkodning i oracle

  4. Hvordan vælger man poster fra dette forhold?