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

Nội dung được viết bởi G-LEARNING

 

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

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

Xem thêm: Hướng dẫn tìm hiểu về NULL và NOT NULL trong MySQL

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ói cách 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:

Hướng dẫn tham gia MySQL: INNER, OUTER, LEFT, RIGHT, CROSS

 SELECT * FROM `movies` CROSS JOIN `members`

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

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

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.

Hướng dẫn tham gia MySQL: INNER, OUTER, LEFT, RIGHT, CROSS

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

Xem thêm: Hướng dẫn cách phân biệt SQL Và MySQL

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

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

Lưu ý kết quả trên cũng có thể được viết như sau để đạt được kết quả tương tự.

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

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ó cho giá trị NULL 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

Hướng dẫn tham gia MySQL: INNER, OUTER, LEFT, RIGHT, CROSS

Left Join cho kết quả 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ạy đoạn mã, bạn có thể thấy rằng trong kết quả trả về được liệt kê bên dưới đối với phim không được thuê các trường tên thành viên đang có giá trị NULL. Điều đó có nghĩa là không có thành viên thuê bộ phim đó

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

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

Hướng dẫn tham gia MySQL: INNER, OUTER, LEFT, RIGHT, CROSS

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

Xem thêm: Tìm hiểu về mệnh đề GROUP BY và HAVING trong MySQL

Chạy script trên cho kết quả như sau.

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

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” để có tên “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 thực hiện cùng một tác vụ chạy truy vấn rồi chứ. Đặc biệt nếu bạn có một số kinh nghiệm về lập trình cơ sở dữ liệu, bạn có thể chạy từng truy vấn một, sử dụng kết quả của từng truy vấn liên tiếp. Nhưng bằng cách sử dụng “Join”, bạn có thể hoàn thành công việc bằng cách chỉ sử dụng một truy vấn với bất kỳ tham số tìm kiếm nào. Mặt khác, MySQL có thể đạt được hiệu năng tốt hơn. Chỉ cần sử dụng truy vấn duy nhất thay vì chạy nhiều truy vấn điều đó giúp chúng ta sẽ giảm được chi phí . Thay vào đó, sử dụng nhiều truy vấn sẽ dẫn đến việc chuyển nhiều dữ liệu hơn giữa MySQL và các ứng dụng (phần mềm). Hơn nữa, nó đòi hỏi 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

  • Lệnh Join cho phép chúng tôi kết hợp dữ liệu từ nhiều hơn một bảng vào một tập kết quả.
  • “Join” có hiệu suất tốt hơn so với các truy vấn con
  • Inner Join chỉ trả về các hàng đáp ứng các tiêu chí nhất định.
  • Outer Join có thể trả về các hàng nơi không tìm thấy kết quả khớp. Các hàng ko có được trả về với kết quả là NULL.
  • Các kiểu của lệnh Join bao gồm  Inner, Left, Outer, Right Outer, Cross JOin
  • Mệnh đề thường được sử dụng trong các hoạt động của lệnh Join là “On” và mệnh đề “Using” yêu cầu các cột khớp phải cùng tên.
  • “Join” cũng có thể được sử dụng trong các mệnh đề khác, chẳng hạn như GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS 

Tổng kết

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!

0/5 - (0 bình chọn)

0/5 - (0 bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông