IN trong SQL Server

IN trong SQL Server

Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng toán tử IN trong SQL Server để kiểm tra xem một giá trị có khớp với bất kỳ giá trị nào trong danh sách hay không.

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

Các toán tử IN trong SQL Server là một toán tử logic cho phép bạn kiểm tra xem một giá trị cụ thể phù hợp với bất kỳ giá trị trong danh sách.

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

column | expression IN ( v1, v2, v3, ...)

Trong cú pháp này:

  • Đầu tiên, chỉ định cột hoặc biểu thức để kiểm tra.
  • Thứ hai, chỉ định một danh sách các giá trị để kiểm tra. Tất cả các giá trị phải có cùng kiểu dữ liệu với kiểu dữ liệu của cột hoặc biểu thức.

Nếu một giá trị trong cột hoặc biểu thức bằng với bất kỳ giá trị nào trong danh sách, kết quả của toán tử INTRUE.

Các toán tử IN là tương đương với nhiều toán tử OR, do đó hai biểu thức sau là tương đương:

column IN (v1, v2, v3)

column = v1 OR column = v2 OR column = v3

Để phủ định toán tử IN, bạn sử dụng toán tử NOT IN như sau:

column | expression NOT IN ( v1, v2, v3, ...)

Kết quả toán tử NOT INTRUE nếu cột hoặc biểu thức không bằng bất kỳ giá trị nào trong danh sách.

Ngoài danh sách các giá trị, bạn có thể sử dụng subquery (truy vấn con) để trả về danh sách các giá trị với toán tử IN như dưới đây:

column | expression IN (subquery)

Trong cú pháp này, truy vấn con là một câu lệnh SELECT trả về một danh sách các giá trị của một cột.

Lưu ý rằng nếu một danh sách chứa NULL, kết quả của toán tử IN hoặc NOT IN sẽ là UNKNOWN.

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

Chúng tôi sẽ sử dụng bảng products từ cơ sở dữ liệu mẫu để làm ví dụ minh họa cho toán tử IN trong SQL Server.

Bảng Products trong cơ sở dữ liệu mẫu trong SQL Server

Sử dụng toán tử IN với một danh sách giá trị trong SQL Server

Câu lệnh sau đây tìm kiếm các sản phẩm có giá niêm yết là một trong các giá trị sau: 89,99, 109,99 và 159,99:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price IN (89.99, 109.99, 159.99)
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng toán tử IN với một danh sách giá trị trong SQL Server

Truy vấn trên tương đương với truy vấn sau sử dụng toán tử OR để thay thế:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price = 89.99 OR 
    list_price = 109.99 OR 
    list_price = 159.99
ORDER BY
    list_price;

Để tìm các sản phẩm có giá niêm yết không phải là một trong các giá trên, bạn sử dụng toán tử NOT IN như trong truy vấn sau:

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price NOT IN (89.99, 109.99, 159.99)
ORDER BY
    list_price;

Đây là kết quả:

Sử dụng toán tử NOT IN với một danh sách giá trị trong SQL Server

Sử dụng toán tử IN với truy vấn con trong SQL Server

Truy vấn sau đây trả về danh sách id sản phẩm của các sản phẩm của cửa hàng có id cửa hàng bằng 1 và có số lượng lớn hơn hoặc bằng 30:

SELECT
    product_id
FROM
    production.stocks
WHERE
    store_id = 1 AND quantity >= 30;

Đây là kết quả:

Truy vấn trong SQL Server

Bạn có thể sử dụng truy vấn ở trên dưới dạng subquery như được hiển thị trong truy vấn sau:

SELECT
    product_id,
    product_name,
    list_price
FROM
    production.products
WHERE
    product_id IN (
        SELECT
            product_id
        FROM
            production.stocks
        WHERE
            store_id = 1 AND quantity >= 30
    )
ORDER BY
    product_name;

Đây là kết quả:

Sử dụng toán tử IN với truy vấn con trong SQL Server

Trong ví dụ này:

  • Đầu tiên, subquery trả về một danh sách id sản phẩm của cửa hàng có id cửa hàng là 1 và số lượng sản phẩm lớn hơn hoặc bằng 30.
  • Thứ hai, truy vấn bên ngoài lấy ra tên sản phẩm và giá niêm yết của các sản phẩm có id sản phẩm khớp với bất kỳ giá trị nào được truy vấn con trả về.

Để biết thêm thông tin về truy vấn con, hãy xem hướng dẫn subquery trong SQL Server.

Trong hướng dẫn này, bạn đã học cách sử dụng toán tử IN trong SQL Server để kiểm tra xem một giá trị có khớp với bất kỳ giá trị nào trong danh sách hoặc được trả về bởi một truy vấn con 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 *