sql >> Database >  >> RDS >> Mysql

Wanneer gebruik je LEFT JOIN en wanneer INNER JOIN?

Is er een vangst? Ja, dat is zo -- left joins zijn een vorm van outer join, terwijl inner joins een vorm zijn van, nou ja, inner join.

Hier zijn voorbeelden die het verschil aantonen. We beginnen met de basisgegevens:

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 |
+----+-----------+

En hier zien we het verschil tussen een inner join en een left join:

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 |
+----+-----------+----+-----------+

Hmm, 3 rijen.

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      |
+----+------------+------+-----------+

Wauw, 5 rijen! Wat is er gebeurd?

Outer joins zoals left join bewaar rijen die niet overeenkomen -- dus rijen met id 2 en 5 worden bewaard door de linker join-query. De overige kolommen zijn ingevuld met NULL.

Met andere woorden, left en inner joins zijn niet uitwisselbaar.



  1. Hoe een beschadigde MPTT-boom (geneste set) in de database te repareren met behulp van SQL?

  2. PreparedStatement en setTimestamp in oracle jdbc

  3. Uitdagingsoplossingen voor generatorreeksen voor getallen - Deel 5

  4. hoe hernoem je een schema in MySQL