Ở 2 bài trước chúng ta đã cùng tìm hiểu các lệnh cơ bản trong nhóm DML (INSERT, UPDATE, DELETE và SELECT), với từ khoá dùng chung để làm đa dạng hơn cách xử lý ở câu lệnh truy vấn (IN, EXISTS, LIKE và UNION).
Trong bài hôm nay, chúng ta cùng tìm hiểu các lệnh JOIN, với nhiều kiểu khác nhau. Qua tên gọi thì các bạn cũng đã hiểu phần nào về ý nghĩa các kiểu JOIN này rồi, chúng ta cùng tiếp tục đi chi tiết hơn.
Nội dung
1. Vai trò của câu lệnh JOIN trong SQL
Thường hay được sử dụng với câu lệnh SELECT để giúp liên kết dữ liệu của các table.
[Database] DML 3 (Part 1)
[Database] DML 3 (Part 2)
2. Các loại câu lệnh JOIN trong SQL
Gồm 4 loại cơ bản sau:
- INNER JOIN
- OUTER JOIN
- SELF JOIN
- CROSS JOIN
3. Ý nghĩa và cách sử dụng câu lệnh JOIN trong SQL
3.1. Câu lệnh INNER JOIN
Là một kiểu JOIN để kết hợp các records từ 2 hoặc nhiều table có liên kết với nhau qua khoá ngoại (FOREIGN KEY).
Cú pháp
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name
Ví dụ
SELECT *
FROM doctor d
INNER JOIN account_system a
ON d.doctor_id = a.doctor_id;
Sử dụng câu lệnh trên để lấy ra thông tin các bác sĩ và thông tin tài khoản truy cập vào hệ thống của họ.
3.2. Câu lệnh OUTER JOIN
Cú pháp
SELECT column_name(s)
FROM table1
LEFT/RIGHT/FULL [OUTER] JOIN table2
ON table1.column_name = table2.column_name;
Ví dụ về LEFT JOIN
SELECT *
FROM doctor d
LEFT JOIN account_system a ON d.doctor_id = a.doctor_id;
Với mục đích lấy ra thông tin các bác sĩ và thông tin tài khoản truy cập vào hệ thống của họ. Và bác sĩ nào chưa có tài khoản cũng phải liệt kê ra.
Ví dụ về RIGHT JOIN
SELECT *
FROM doctor d
RIGHT JOIN account_system a ON d.doctor_id = a.doctor_id;
Ngược lại, với việc dùng RIGHT JOIN thì câu lệnh trên sẽ lấy ra các thông tin chung giữa 2 table doctor và account_system, kể cả các tài khoản không có xuất hiện ở table doctor.
Ví dụ về FULL JOIN
Với MySQL, không có hỗ trợ FULL JOIN thì chúng ta thực hiện kết hợp LEFT JOIN và RIGHT JOIN như bên dưới:
SELECT *
FROM doctor d
LEFT JOIN account_system a ON d.doctor_id = a.doctor_id
UNION ALL
SELECT *
FROM doctor d
RIGHT JOIN account_system a ON d.doctor_id = a.doctor_id;
3.3. Câu lệnh SELF JOIN
Là một kiểu JOIN mà table đó tự join với chính nó.
Cú pháp
SELECT column_name(s)
FROM table T1, table T2
WHERE condition;
Ví dụ
SELECT d1.middle_name, d1.last_name, d1.specialization_id,
d2.middle_name, d2.last_name, d2.specialization_id
FROM doctor d1, doctor d2
WHERE d1.specialization_id = d2.specialization_id
AND d1.doctor_id <> d2.doctor_id;
Mục đích câu lệnh truy vấn dùng để liệt kê ra các bác sĩ có cùng chuyên khoa với nhau, bằng cách join table doctor với chính nó và những bác sĩ nào có mã chuyên khoa (specialization_id) giống nhau thì hiển thị ra.
3.4. Câu lệnh CROSS JOIN
Là một kiểu JOIN mà trả về tất cả record ở các table, tức là một record ở table này sẽ join với từng record ở table còn lại mà không dựa trên điều kiện nào cả.
Lưu ý: Kết quả từ CROSS JOIN khả năng sẽ rất lớn.
Cú pháp
SELECT column_name(s)
FROM table1
CROSS JOIN table2;
Ví dụ
SELECT *
FROM doctor
CROSS JOIN account_system;
Câu lệnh trên sẽ lấy toàn bộ record của table doctor với từng record ở table account_system mà không cần bất kỳ điều kiện liên kết nào giữa các record.
Kết luận
Sơ lược lại các loại JOIN chúng ta đã tìm hiểu ở phần kiến thức hôm nay:
Khi bạn muốn lấy ra các record có liên kết giữa các table thì sử dụng INNER JOIN.
Ngoài việc lấy các record có liên kết và kể cả các record không liên kết ở một phía table thì hãy nghĩ đến OUTER JOIN, trong này sẽ có 3 loại: LEFT JOIN, RIGHT JOIN, FULL JOIN.
Còn SELF JOIN thì sử dụng khi cần liên kết các record trong chính table đó.
Cuối cùng là CROSS JOIN, dùng khi không cần bất kỳ điều kiện liên kết nào giữa các record trong các table.
0 Lời bình