Các loại phép nối trong SQL (Join types in SQL)
chuc1803@gmail.com
Phép nối (join) được sử dụng để kết hợp các dòng dữ liệu giữa các bảng.Trong SQL có các loại nối như sau:
- Inner Join (Equi-join, Natural Join )
- Outer Join (Left outer Join, Right outer join, Full outer join)
Để minh họa, ta sử dụng 2 bảng Employees và Departments như sau
Create table Employees(id int identity(1,1) primary key, Ename varchar(50), DeptID int)
Create table Departments(id int identity(1,1) primary key, DeptName varchar(50))
Giả sử dữ liệu trong 2 bảng đã tạo như sau:
1)Inner Join
Inner join chỉ hiển thị những dòng dữ liệu được so khớp (match) ở trong cả 2 bảng
Equi-Join
Equi join là phép nối mà trong đó điều kiện nối chỉ thực thực hiện phép so sánh bằng (=).
2)Outer Join
Outer join trả về tất cả các dòng của cả 2 bảng cho dù các dòng dữ liệu có được so khớp (match) hay không
outer join có 3 loại sau:
1. Left outer join
2. Right outer join
3. Full outer join
a) Left Outer join
Hiển thị tất cả các dòng trong bảng đầu tiên (bên trái phép nối), các dòng trong bảng thứ 2 nếu không so khớp sẽ nhận giá trị null
b) Right outer join
Ngược lại với Left Outer Join
3) Full outer join
Hiển thị tất cả các dòng trong cả 2 bảng cho dù dữ liệu có được so khớp (match) hay không
3) Cross Join
Cross join là phép tích đề các (Cartesian Product) giữa các dòng dữ liệu trong 2 bảng. Kích thước của Cross Join là n*m. Trong đó, n và m là số dòng dữ liệu của 2 bảng.
Chú ý: Cross join có thể viết lại đơn giản như sau
SELECT * FROM Employees, Departments
4) Self Join
Self Join là phép nối 1 bảng với chính nó, Self Join thường được sử dụng khi muốn trích xuất những dòng dữ liệu có mối quan hệ hoặc tương tự với các dòng dữ liệu khác trong cùng một bảng. Vì vậy, ta phải sử dụng các bí danh (alias) khác nhau cho cùng 1 bảng.
Truy vấn sau đây đưa ra các nhân viên có ID trùng với DeptID
Giả sử có bảng hàng hóa (ITEMS) với dữ liệu như sau
Yêu cầu: Giảm giá 2 mặt hàng có giá cao nhất xuống 10%