Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

MySQL: Thực hiện LEFT JOIN hai bảng

LEFT JOIN trả về tất cả bản ghi từ bảng bên trái (left table) và bản ghi khớp từ bảng bên phải. Nếu không khớp, cột bảng phải trả về NULL.

Ví dụ hoàn chỉnh

1. Tạo bảng cha (ParentTable)

mysql> CREATE TABLE BangCha (
    -> UniqueId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> TenNhanVien VARCHAR(10)
    -> );
mysql> INSERT INTO BangCha(TenNhanVien) VALUES ('John'), ('Carol'), ('Sam'), ('Bob');

2. Tạo bảng con (ChildTable) với Foreign Key

mysql> CREATE TABLE BangCon (
    -> UniqueId INT NOT NULL PRIMARY KEY,
    -> DiaChiNhanVien VARCHAR(100),
    -> CONSTRAINT fk_uniqueId FOREIGN KEY(UniqueId) REFERENCES BangCha(UniqueId)
    -> );
mysql> INSERT INTO BangCon VALUES 
    -> (1, '15 West Shady Lane Starkville, MS 39759'),
    -> (2, '72 West Rock Creek St. Oxford, MS 38655'),
    -> (3, NULL),
    -> (4, '119 North Sierra St. Marysville, OH 43040');

3. LEFT JOIN

mysql> SELECT 
    ->   BangCha.UniqueId, 
    ->   BangCha.TenNhanVien, 
    ->   BangCon.DiaChiNhanVien 
    -> FROM BangCha 
    -> LEFT JOIN BangCon ON BangCha.UniqueId = BangCon.UniqueId;

Kết quả:

+----------+--------------+-------------------------------------------+
| UniqueId | TenNhanVien  | DiaChiNhanVien                            |
+----------+--------------+-------------------------------------------+
| 1        | John         | 15 West Shady Lane Starkville, MS 39759   |
| 2        | Carol        | 72 West Rock Creek St. Oxford, MS 38655   |
| 3        | Sam          | NULL                                      |
| 4        | Bob          | 119 North Sierra St. Marysville, OH 43040 |
+----------+--------------+-------------------------------------------+

Giải thích: Bản ghi UniqueId = 3 (Sam) có trong bảng cha nhưng không có địa chỉ trong bảng con → cột DiaChiNhanVien trả về NULL.

So sánh JOIN types

  • INNER JOIN: Chỉ bản ghi khớp hai bên
  • LEFT JOIN: Tất cả bảng trái + khớp bảng phải
  • RIGHT JOIN: Tất cả bảng phải + khớp bảng trái