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

Quando utilizzare un join esterno sinistro?

I join vengono utilizzati per combinare due tabelle correlate.

Nel tuo esempio, puoi combinare la tabella Employee e la tabella Department, in questo modo:

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

Ciò risulterebbe in un recordset come:

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

Ho usato un INNER JOIN sopra. INNER JOIN s combinare due tabelle in modo che solo i record con corrispondenze in entrambe le tabelle vengono visualizzati e vengono uniti in questo caso, sul numero del reparto (campo DNO in Impiegato, DNUMBER nella tabella Reparto).

LEFT JOIN s ti consentono di combinare due tabelle quando hai record nella prima tabella ma potrebbe non avere record nella seconda tabella. Ad esempio, supponiamo di volere un elenco di tutti i dipendenti, più eventuali dipendenti:

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

Il problema qui è che se un dipendente non lo fa hanno un dipendente, quindi il loro record non verrà visualizzato affatto, perché non ci sono record corrispondenti nella tabella DIPENDENTE.

Quindi, usi una sinistra join che mantiene tutti i dati a "sinistra" (cioè la prima tabella) e estrae tutti i dati corrispondenti a "destra" (la seconda tabella):

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

Ora otteniamo tutto dei registri dei dipendenti. Se non ci sono dipendenti corrispondenti per un determinato dipendente, il dependent_first e dependent_last i campi saranno nulli.