Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Quando usar uma junção externa esquerda?


As junções são usadas para combinar duas tabelas relacionadas.

No seu exemplo, você pode combinar a tabela Employee e a tabela Department, assim:
SELECT FNAME, LNAME, DNAME
FROM
EMPLOYEE INNER JOIN DEPARTMENT ON EMPLOYEE.DNO=DEPARTMENT.DNUMBER

Isso resultaria em um conjunto de registros como:
FNAME   LNAME   DNAME
-----   -----   -----
John    Smith   Research
John    Doe     Administration

Eu usei um INNER JOIN acima de. INNER JOIN s combinam duas tabelas para que somente registros com correspondências em ambas as tabelas são exibidos e são unidos neste caso, no número do departamento (campo DNO em Employee, DNUMBER na tabela Department).

LEFT JOIN s permitem combinar duas tabelas quando você tem registros na primeira tabela, mas pode não tem registros na segunda tabela. Por exemplo, digamos que você queira uma lista de todos os funcionários, mais os dependentes:
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

O problema aqui é que se um funcionário não tiver um dependente, seu registro não será exibido - porque não há registro correspondente na tabela DEPENDENT.

Então, você usa uma esquerda join que mantém todos os dados à "esquerda" (ou seja, a primeira tabela) e puxa todos os dados correspondentes à "direita" (a segunda tabela):
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

Agora temos todos dos registros dos funcionários. Se não houver dependente(s) correspondente(s) para um determinado funcionário, o dependent_first e dependent_last campos serão nulos.