Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quand utiliser une jointure externe gauche ?

Les jointures sont utilisées pour combiner deux tables liées ensemble.

Dans votre exemple, vous pouvez combiner la table Employee et la table Department, comme ceci :

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

Cela se traduirait par un jeu d'enregistrements comme :

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

J'ai utilisé un INNER JOIN au dessus de. INNER JOIN s combiner deux tables de sorte que seulement les enregistrements avec des correspondances dans les deux tables sont affichés et ils sont joints dans ce cas, sur le numéro de service (champ DNO dans Employé, DNUMBER dans table Service).

LEFT JOIN s vous permettent de combiner deux tables lorsque vous avez des enregistrements dans la première table mais peut-être pas avoir des enregistrements dans la deuxième table. Par exemple, supposons que vous vouliez une liste de tous les employés, plus toutes les personnes à charge :

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

Le problème ici est que si un employé ne le fait pas ont une personne à charge, son enregistrement ne s'affichera pas du tout, car il n'y a pas d'enregistrement correspondant dans la table DEPENDENT.

Donc, vous utilisez un gauche jointure qui conserve toutes les données sur la "gauche" (c'est-à-dire la première table) et extrait toutes les données correspondantes sur la "droite" (la deuxième table) :

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

Maintenant, nous obtenons tout des dossiers des employés. S'il n'y a pas de personne à charge correspondante pour un employé donné, le dependent_first et dependent_last les champs seront nuls.