Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khi nào sử dụng LEFT JOIN và khi nào sử dụng INNER JOIN?

Có bất kỳ bắt? Có đấy - các phép nối bên trái là một dạng của phép nối bên ngoài, trong khi phép nối bên trong là một dạng phép nối bên trong.

Dưới đây là các ví dụ cho thấy sự khác biệt. Chúng tôi sẽ bắt đầu với dữ liệu cơ sở:

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

Và ở đây chúng ta sẽ thấy sự khác biệt giữa phép nối bên trong và phép nối bên trái:

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

Rất tiếc, 3 hàng.

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

Chà, 5 hàng! Điều gì đã xảy ra?

Các phép nối bên ngoài chẳng hạn như left join giữ nguyên các hàng không khớp - vì vậy các hàng có id 2 và 5 được giữ nguyên bằng truy vấn nối bên trái. Các cột còn lại được điền bằng NULL.

Nói cách khác, các phép nối bên trái và bên trong không thể hoán đổi cho nhau.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. đặt giá trị mới cho ft_min_word_len FULLTEXT trong mysql

  2. PDO + MySQL luôn trả về chuỗi, nhưng MsSQL thì sao?

  3. Bạn có thể truy cập giá trị tăng tự động trong MySQL trong một câu lệnh không?

  4. Quyền truy cập bị từ chối đối với người dùng '[email được bảo vệ]' (sử dụng mật khẩu:KHÔNG)

  5. MySQL thay đổi kiểu xác thực từ tiêu chuẩn thành caching_sha2_password