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

Quando usar LEFT JOIN e quando usar INNER JOIN?


Existe alguma captura? Sim, existe -- as junções esquerdas são uma forma de junção externa, enquanto as junções internas são uma forma de junção interna.

Veja exemplos que mostram a diferença. Vamos começar com os dados básicos:
mysql> select * from j1;
+----+------------+
| id | thing      |
+----+------------+
|  1 | hi         |
|  2 | hello      |
|  3 | guten tag  |
|  4 | ciao       |
|  5 | buongiorno |
+----+------------+

mysql> select * from j2;
+----+-----------+
| id | thing     |
+----+-----------+
|  1 | bye       |
|  3 | tschau    |
|  4 | au revoir |
|  6 | so long   |
|  7 | tschuessi |
+----+-----------+

E aqui veremos a diferença entre uma junção interna e uma junção esquerda:
mysql> select * from j1 inner join j2 on j1.id = j2.id;
+----+-----------+----+-----------+
| id | thing     | id | thing     |
+----+-----------+----+-----------+
|  1 | hi        |  1 | bye       |
|  3 | guten tag |  3 | tschau    |
|  4 | ciao      |  4 | au revoir |
+----+-----------+----+-----------+

Hum, 3 linhas.
mysql> select * from j1 left join j2 on j1.id = j2.id;
+----+------------+------+-----------+
| id | thing      | id   | thing     |
+----+------------+------+-----------+
|  1 | hi         |    1 | bye       |
|  2 | hello      | NULL | NULL      |
|  3 | guten tag  |    3 | tschau    |
|  4 | ciao       |    4 | au revoir |
|  5 | buongiorno | NULL | NULL      |
+----+------------+------+-----------+

Uau, 5 linhas! O que aconteceu?

Junções externas, como left join preserve as linhas que não correspondem -- portanto, as linhas com id 2 e 5 são preservadas pela consulta de junção esquerda. As colunas restantes são preenchidas com NULL.

Em outras palavras, as junções esquerda e interna não são intercambiáveis.