Cách dùng toán tử IN và NOT IN trong SQL, kèm ví dụ

Nội dung được viết bởi Kim Thu

Trong SQL, sẽ có những lúc bạn cần truy vấn những kết quả có giá trị thuộc hay không thuộc một trường nào đó. Khi này, bạn sẽ cần sử dụng đến toán tử IN và NOT IN trong SQL

Vậy hai toán tử này là gì, cú pháp như thế nào, cách dùng ra sao? Cùng Gitiho tìm hiểu trong bài viết ngày hôm nay nhé!

Cách dùng IN trong SQL

Ở bài trước chúng ta tìm hiểu cách sử dụng từ khóa BETWEEN trong SQL để lọc ra những giá trị trong khoảng nhất định với câu lệnh rút gọn hơn rất nhiều so với sử dụng hàm AND, OR. 

Nhưng trong trường hợp bạn chỉ muốn tìm một số giá trị nhất định trong một khoảng nào đó thì lúc này sử dụng toán tử IN sẽ giúp câu lệnh truy vấn khắc phục được những nhược điểm của hàm AND, OR, hay BETWEEN.

Cú pháp IN trong SQL

Vậy IN trong SQL là gì? Đó là một toán tử điều kiện được sử dụng để kiểm tra xem giá trị của một cột có nằm trong một danh sách các giá trị cụ thể hay không. Nó cho phép bạn so sánh giá trị của cột với nhiều giá trị mà không cần phải viết nhiều điều kiện AND,  OR riêng lẻ.

Cú pháp IN trong câu lệnh SQL:

SELECT column_name
FROM table_name
WHERE column_name IN (value1, value2, value3, ...);

Trong đó: 

  • column_name: tên cột hoặc các cột mà bạn muốn lấy dữ liệu từ database với câu lệnh SELECT trong SQL.
  • table_name: dữ liệu được lấy từ bảng nào.
  • value1, value2, value3,...: Giá trị cụ thể của cột column_name mà bạn muốn lọc.

Để hiểu rõ hơn về cách dùng của toán tử IN, cùng Gitiho đi đến một số ví dụ sau:

Ví dụ

Yêu cầu 1: Tìm kiếm tất cả các thành phố nằm trong những bang: Hamburg, California, Ohio và NewYork trong bảng dữ liệu Geographic.

Để giải yêu cầu, chúng ta có câu lệnh sau:

select * from Geographic
where StateProvinceName IN (‘Hamburg’, ‘California’, ‘Ohio’, ‘NewYork’)

Bấm chạy câu lệnh, chúng ta thu được kết quả chứa toàn bộ các bản ghi thuộc các bang Hamburg, California, Ohio và NewYork.

Cách dùng IN trong SQL 1

Yêu cầu 2: Lựa chọn toàn bộ khách hàng có Geographykey là 311, 334, 302 từ bảng Customer_Info (thông tin khách hàng).

Ta có câu lệnh sau:

select * from Customer_Info
where Geographykey IN (311, 334, 302)

Cho chạy câu lệnh, bạn sẽ thu được 70 bản ghi chứa thông tin khách hàng có Geographykey là 311, 334, 302.

Cách dùng IN trong SQL 2

Yêu cầu 3: Lọc ra toàn bộ các giao dịch bán hàng trong bảng Sales trong các tháng 1, 5, 9.

Đối với các truy vấn với điều kiện là các tháng không liền kề nhau, việc sử dụng toán tử IN sẽ rất hữu dụng trong trường hợp này. Ta có:

select * from sales 
where sales.Month IN (1,5,9)

Lưu ý: Trong câu lệnh trên chúng ta nên ghi sales.Month chi tiết để không nhầm lẫn giữa trường Month và khách hàng Month trong SQL.

Chúng ta sẽ được 2500 bản ghi là các giao dịch phát sinh trong 3 tháng 1, 5, 9.

Cách dùng IN trong SQL 3

Yêu cầu 4: Lựa chọn toàn bộ khách hàng có năm sinh 1969, 1973 hoặc 1975 trong bảng Customer_Info.

Với yêu cầu này, bạn có thể sử dụng hàm chức năng YEAR trong SQL để trích xuất năm từ giá trị ngày tháng năm cụ thể trong database, cụ thể:

select * from Customer_Info
where YEAR(BirthDate) IN (1969, 1973, 1975)

Chạy công thức bạn sẽ thu được 230 bản ghi như sau:

Cách dùng IN trong SQL 4

Yêu cầu 5 (Nâng cao): Tìm tất cả các giao dịch bán hàng có tất cả Geographykey xuất hiện trong bảng Customer_Info.

Với đề bài này, đầu tiên bạn cần tìm ra tất cả các bản ghi có Geographykey xuất hiện trong bảng Customer_Info với hàm SELECT DISTINCT trong SQL để tìm các giá trị duy nhất như sau:

select DISTINCT Gepgraphykey from Customer_Info

Chạy công thức chúng ta được 249 bản ghi chứa Geographykey. 

Cách dùng IN trong SQL 5

Bây giờ, chúng ta sẽ lồng cú pháp trên với hàm SELECT để làm thành điều kiện như sau:

select * from sales
where Geographykey IN (select DISTINCT Gepgraphykey from Customer_Info)

Cho chạy công thức chúng ta thu được kết quả sau:

Cách dùng IN trong SQL 6

Để thành thạo toán tử IN và NOT IN cùng các câu lệnh truy vấn khác trong SQL, bạn có thể đăng ký học SQL với khóa học sau tại Gitiho:

Cách dùng NOT IN trong SQL

Trái ngược lại với toán tử IN, NOT IN được sử dụng để lọc ra các bản ghi của cột không nằm trong danh sách các giá trị cụ thể. 

Cú pháp như sau:

SELECT column_name
FROM table_name
WHERE column_name NOT IN (value1, value2, value3, ...);

Ví dụ: Lọc ra những khách hàng không sống tại Đức, Pháp, Anh trong bảng Customer.

Công thức:

SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');

Chạy công thức, ta được kết quả:

Cách dùng NOT IN trong SQL

Xem thêm: Khám phá các loại toán tử trong SQL đầy đủ, chi tiết

Kết luận

Trên đây là hướng dẫn cách sử dụng toán tử IN và NOT IN trong SQL để lọc ra những bản ghi chứa giá trị cụ thể của một trường nào đó. Hy vọng với những kiến thức và ví dụ thực tế trên có thể giúp ích cho bạn trong quá trình thành thạo công cụ truy vấn SQL này. Chúc bạn thành công!

Khóa học giúp bạn làm chủ ngôn ngữ truy vấn dữ liệu phổ biến SQL từ cơ bản đến nâng cao. Từ đó có thể tự tin xây dựng, truy vấn, và tối ưu hóa các cơ sở dữ liệu phức tạp, hỗ trợ phân tích, làm báo cáo và ra quyết định kinh doanh một cách hiệu quả.

Đăng ký học thử để trải nghiệm ngay hôm nay!

0/5 - (0 bình chọn)

0/5 - (0 bình chọn)

0 thảo luận

@ 2020 - Bản quyền của Công ty cổ phần công nghệ giáo dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở kế hoạch và đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ thông tin và truyền thông