Back to photostream

SQL – Cách sử dụng JOIN để liên kết dữ liệu (phần 3)

 

Ở 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.

 

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.

 

Nguồn: codegym.vn/blog/2023/11/20/cach-su-dung-join-de-lien-ket-...

29 views
0 faves
0 comments
Uploaded on November 20, 2023