Cập nhật thông tin chi tiết về Các Kiểu Của Lệnh Join Trong Mysql: Inner, Outer, Left, Right, Cross mới nhất trên website Sansangdethanhcong.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.
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.
Các loại 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:
SELECT * FROM `movies` CROSS JOIN `members`Chúng ta được kết quả như sau.
INNER JOIN
Inner 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ư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` `
Outer Join
Outer Join 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.
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 Left Join để thực hiện
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 đó
Right Join
Right Join trái ngược với Left Join. Right 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ạy script trên cho 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” để 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.
Tóm lược
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
Đánh giá bài viết này
Sự Khác Biệt Giữa Inner Join Và Left Semi Join
Giả sử có 2 bảng TableA và TableB chỉ có 2 cột (Id, Data) và dữ liệu sau:
Tham gia bên trong trên cột Id sẽ trả về các cột từ cả hai bảng và chỉ các bản ghi phù hợp:
Kết nối Trái (hoặc Kết nối bên ngoài bên trái) trên cột Id sẽ trả về các cột từ cả bảng và các bản ghi khớp với bản ghi từ bảng bên trái (Giá trị rỗng từ bảng bên phải):
Tham gia bên phải (hoặc tham gia bên ngoài bên phải) trên cột Id sẽ trả về các cột từ cả bảng và các bản ghi khớp với bản ghi từ bảng bên phải (Giá trị rỗng từ bảng bên trái):
┌────┬─────────┬────┬─────────┐ │ Id │ Data │ Id │ Data │ ├────┼─────────┼────┼─────────┤ │ 1 │ DataA11 │ 1 │ DataB11 │ │ 1 │ DataA12 │ 1 │ DataB11 │ │ 1 │ DataA13 │ 1 │ DataB11 │ │ 2 │ DataA21 │ 2 │ DataB21 │ │ 2 │ DataA21 │ 2 │ DataB22 │ │ 2 │ DataA21 │ 2 │ DataB23 │ │ │ │ 4 │ DataB41 │ └────┴─────────┴────┴─────────┘Full Outer Join trên cột Id sẽ trả về các cột từ cả bảng và khớp các bản ghi với các bản ghi từ bảng bên trái (Giá trị rỗng từ bảng bên phải) và các bản ghi từ bảng bên phải (Giá trị rỗng từ bảng bên trái):
╔════╦═════════╦════╦═════════╗ ║ Id ║ Data ║ Id ║ Data ║ ╠════╬═════════╬════╬═════════╣ ║ - ║ ║ ║ ║ ║ 1 ║ DataA11 ║ 1 ║ DataB11 ║ ║ 1 ║ DataA12 ║ 1 ║ DataB11 ║ ║ 1 ║ DataA13 ║ 1 ║ DataB11 ║ ║ 2 ║ DataA21 ║ 2 ║ DataB21 ║ ║ 2 ║ DataA21 ║ 2 ║ DataB22 ║ ║ 2 ║ DataA21 ║ 2 ║ DataB23 ║ ║ 3 ║ DataA31 ║ ║ ║ ║ ║ ║ 4 ║ DataB41 ║ ╚════╩═════════╩════╩═════════╝Left Semi Join trên cột Id sẽ chỉ trả về các cột từ bảng bên trái và chỉ khớp các bản ghi từ bảng bên trái:
┌────┬─────────┐ │ Id │ Data │ ├────┼─────────┤ │ 1 │ DataA11 │ │ 1 │ DataA12 │ │ 1 │ DataA13 │ │ 2 │ DataA21 │ └────┴─────────┘Phân Biệt Và Cách Sử Dụng Các Loại Join Trong Mssql Server
Khi bạn cần truy vấn các cột dữ liệu từ nhiều bảng khác nhau để trả về trong cùng một tập kết quả thì JOIN là phép kết nối dữ liệu từ nhiều bảng lại với nhau ( bao gồm cả các view, sub query).
SQL Server cung cấp các kiểu JOIN là INNER JOIN, OUTER JOIN, và CROSS JOIN.
1. INNER JOIN (viết tắt: JOIN)
Kết quả từ Inner join trong SQL là tập hợp dữ liệu trong đó giá trị dùng để join hai table với nhau đều có ở cả hai bảng, nghĩa là kết quả là GIAO của hai tập hợp dữ liệu.Các bản ghi chỉ xuất hiện ở một trong hai bảng sẽ bị loại.
SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A INNER JOIN HOC_VIEN B ON chúng tôi = B.MaHV -- Hoặc có thể viết tắt -- SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A JOIN HOC_VIEN B ON chúng tôi = B.MaHV2. OUTER JOIN trong SQL Server
Lấy về các bản ghi có mặt trong cả hai bảng và cả các bản ghi chỉ xuất hiện ở một trong hai bảng. Kiểu JOIN này được chia làm mấy loại sau:
2.1. LEFT OUTER JOIN (viết tắt: LEFT JOIN)
Lấy toàn bộ các dòng dữ liệu ở table bên trái và với những dòng dữ liệu tương ứng ở bảng bên phải CÓ giá trị MaHV ở bảng bên trái, nếu không có dữ liệu tương ứng bảng bên phải sẽ trả về kết quả null
SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A LEFT OUTER JOIN HOC_VIEN B ON chúng tôi = B.MaHV -- Hoặc có thể viết tắt -- SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A LEFT JOIN HOC_VIEN B ON chúng tôi = B.MaHV2.2. RIGHT OUTER JOIN (viết tắt: RIGHT JOIN)
Ngược lại so với LEFT JOIN, lấy toàn bộ các dòng dữ liệu ở table bên phải và với những dòng dữ liệu tương ứng ở bảng bên trái CÓ giá trị MaHV ở bảng bên phải, nếu không có dữ liệu tương ứng bảng bên trái sẽ trả về kết quả null
SELECT A.MonHoc,A.MaHV,B.MaHV MaHV2,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A RIGHT OUTER JOIN HOC_VIEN B ON chúng tôi = B.MaHV -- Hoặc có thể viết tắt -- SELECT A.MonHoc,A.MaHV,B.MaHV MaHV2,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A RIGHT JOIN HOC_VIEN B ON chúng tôi = B.MaHV2.3. FULL OUTER JOIN (viết tắt: FULL JOIN)
Kết quả gồm tất cả các bản ghi của cả hai bảng. Với các bản ghi chỉ xuất hiện trong một bảng thì các cột dữ liệu từ bảng kia được điền giá trị NULL.
SELECT A.MonHoc,A.MaHV,B.MaHV MaHV2,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A FULL OUTER JOIN HOC_VIEN B ON chúng tôi = B.MaHV -- Hoặc có thể viết tắt -- SELECT A.MonHoc,A.MaHV,B.MaHV MaHV2,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A FULL JOIN HOC_VIEN B ON chúng tôi = B.MaHV3. CROSS JOIN
CROSS JOIN trong SQL ít được sử dụng hơn so với các loại JOIN ở trên do tính ít ý nghĩa của nó, kết quả trả về của CROSS JOIN là lấy số dòng của bảng bên trái x số dòng của bảng bên phải. Ví dụ bảng DIEM_THI có 12 dòng, bảng HOC_VIEN có 12 dòng, kết quả trả về là 12×12 = 144 dòng. Dữ liệu được nhân lên do cứ tương ứng với 1 dòng trong DIEM_THI thì sẽ nối với toàn bộ 12 dòng trong HOC_VIEN mà không cần quan tâm đến tiêu chí so sánh nào (không có mệnh đề ON t1.ColumnA = t2.ColumnB như các kiểu JOIN khác).
Câu lệnh truy vấn như sau:
SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A CROSS JOIN HOC_VIEN BHướng Dẫn Cách Phân Biệt Lệnh Vlookup Và Lệnh Hlookup Trong Excel
Định nghĩa hàm LOOKUP
Lookup dịch ra tiếng Việt nghĩa là tìm kiếm. Hàm Lookup trong trường hợp này có thể hiểu đơn giản sẽ giúp bạn tìm kiếm giá trị, sau đó quy đổi trả về một giá trị khác mà bạn thiết lập.
Khi nào nên sử dụng hàm HLOOKUP?
Vậy hàm HLOOKUP có nghĩa là gì? “H” là tên viết tắt của từ “Horizontal” ( Nghĩa là theo hàng ngang). Từ đây có thể suy ra, hàm Hlookup dùng khi bảng tham chiếu cho dưới dạng bảng ngang.
Công thức: =HLOOKUP(Giá trị, Bảng tham chiếu, Số thứ cột cho kết quả, cách dò tìm).
Khi nào nên sử dụng hàm VLOOKUP?
Còn hàm VLOOKUP có nghĩa là gì? Tương tự như hàm Hlookup, “V” là tên viết tắt của từ “Vertical” ( nghĩa là theo hàng dọc). Từ đây có thể suy ra, hàm Vlookup dùng khi bảng tham chiếu cho dưới dạng bảng dọc.
Công thức: =VLOOKUP(Giá trị, Bảng tham chiếu, Số thứ cột cho kết quả, cách dò tìm).
Phân biệt hàm HLOOKUP và VLOOKUP qua các ví dụ
Ví dụ 1: Sử dụng hàm HLOOKUP
Yêu cầu đề bài
Dựa vào MÃ HÀNG và dò tìm trong BẢNG THAM CHIẾU, điền TÊN HÀNG tương ứng.
Phân tích:
Điền cột TÊN HÀNG
– Ở đây, ta thấy BẢNG THAM CHIẾU ở dạng cột (bảng phân theo các cột gồm cột MÃ HÀNG, cột TÊN HÀNG, cột ĐƠN GIÁ) nên ta sẽ sử dụng hàm VLOOKUP.
– Giá trị (từ ô B5:B10) dùng để dò tìm đối với cột đầu tiên của BẢNG THAM CHIẾU giống nhau nên giữ nguyên.
– Quy ước: Cột TÊN HÀNG là cột 2 trong BẢNG THAM CHIẾU, tương tự cột tiếp theo ĐƠN GIÁ là cột 3.
– Cột đầu tiên của BẢNG THAM CHIẾU tăng dần (A, B, C).
– BẢNG THAM CHIẾU B14:D16 là giá trị cố định, không xê dịch nên sau khi nhập xong giá trị này, ta nhấn thêm nút F4 hoặc Fn + F4 để khóa giá trị này lại, khi copy công thức xuống các ô bên dưới sẽ không bị sai lệch.
Gợi ý cách làm:
Công thức TÊN HÀNG (C5) = VLOOKUP(B5,$B$14:$D$16,2,1)
Ví dụ 2: Sử dụng hàm VLOOKUP
Yêu cầu đề bài
Dựa vào MÃ HÀNG và BẢNG THAM CHIẾU 1, điền TÊN HÀNG.
Phân tích:
Điền cột TÊN HÀNG
– Ở đây, ta thấy BẢNG THAM CHIẾU 1 ở dạng hàng ngang (bảng phân theo các hàng gồm hàng MÃ HÀNG, hàng TÊN HÀNG, hàng ĐƠN GIÁ) nên ta sẽ sử dụng hàm HLOOKUP.
– Quy ước: Hàng TÊN HÀNG là hàng 2 trong BẢNG THAM CHIẾU, tương tự hàng tiếp theo ĐƠN GIÁ là hàng 3.
– Hàng đầu tiên của BẢNG THAM CHIẾU tăng dần (A, B, C).
– BẢNG THAM CHIẾU D13:F15 là giá trị cố định, không xê dịch nên sau khi nhập xong giá trị này, ta nhấn thêm nút F4 hoặc Fn + F4 để khóa giá trị này lại, khi copy công thức xuống các ô bên dưới sẽ không bị sai lệch.
Gợi ý cách làm:
TÊN HÀNG (C5) = HLOOKUP(LEFT(B5,1),$D$13:$F$15,2,1)
Đánh giá bài viết này
Bạn đang xem bài viết Các Kiểu Của Lệnh Join Trong Mysql: Inner, Outer, Left, Right, Cross trên website Sansangdethanhcong.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!