sql >> Databasteknik >  >> RDS >> Mysql

När ska man använda LEFT JOIN och när ska man använda INNER JOIN?

Finns det någon hake? Ja, det finns -- vänsterförband är en form av yttre sammanfogning, medan inre sammanfogningar är en form av, ja, inre sammanfogningar.

Här är exempel som visar skillnaden. Vi börjar med basdata:

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

Och här ser vi skillnaden mellan en inre koppling och en vänster koppling:

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 rader.

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

Wow, 5 rader! Vad hände?

Yttre kopplingar såsom left join bevara rader som inte matchar -- så rader med id 2 och 5 bevaras av den vänstra kopplingsfrågan. De återstående kolumnerna fylls i med NULL.

Med andra ord, vänster och inre sammanfogningar är inte utbytbara.



  1. SQL Server trunkerar tyst varchars i lagrade procedurer

  2. MySQL-prestanda:Hur man utnyttjar MySQL-databasindexering

  3. PostgreSQL:Varning:Konsolens teckentabell (437) skiljer sig från Windows teckentabell (1252)

  4. Django modellerar en främmande nyckel till många tabeller