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

Kết hợp hai bảng trong MySQL (JOIN)

Để join hai bảng trong MySQL, thường sử dụng LEFT JOIN với ràng buộc khóa ngoại (foreign key).

Ví dụ minh họa

Tạo bảng cha (ParentTable)

mysql> CREATE TABLE ParentTable (
    -> UniqueId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> EmployeeName VARCHAR(10)
    -> );

Chèn dữ liệu:

mysql> INSERT INTO ParentTable(EmployeeName) VALUES('John');
mysql> INSERT INTO ParentTable(EmployeeName) VALUES('Carol');
mysql> INSERT INTO ParentTable(EmployeeName) VALUES('Sam');
mysql> INSERT INTO ParentTable(EmployeeName) VALUES('Bob');

Tạo bảng con (ChildTable) với khóa ngoại

mysql> CREATE TABLE ChildTable (
    -> UniqueId INT NOT NULL PRIMARY KEY,
    -> EmployeeAddress VARCHAR(100),
    -> CONSTRAINT fk_uniqueId FOREIGN KEY(UniqueId) REFERENCES ParentTable(UniqueId)
    -> );

Chèn dữ liệu:

mysql> INSERT INTO ChildTable VALUES(1, '15 West Shady Lane Starkville, MS 39759');
mysql> INSERT INTO ChildTable VALUES(2, '72 West Rock Creek St. Oxford, MS 38655');
mysql> INSERT INTO ChildTable(UniqueId) VALUES(3);
mysql> INSERT INTO ChildTable VALUES(4, '119 North Sierra St. Marysville, OH 43040');

Thực hiện LEFT JOIN

mysql> SELECT ParentTable.UniqueId, ParentTable.EmployeeName, ChildTable.EmployeeAddress
    -> FROM ParentTable
    -> LEFT JOIN ChildTable ON ParentTable.UniqueId = ChildTable.UniqueId;

Kết quả:

+----------+--------------+-------------------------------------------+
| UniqueId | EmployeeName | EmployeeAddress                           |
+----------+--------------+-------------------------------------------+
|        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 |
+----------+--------------+-------------------------------------------+

LEFT JOIN giữ lại tất cả bản ghi từ bảng bên trái (ParentTable) và khớp với bảng bên phải. Nếu không khớp, cột bảng bên phải sẽ là NULL.