Computer >> Máy Tính >  >> Lập trình >> MySQL

Thực hiện MySQL LEFT JOIN trên hai bảng?

Đầu tiên chúng ta hãy tạo hai bảng và nối chúng với ràng buộc khóa ngoại. Truy vấn để tạo bảng đầu tiên như sau -

mysql> create table ParentTable
   -> (
   -> UniqueId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> EmployeeName varchar(10)
   -> );
Query OK, 0 rows affected (0.56 sec)

Chèn một số bản ghi trong bảng đầu tiên bằng cách sử dụng lệnh chèn. Truy vấn như sau -

mysql> insert into ParentTable(EmployeeName) values('John');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ParentTable(EmployeeName) values('Carol');
Query OK, 1 row affected (0.32 sec)
mysql> insert into ParentTable(EmployeeName) values('Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into ParentTable(EmployeeName) values('Bob');
Query OK, 1 row affected (0.19 sec)

Bây giờ bạn có thể hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from ParentTable;

Sau đây là kết quả -

+----------+--------------+
| UniqueId | EmployeeName |
+----------+--------------+
|        1 | John         |
|        2 | Carol        |
|        3 | Sam          |
|        4 | Bob          |
+----------+--------------+
4 rows in set (0.00 sec)

Truy vấn để tạo bảng thứ hai với các ràng buộc khóa ngoại như sau -

mysql> create table ChildTable
   -> (
   -> UniqueId int NOT NULL PRIMARY KEY,
   -> EmployeeAddress varchar(100),
   -> CONSTRAINT fk_uniqueId FOREIGN KEY(UniqueId) references ParentTable(UniqueId)
   -> );
Query OK, 0 rows affected (0.54 sec)

Bây giờ chèn một số bản ghi trong bảng thứ hai bằng cách sử dụng lệnh chèn. Truy vấn như sau -

mysql> insert into ChildTable values(1,'15 West Shady Lane Starkville, MS 39759');
Query OK, 1 row affected (0.19 sec)
mysql> insert into ChildTable values(2,'72 West Rock Creek St. Oxford, MS 38655');
Query OK, 1 row affected (0.18 sec)
mysql> insert into ChildTable(UniqueId) values(3);
Query OK, 1 row affected (0.41 sec)
mysql> insert into ChildTable values(4,'119 North Sierra St. Marysville, OH 43040');
Query OK, 1 row affected (0.16 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from ChildTable;

Sau đây là kết quả -

+----------+-------------------------------------------+
| UniqueId | EmployeeAddress                           |
+----------+-------------------------------------------+
|        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 |
+----------+-------------------------------------------+
4 rows in set (0.00 sec)

Bây giờ chúng ta hãy tham gia các bảng bằng cách sử dụng phép nối trái. Truy vấn như sau -

mysql> select
ParentTable.UniqueId,ParentTable.EmployeeName,ChildTable.EmployeeAddress from ParentTable left join
   -> ChildTable on ParentTable.UniqueId=ChildTable.UniqueId;

Sau đây là 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 |
+----------+--------------+-------------------------------------------+
4 rows in set (0.00 sec)