Bài tập

HƯỚNG DẪN CÁC KIỂU CỦA LỆNH JOIN TRONG MySQL: INNER, OUTER, LEFT, RIGHT, CROSS

Huy Erick

Lệnh Join (Tham gia) là gì? Lệnh join giúp lấy dữ liệu từ hai hoặc nhiều bảng cơ sở dữ liệu. Các bảng có liên kết với nhau bằng cách sử dụng khóa chính và...

Lệnh Join (Tham gia) là gì?

Lệnh join giúp lấy dữ liệu từ hai hoặc nhiều bảng cơ sở dữ liệu. Các bảng có liên kết với nhau bằng cách sử dụng khóa chính và khóa ngoại.

Lưu ý: Lệnh Join rất phức tạp khi sử dụng. Để đơn giản và dễ hiểu, chúng ta sẽ sử dụng Cơ sở dữ liệu mới để thực hành mẫu như hình dưới đây.

Các loại lệnh Join

Lệnh Join tham Gia Chéo (Cross Join)

Tham Gia Chéo là một hình thức Tham Gia đơn giản nhất, nó khớp với từng hàng từ một bảng cơ sở dữ liệu với tất cả các hàng khác.

Nó cung cấp cho chúng ta sự kết hợp của từng hàng của bảng đầu tiên với tất cả các bản ghi trong bảng thứ hai.

Giả sử chúng ta muốn có tất cả các hồ sơ thành viên đối với tất cả các bộ phim, chúng ta có thể làm như sau:

SELECT * FROM `movies` CROSS JOIN `members`

Chúng ta được kết quả như sau:

Lệnh Join: INNER JOIN

Inner Join là một lệnh Join được sử dụng để kết hợp các hàng từ cả hai bảng thỏa mãn điều kiện đã cho.

Giả sử, bạn muốn có được danh sách các thành viên đã thuê phim cùng với các tựa phim được họ thuê. Bạn chỉ có thể sử dụng Inner Join để thực hiện điều đó, kết quả từ cả hai bảng thỏa mãn với các điều kiện đã cho.

SELECT members.`first_name` , members.`last_name` , movies.`title` FROM members ,movies WHERE movies.`id` = members.`movie_id`

Chúng ta được kết quả như sau:

Lệnh Join: Outer Join

Outer Join là lệnh Join sử dụng cho tất cả kết quả các bản ghi khớp từ cả hai bảng.

Nó có thể phát hiện các bản ghi không có kết quả khớp trong bảng đã tham gia. Nó cung cấp giá trị NULL cho các bản ghi của bảng đã tham gia nếu không tìm thấy kết quả khớp.

Lệnh Join: Left Join

Giả sử bây giờ bạn muốn có được tiêu đề của tất cả các bộ phim cùng với tên của các thành viên đã thuê chúng. Chúng ta có thể sử dụng lệnh Join này để thực hiện.

Left Join trả về tất cả các hàng từ bảng bên trái ngay cả khi không tìm thấy hàng phù hợp trong bảng bên phải. Trường hợp không tìm thấy kết quả phù hợp trong bảng bên phải, kết quả sẽ là Null.

SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B ON B.`movie_id` = A.`id`

Chúng ta có thể thấy rằng trong kết quả trả về, các bộ phim không được thuê sẽ có giá trị NULL trong trường tên thành viên.

Lệnh Join: Right Join

Right Join trái ngược với Left Join. Right Join là lệnh Join cho tất cả kết quả các cột từ bảng bên phải ngay cả khi không tìm thấy hàng phù hợp trong bảng bên trái. Trường hợp không tìm thấy kết quả phù hợp trong bảng bên trái, kết quả là Null.

Ví dụ của chúng ta, giả sử rằng bạn cần lấy tên của các thành viên và phim do họ thuê. Bây giờ chúng ta có một vài thành viên mới chưa thuê bất kỳ bộ phim nào.

SELECT A.`first_name` , A.`last_name`, B.`title` FROM `members` AS A RIGHT JOIN `movies` AS B ON B.`id` = A.`movie_id`

Chúng ta có kết quả như sau:

Mệnh đề “On” và “Using”

Trong các ví dụ kết quả truy vấn với lệnh join ở trên, chúng ta đã sử dụng mệnh đề “ON” để khớp với các bản ghi giữa bảng.

Mệnh đề “Using” cũng có thể được sử dụng cho cùng một mục đích. Sự khác biệt là nó cần phải có tên giống hệt nhau giữa các cột trong cả hai bảng.

Trong bảng “movie” cho đến nay, chúng tôi đã sử dụng khóa chính của nó với tên “id”. Chúng tôi đã đề cập đến cùng trong bảng “members” với tên “movie_id”.

Hãy đổi tên trường “movie” kết hợp với “id” thành “movie_id”. Chúng ta làm như sau.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

Tiếp theo, hãy sử dụng Using với ví dụ Left Join ở trên.

SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B USING ( `movie_id` )

Ngoài việc sử dụng “On” và”Using” để kết hợp với Join, bạn có thể sử dụng nhiều mệnh đề MySQL khác như GROUP BY, WHERE và thậm chí các chức năng như SUM, AVG, v.v.

Tại sao chúng ta nên sử dụng lệnh Join?

Bạn có thể hiểu tại sao chúng ta sử dụng “Join” khi chúng ta có thể chạy truy vấn riêng lẻ. Nhưng bằng cách sử dụng “Join”, bạn có thể hoàn thành công việc bằng một truy vấn duy nhất với bất kỳ tham số tìm kiếm nào. Điều này giúp giảm chi phí và tăng hiệu suất ứng dụng và MySQL. Ngoài ra, sử dụng nhiều truy vấn dẫn đến việc chuyển dữ liệu nhiều hơn giữa MySQL và ứng dụng và yêu cầu nhiều thao tác dữ liệu hơn trong ứng dụng.

Rõ ràng là chúng ta có thể đạt được hiệu suất ứng dụng và MySQL tốt hơn bằng cách sử dụng Lệnh Join.

Kết luận

Hy vọng rằng, qua bài viết trên, bạn đã có cái nhìn sâu và rõ hơn về lệnh Join và cách sử dụng các kiểu lệnh Join trong MySQL. Để học bài bản về MySQL, hãy đăng ký ngay khóa học MySQL cùng Gitiho nhé!

Tham gia ngay khóa học Data For Future SQL!

Gitiho chúc bạn thành công!

1