Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kiedy używać LEFT JOIN, a kiedy INNER JOIN?

Czy jest jakiś haczyk? Tak, jest -- lewe sprzężenia są formą sprzężenia zewnętrznego, podczas gdy sprzężenia wewnętrzne są formą, cóż, sprzężenia wewnętrznego.

Oto przykłady, które pokazują różnicę. Zaczniemy od danych podstawowych:

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

I tutaj zobaczymy różnicę między sprzężeniem wewnętrznym a sprzężeniem lewym:

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 rzędy.

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 rzędów! Co się stało?

Złącza zewnętrzne, takie jak left join zachowaj wiersze, które nie pasują — tak więc wiersze o identyfikatorach 2 i 5 są zachowywane przez zapytanie ze sprzężeniem lewym. Pozostałe kolumny są wypełnione NULL.

Innymi słowy, sprzężenia lewe i wewnętrzne nie są wymienne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zapełnić bazę danych tylko raz przed metodami @Test w teście wiosennym?

  2. SubSonic 3 i MySQL, usunięcie podkreślenia z nazwy kolumny w metodzie CleanUp() powoduje wyjątki podczas używania właściwości w linq-query

  3. Wskazówki dotyczące migracji z baz danych zastrzeżonych do baz danych typu open source

  4. Jak ustawić hasło roota na null?

  5. Dlaczego nie mogę wyświetlić dwa razy tego samego wyniku za pomocą mysqli_fetch_assoc?