Trong phần hướng dẫn này, bạn sẽ tìm hiểu về cách sử dụng mệnh đề LEFT JOIN
trong SQL Server để truy vấn dữ liệu từ nhiều bảng
Giới thiệu về mệnh đề LEFT JOIN trong SQL Server
Mệnh đề LEFT JOIN
cho phép bạn truy vấn dữ liệu từ nhiều bảng. Nó trả về tất cả các bản ghi từ bảng bên trái và các bản ghi phù hợp từ bảng bên phải
Nếu không có bản ghi phù hợp được tìm thấy trong bảng bên phải, các cột của bảng bên phải sẽ có giá trị NULL
Sau đây minh họa cách tham gia hai bảng T1 và T2 bằng mệnh đề LEFT JOIN
SELECT
select_list
FROM
T1
LEFT JOIN T2 ON
join_predicate;
Trong cú pháp này, T1 và T2 lần lượt là các bảng bên trái và bên phải
Đối chiếu với mỗi bản ghi từ bảng T1, truy vấn để so sánh nó với tất cả các bản ghi từ bảng T2. Nếu một cặp bản ghi làm cho biểu thức tham gia được đánh giá là
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
0, thì giá trị các cột từ các bản ghi này sẽ được kết hợp để tạo thành một bản ghi mới sau đó được đưa vào kết quả tập tinNếu một bản ghi từ bảng bên trái [T1] không có bất kỳ bản ghi phù hợp nào từ bảng T2, hãy truy vấn kết hợp các giá trị cột của bản ghi từ bảng bên trái với các giá trị
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
1 cho mỗi cột từ bảng bên. Nói lại mệnh đề, mệnh đề LEFT JOIN
trả về tất cả các bản ghi từ bảng bên trái [T1] và các bản ghi khớp từ bảng bên phải [T2] hoặc các giá trị
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
1 nếu không khớpDưới đây minh họa LEFT JOIN
hai bảng T1 [1, 2, 3] và T2 [A, B, C]. Mệnh đề LEFT JOIN
sẽ khớp các bản ghi từ bảng T1 với các bản ghi từ bảng T2 bằng cách sử dụng các mẫu
Ví dụ LEFT JOIN trong SQL Server
Xem các bảng
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
7 và SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
8 sau đâyMỗi chi tiết đơn hàng có một sản phẩm. Liên kết giữa bảng
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
8 và bảng SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
7 là cột SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id IS NULL
ORDER BY
order_id;
1Câu lệnh sau sử dụng mệnh đề LEFT JOIN
để truy vấn dữ liệu từ bảng.
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
7 và SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
8SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
This is results
Như bạn đã biết từ kết quả của tập tin, một danh sách
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
1 trong cột SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id IS NULL
ORDER BY
order_id;
6 biểu thị rằng các sản phẩm tương ứng chưa được bán cho bất kỳ khách hàng nàoCó thể sử dụng mệnh đề
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id IS NULL
ORDER BY
order_id;
7 để giới hạn kết quả của tập tin. Truy vấn sau đây trả về các sản phẩm không xuất hiện trong bất kỳ đơn đặt hàng nào________số 8_______This is results
Như mọi khi, SQL Server xử lý mệnh đề
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id IS NULL
ORDER BY
order_id;
8 sau mệnh đề LEFT JOIN
Ví dụ sau đây để biết cách tham gia ba bảng.
SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
0, SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
1 và SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
2 sử dụng mệnh đề LEFT JOIN
SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
This is results
Điều kiện trong mệnh đề ON với WHERE
Truy vấn sau đây để tìm các sản phẩm thuộc về id đơn hàng là 100
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
WHERE order_id = 100
ORDER BY
order_id;
This is results
Hãy chuyển điều kiện
SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
4 sang mệnh đề SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
5SELECT
p.product_id,
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id AND
o.order_id = 100
ORDER BY
order_id DESC;
This is results
Truy vấn trả về tất cả các sản phẩm nhưng chỉ những sản phẩm của đơn hàng có id 100 mới có thông tin của đơn hàng
Sở dĩ có kết quả như vậy là do mệnh đề LEFT JOIN
ở trên sẽ lấy tất cả các bản ghi ở bảng
SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
7 kết hợp với các bản ghi có SELECT
p.product_name,
o.order_id,
i.item_id,
o.order_date
FROM
production.products p
LEFT JOIN sales.order_items i ON i.product_id = p.product_id
LEFT JOIN sales.orders o ON o.order_id = i.order_id
ORDER BY
order_id;
4 ở bảng SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
8 [không phải tất cả các bản ghi ở bảng SELECT
product_name,
order_id
FROM
production.products p
LEFT JOIN sales.order_items o ON o.product_id = p.product_id
ORDER BY
order_id;
8]Do đó bạn phải thực sự chú ý khi sử dụng điều kiện lọc ở mệnh đề tham gia
Lưu ý. đối với mệnh đề1, điều kiện trong mệnh đềSELECT product_name, order_id FROM production.products p LEFT JOIN sales.order_items o ON o.product_id = p.product_id WHERE order_id = 100 ORDER BY order_id;
5 là tương đương về chức năng nếu nó được đặt trong mệnh đềSELECT p.product_name, o.order_id, i.item_id, o.order_date FROM production.products p LEFT JOIN sales.order_items i ON i.product_id = p.product_id LEFT JOIN sales.orders o ON o.order_id = i.order_id ORDER BY order_id;
8SELECT product_name, order_id FROM production.products p LEFT JOIN sales.order_items o ON o.product_id = p.product_id WHERE order_id IS NULL ORDER BY order_id;
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề LEFT JOIN
trong SQL Server để lấy dữ liệu từ nhiều bảng liên quan