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ử IN
là TRUE
.
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 IN
là TRUE
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.
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ả:
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ử 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ả:
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ả:
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.