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).
VD: Chúng ta có 2 bảng HOC_VIEN (A) và DIEM_THI (B) như dưới đây:
Với 2 bảng dữ liệu trên có liên kết thông qua cột MaHV, vậy làm thế nào chúng ta lấy ra được danh sách điểm thi có các cột môn học, họ tên học viên, mã lớp và điểm số cùng lúc? Khi đó chúng ta cần liên kết hay là JOIN các bảng dữ liệu lại với nhau và chỉ định ra các trường dữ liệu cần lấy.
SQL Server cung ứng các kiểu JOIN là INNER JOIN, OUTER JOIN, và CROSS JOIN .
Tóm Tắt
1. INNER JOIN ( viết tắt : JOIN )
Kết quả từ Inner join trong SQL là tập hợp tài liệu trong đó giá trị dùng để join hai table với nhau đều có ở cả hai bảng, nghĩa là hiệu quả là GIAO của hai tập hợp tài liệu. Các bản ghi chỉ Open ở một trong hai bảng sẽ bị loại .
Câu truy vấn như sau :
SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A INNER JOIN HOC_VIEN B ON A.MaHV = 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 A.MaHV = B.MaHV
Kết quả như tất cả chúng ta thấy với 6 bản ghi trên thì các giá trị MaHV đều có trong cả 2 bảng HOC_VIEN và DIEM_THI
2. OUTER JOIN trong SQL Server
Lấy về các bản ghi xuất hiện trong cả hai bảng và cả các bản ghi chỉ Open ở 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 hàng loạt các dòng tài liệu ở table bên trái và với những dòng tài 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ó tài liệu tương ứng bảng bên phải sẽ trả về tác dụng null
Câu truy vấn như sau :
SELECT A.MonHoc,A.MaHV,B.HoTen,B.MaLop,A.DiemSo FROM DIEM_THI A LEFT OUTER JOIN HOC_VIEN B ON A.MaHV = 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 A.MaHV = B.MaHV
Kết quả như tất cả chúng ta thấy, tổng thể các dòng ở bảng DIEM_THI đã được liệt kê ra, một số ít dòng có cột HoTen và MaLop là null là do nguyên do MaHV có ở bảng DIEM_THI nhưng không có ở bảng HOC_VIEN
2.2. RIGHT OUTER JOIN (viết tắt: RIGHT JOIN)
trái lại so với LEFT JOIN, lấy hàng loạt các dòng tài liệu ở table bên phải và với những dòng tài 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ó tài liệu tương ứng bảng bên trái sẽ trả về tác dụng null
Câu truy vấn như sau :
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 A.MaHV = 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 A.MaHV = B.MaHV
Kết quả như chúng ta thấy tất cả các dòng của bảng HOC_VIEN đã được liệt kê ra, mình thêm cột B.MaHV as MaHV2 ra để các bạn thấy danh sách của nó đầy đủ trong khi cột MaHV, MonHoc,DiemSo là null vì cột MaHV trong bảng DIEM_THI không có trong bảng HOC_VIEN. Các bạn có thể so sánh với bảng kết quả bên trên kia khi select left join nhé.
2.3. FULL OUTER JOIN (viết tắt: FULL JOIN)
Kết quả gồm tổng thể các bản ghi của cả hai bảng. Với các bản ghi chỉ Open trong một bảng thì các cột tài liệu từ bảng kia được điền giá trị NULL .
Câu truy vấn như sau :
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 A.MaHV = 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 A.MaHV = B.MaHV
Nhìn hiệu quả kia thì tất cả chúng ta hoàn toàn có thể thấy tác dụng là gồm có là những dòng hiệu quả của LEFT JOIN và RIGHT JOIN tích hợp với nhau, không gồm có các dòng trùng lặp. Trên kia, những dòng HoTen là null là do MaHV ở bảng DIEM_THI nhưng không có ở bảng HOC_VIEN và những dòng MonHoc, DiemSo là null nguyên do do MaHV có ở bảng HOC_VIEN mà không có ở bảng DIEM_THI .
3. 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 B
KẾT BÀI
Chúng ta đã tìm hiểu và khám phá về các loại JOIN trong SQL Server, chúng được sử dụng tiếp tục trong truy vấn tài liệu và nhiều giải quyết và xử lý khác. Cho nên bạn cần thực hành thực tế cẩn trọng và nắm thật rõ cách sử dụng các loại Join để khi thao tác với SQL Server được thuần thục và hiệu suất cao hơn .
Đánh giá bài viết
Source: https://final-blade.com
Category: Kiến thức Internet