INNER JOIN trong SQL Server
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề INNER JOIN
trong SQL Server để truy vấn dữ liệu từ nhiều bảng.
Giới thiệu về INNER JOIN trongSQL Server
INNER JOIN
là một trong những loại join được sử dụng phổ biến nhất trong SQL Server. Mệnh đề INNER JOIN
cho phép bạn truy vấn dữ liệu từ hai hoặc nhiều bảng liên quan.
Xem các bảng products
và bảng categories
sau:
Câu lệnh sau lấy thông tin sản phẩm từ bảng production.products
:
SELECT
product_name,
list_price,
category_id
FROM
production.products
ORDER BY
product_name DESC;
Đây là kết quả:
Truy vấn chỉ trả về một danh sách các id của loại sản phẩm, không phải tên loại sản phẩm. Để bao gồm tên danh mục trong tập kết quả, bạn sử dụng mệnh đề INNER JOIN
như sau:
SELECT
product_name,
category_name,
list_price
FROM
production.products p
INNER JOIN production.categories c
ON c.category_id = p.category_id
ORDER BY
product_name DESC;
Đây là kết quả:
Trong truy vấn này:
c
và p
là các bí danh bảng của bảng production.categories
và production.products
. Bằng cách này, khi bạn tham chiếu một cột trong các bảng này, bạn có thể sử dụng alias.column_name
thay vì sử dụng table_name.column_name
.
Ví dụ: truy vấn sử dụng c.category_id
thay vì production.categories.category_id
. Do đó, nó giúp bạn tiết kiệm thời gian và truy vấn dễ đọc hơn.
Đối với mỗi bản ghi trong bảng production.products
, mệnh đề INNER JOIN
khớp với mọi bản ghi trong bảng product.categories
dựa trên các giá trị của cột category_id
:
- Nếu cả hai bản ghi có cùng một giá trị trong cột
category_id
, mệnh đềINNER JOIN
tạo thành một bản ghi mới có các cột từ các bản ghi của bảngproduction.categories
và bảngproduction.products
theo các cột trong danh sách kết quả và thêm bản ghi mới này trong tập kết quả. - Nếu bản ghi trong bảng
production.products
không khớp với bản ghi từ bảngproduction.categories
, mệnh đềINNER JOIN
sẽ bỏ qua các bản ghi này và không thêm chúng trong tập kết quả.
Cú pháp INNER JOIN trong SQL Server
Sau đây minh họa cú pháp của mệnh đề INNER JOIN
trong SQL Server :
SELECT
c.id candidate_id,
c.fullname candidate_name,
e.id employee_id,
e.fullname employee_name
FROM
hr.candidates c
INNER JOIN hr.employees e
ON e.fullname = c.fullname;
Trong cú pháp này, truy vấn lấy dữ liệu từ cả hai bảng T1 và T2:
- Đầu tiên, chỉ định bảng chính (T1) trong mệnh đề
FROM
. - Tiếp theo, chỉ định bảng thứ hai (T2) trong mệnh đề
INNER JOIN
và một biểu thức join. Chỉ các bản ghi có biểu thức join được đánh giá làTRUE
mới được đưa vào tập kết quả.
Mệnh đề INNER JOIN
so sánh mỗi bản ghi của bảng T1 với bản ghi của bảng T2 để tìm tất cả các cặp bản ghi đáp ứng biểu thức join.
Nếu biểu thức join được đánh giá là TRUE
, giá trị các cột của các bản ghi khớp trong bảng T1 và T2 được kết hợp thành một bản ghi mới và được bao gồm trong tập kết quả.
Bảng dưới đây minh họa sự kết hợp bên trong của hai bảng T1 (1,2,3) và T2 (A, B, C). Kết quả bao gồm các bản ghi: (2, A) và (3, B) vì chúng có cùng mẫu.
Lưu ý: từ khóa
INNER
là tùy chọn, bạn có thể bỏ qua nó như được trình bày trong truy vấn dưới đây.
SELECT
select_list
FROM
T1 JOIN T2 ON join_predicate;
Ví dụ INNER JOIN trong SQL Server
Xem các bảng products
, categories
và brands
sau đây:
Câu lệnh sau sử dụng hai mệnh đề INNER JOIN
để truy vấn dữ liệu từ ba bảng:
SELECT
product_name,
category_name,
brand_name,
list_price
FROM
production.products p
INNER JOIN production.categories c ON c.category_id = p.category_id
INNER JOIN production.brands b ON b.brand_id = p.brand_id
ORDER BY
product_name DESC;
Đây là kết quả:
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề INNER JOIN
trong SQL Server để truy vấn dữ liệu từ nhiều bảng.