sql >> Databáze >  >> RDS >> Mysql

Kdy použít levé vnější spojení?

Spojení se používají ke spojení dvou souvisejících tabulek dohromady.

Ve vašem příkladu můžete zkombinovat tabulku Zaměstnanci a tabulku Oddělení, například takto:

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

Výsledkem by byla sada záznamů jako:

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

Použil jsem INNER JOIN výše. INNER JOIN s kombinovat dvě tabulky tak, aby pouze záznamy se shodami v obou tabulkách jsou zobrazeny a jsou spojeny v tomto případě na číslo oddělení (pole DNO v Zaměstnanec, DČÍSLO v tabulce Oddělení).

LEFT JOIN s vám umožní spojit dvě tabulky, když máte záznamy v první tabulce, ale nemusí mít záznamy ve druhé tabulce. Řekněme například, že chcete seznam všech zaměstnanců a všech závislých osob:

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

Problém je v tom, že pokud zaměstnanec nedělá mít závislého, pak se jeho záznam vůbec nezobrazí -- protože v tabulce DEPENDENT není žádný odpovídající záznam.

Takže použijete levé join, který uchovává všechna data „vlevo“ (tj. první tabulka) a vtahuje všechna odpovídající data „vpravo“ (druhá tabulka):

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

Nyní dostaneme vše ze zaměstnaneckých záznamů. Pokud pro daného zaměstnance neexistují žádné odpovídající závislé osoby, dependent_first a dependent_last pole budou mít hodnotu null.



  1. PHP/MySQL Aktualizovat výběr zaškrtávacího políčka do databáze

  2. Jak nainstalovat SQL Server na Linux

  3. Aktualizujte příkaz v MySQL pomocí C#

  4. Materializovaný pohled v mysql