Vấn đề:
Bạn muốn kết hợp dữ liệu từ nhiều hơn hai bảng chỉ bằng một câu lệnh SELECT.
Ví dụ:
Có bốn bảng trong cơ sở dữ liệu của chúng tôi:student , teacher , subject và learning .
student bảng chứa dữ liệu trong các cột sau:id , first_name và last_name .
| id | first_name | last_name |
|---|---|---|
| 1 | Tom | Miller |
| 2 | John | Mùa xuân |
| 3 | Lisa | Williams |
| 4 | Ellie | Barker |
| 5 | James | Moore |
teacher bảng chứa dữ liệu trong các cột sau:id , first_name , last_name và subject .
| id | first_name | last_name |
|---|---|---|
| 1 | Milan | Smith |
| 2 | Charles | Davis |
| 3 | Đánh dấu | Moore |
subject bảng chứa dữ liệu trong các cột sau:id và name .
| id | tên |
|---|---|
| 1 | Tiếng Anh |
| 2 | Nghệ thuật |
| 3 | Âm nhạc |
Cuối cùng, learning bảng chứa dữ liệu trong các cột sau:id , mark , subject_id , student_id và teacher_id .
| id | dấusubject_id | student_id | teacher_id | |
|---|---|---|---|---|
| 1 | 4 | 1 | 2 | 1 |
| 2 | 5 | 2 | 3 | 2 |
| 3 | 4 | 3 | 1 | 3 |
| 4 | 3 | 2 | 1 | 2 |
| 5 | 2 | 3 | 5 | 3 |
| 6 | 3 | 3 | 4 | 2 |
Chúng tôi muốn biết học sinh nào đang học tiếng Anh, âm nhạc và nghệ thuật, cũng như giáo viên nào đang hướng dẫn các lớp này. Chọn chủ đề khóa học, họ của học sinh tham gia khóa học đó và họ của giáo viên giảng dạy khóa học đó.
Giải pháp:
Sử dụng nhiều JOIN s trong truy vấn của bạn:
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
Truy vấn này trả về các bản ghi có tên môn học và họ của học sinh và giáo viên:
| subject_name | s_last_name | t_last_name |
|---|---|---|
| Âm nhạc | Moore | Miller |
| Nghệ thuật | Davis | Miller |
| Tiếng Anh | Smith | Mùa xuân |
| Nghệ thuật | Davis | Williams |
| Âm nhạc | Davis | Barker |
| Âm nhạc | Moore | Moore |
Dữ liệu này đến từ ba bảng, vì vậy chúng tôi phải kết hợp tất cả các bảng đó lại để có được thông tin chúng tôi tìm kiếm.
Thảo luận:
Nếu bạn muốn kết hợp dữ liệu được lưu trữ trong nhiều (hơn hai) bảng, bạn nên sử dụng JOIN toán tử nhiều lần. Đầu tiên, bạn tham gia hai bảng như bình thường (sử dụng JOIN , LEFT JOIN , RIGHT JOIN hoặc FULL JOIN , nếu thích hợp). JOIN hoạt động tạo ra một "bảng ảo" để lưu trữ dữ liệu kết hợp từ hai bảng. Trong ví dụ của chúng tôi, bảng kết quả là sự kết hợp của learning và subject bảng.
Bước tiếp theo là nối bảng kết quả này với bảng thứ ba (trong ví dụ của chúng tôi là student ). Đây giống như một JOIN thông thường :bạn tham gia "bảng ảo" và bảng thứ ba với một điều kiện thích hợp. Điều kiện này thường phải bao gồm một hoặc nhiều cột từ bảng bổ sung (student ) và một hoặc nhiều cột từ "bảng ảo". Trong ví dụ của chúng tôi, chúng tôi tham chiếu đến student trong điều kiện JOIN thứ hai.
Tại thời điểm này, chúng ta có một bảng ảo mới với dữ liệu từ ba bảng. Bước cuối cùng là thêm dữ liệu từ bảng thứ tư (trong ví dụ của chúng tôi là teacher ). và tham gia bằng cách sử dụng khóa từ các bảng này (trong ví dụ của chúng tôi là id từ teacher bảng và teacher_id từ learning bảng).
Nếu bạn phải tham gia một bảng khác, bạn có thể sử dụng JOIN khác toán tử với một điều kiện thích hợp trong mệnh đề ON. Về lý thuyết, bạn có thể tham gia bao nhiêu bàn tùy thích.