Toán tử EXISTS trong SQL Server

Toán tử EXISTS trong SQL Server

Trong hướng dẫn này, bạn sẽ học tìm hiểu cách sử dụng toán tử EXISTS trong SQL Server để kiểm tra sự tồn tại của các bản ghi trong một truy vấn con.

Tổng quan về toán tử EXISTS trong SQL Server

Toán tử EXISTS là một toán tử logic cho phép bạn kiểm tra xem một subquery có trả về bất kỳ bản ghi nào không. Toán tử EXISTS trả về TRUE nếu subquery trả về một hoặc nhiều bản ghi.

Sau đây minh họa cú pháp của toán tử EXISTS trong SQL Server :

EXISTS ( subquery)

Trong cú pháp này, truy vấn con chỉ là một câu lệnh SELECT. Ngay sau khi truy vấn con trả về các bản ghi, toán tử EXISTS sẽ trả về TRUE và ngừng xử lý ngay lập tức.

Lưu ý rằng ngay cả khi truy vấn con trả về một giá trị NULL, toán tử EXISTS vẫn trả về TRUE.

Ví dụ về toán tử EXISTS trong SQL Server

Hãy lấy một số ví dụ để hiểu cách hoạt động của toán tử EXISTS.

Sử dụng toán tử EXISTS với một truy vấn con trả về NULL

Hãy xem bảng customers trong cơ sở dữ liệu mẫu BikeStores.

Ví dụ sau đây trả về tất cả các bản ghi từ  bảng customers:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers
WHERE
    EXISTS (SELECT NULL)
ORDER BY
    first_name,
    last_name;

Trong ví dụ này, truy vấn con trả về một tập hợp kết quả có chứa  NULL, nhưng do toán tử EXISTS trả về TRUE. Do đó, toàn bộ truy vấn trả về tất cả các bản ghi từ bảng customers.

Sử dụng toán tử EXISTS với một subquery tương quan

Hãy xem bangr customersorders trong cơ sở dữ liệu mẫu BikeStores.

Ví dụ sau đây tìm tất cả những khách hàng đã đặt nhiều hơn hai đơn hàng:

SELECT
    customer_id,
    first_name,
    last_name
FROM
    sales.customers c
WHERE
    EXISTS (
        SELECT
            COUNT (*)
        FROM
            sales.orders o
        WHERE
            customer_id = c.customer_id
        GROUP BY
            customer_id
        HAVING
            COUNT (*) > 2
    )
ORDER BY
    first_name,
    last_name;

Trong ví dụ này, chúng tôi có một subquery tương quan trả về những khách hàng đặt nhiều hơn hai đơn đặt hàng.

Nếu số lượng đơn đặt hàng do khách hàng đặt ít hơn hoặc bằng hai, truy vấn con trả về tập kết quả trống khiến toán tử EXISTS trả về FALSE.

Dựa trên kết quả của toán tử EXISTS, khách hàng sẽ được đưa vào bộ kết quả trả về.

Toán tử EXISTS so với toán tử IN

Câu lệnh sau sử dụng toán tử IN để tìm đơn đặt hàng của khách hàng từ San Jose:

SELECT
    *
FROM
    sales.orders
WHERE
    customer_id IN (
        SELECT
            customer_id
        FROM
            sales.customers
        WHERE
            city = 'San Jose'
    )
ORDER BY
    customer_id,
    order_date;

Câu lệnh sau sử dụng toán tử EXISTS trả về cùng một kết quả:

SELECT
    *
FROM
    sales.orders o
WHERE
    EXISTS (
        SELECT
            customer_id
        FROM
            sales.customers c
        WHERE
            o.customer_id = c.customer_id
        AND city = 'San Jose'
    )
ORDER BY
    o.customer_id,
    order_date;

Toán tử EXISTS so với mệnh đề JOIN

Toán tử EXISTS trả về TRUE hoặc FALSE trong khi mệnh đề JOIN trả về bản ghi từ bảng khác.

Bạn sử dụng toán tử EXISTS để kiểm tra xem một truy vấn con có trả về bất kỳ bản ghi nào không và dừng ngay khi có bất kỳ bản ghi được trả về. Trong khi đó, bạn sử dụng mệnh đề JOIN để mở rộng tập kết quả bằng cách kết hợp nó với các cột từ các bảng có liên quan.

Trong thực tế, bạn sử dụng EXISTS khi bạn chỉ cần kiểm tra sự tồn tại của các hàng từ các bảng liên quan mà không cần trả về dữ liệu từ chúng.

Trong hướng dẫn này, bạn đã tìm hiểu cách sử dụng toán tử EXISTS SQL Server để kiểm tra xem truy vấn con có trả về bản ghi hay không.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *