Mysql trái tham gia

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 tin

Nế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ớp

Dướ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

Mysql trái tham gia

Trong hình minh họa này, không có bản ghi nào từ bảng T2 khớp với bản ghi 1 từ bảng T1, do đó, giá trị NULL được sử dụng. Bản ghi 2 và 3 từ bảng T1 khớp với các bản ghi A và B từ bảng T2 tương ứng

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 đây

Mysql trái tham gia

Mỗ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;
1

Câ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;
8

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;

This is results

Mysql trái tham gia

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ào

Có 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

Mysql trái tham gia

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

Mysql trái tham gia
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

Mysql trái tham gia

Đ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

Mysql trái tham gia

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;
5

SELECT
    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

Mysql trái tham gia

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 đề
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;
1, điều kiện 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;
5 là tương đương về chức năng nếu nó được đặt 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 IS NULL
ORDER BY
    order_id;
8

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