Mysql
 sql >> база данни >  >> RDS >> Mysql

Кога да използваме LEFT JOIN и кога да използваме INNER JOIN?

Има ли уловка? Да, има -- лявото свързване е форма на външно съединение, докато вътрешните съединения са форма на, добре, вътрешно съединение.

Ето примери, които показват разликата. Ще започнем с основните данни:

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

И тук ще видим разликата между вътрешно и ляво присъединяване:

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

Хм, 3 реда.

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

Леле, 5 реда! Какво се случи?

Външни съединения като left join запазване на редове, които не съвпадат - така че редовете с идентификатор 2 и 5 се запазват от заявката за ляво присъединяване. Останалите колони се попълват с NULL.

С други думи, лявото и вътрешното свързване не са взаимозаменяеми.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL и PDO:Може ли PDO::lastInsertId теоретично да се провали?

  2. PHP Най-добрият начин за кеширане на MySQL резултати?

  3. Изтрийте sql редове, където идентификаторите нямат съвпадение от друга таблица

  4. Каква е разликата между utf8_unicode_ci и utf8_unicode_520_ci

  5. MySQL - Използване на If Then Else в MySQL UPDATE или SELECT заявки