Chuyển đến nội dung chính

Cách sử dụng toán tử SQL IN: Hướng dẫn kỹ thuật lọc hiệu quả

Toán tử SQL IN cho phép bạn lọc kết quả truy vấn để chỉ bao gồm các hàng đáp ứng điều kiện đã chỉ định. Khám phá toàn bộ tiềm năng và các lựa chọn thay thế của nó.
Đã cập nhật 5 thg 10, 2026  · 8 phút đọc

Khám phá cùng AI

ChatGPTClaudePerplexity

Toán tử IN trong SQL là một công cụ hữu ích để lọc dữ liệu dựa trên một tập giá trị. Khi xuất hiện trong các truy vấn dài, toán tử IN giúp đơn giản hóa các truy vấn phức tạp và cải thiện khả năng đọc.

Nếu bạn đang hướng tới nghề nghiệp phân tích dữ liệu, tôi khuyến nghị học các khóa Introduction to SQL và SQL Fundamentals của DataCamp để nắm các kiến thức cơ bản về áp dụng SQL để lọc dữ liệu. Để ôn nhanh, hãy xem SQL Basics Cheat Sheet của chúng tôi.

Toán tử SQL IN là gì?

Toán tử IN trong SQL là một công cụ mạnh để lọc dữ liệu trong các truy vấn SQL. Nó giúp tinh chỉnh kết quả truy vấn bằng cách chỉ trả về các hàng đáp ứng những điều kiện đã chỉ định.

Tuy nhiên, toán tử IN được đặt sau mệnh đề WHERE để trả về kết quả với nhiều điều kiện. Vì vậy, toán tử IN có thể được dùng khi kiểu dữ liệu cần lọc có nhiều giá trị khác nhau.

-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');

Trong ví dụ trên, chúng ta chọn các cột employee_id, employee_name và department từ bảng employees. Tuy nhiên, chúng ta chỉ trả về các hàng mà nhân viên thuộc Sales và HR.

Toán tử IN có thể lọc nhiều kiểu dữ liệu SQL khác nhau, bao gồm chuỗi, số và ngày. Luôn đảm bảo cột tham chiếu có kiểu dữ liệu phù hợp khi lọc các hàng.

Cú pháp của toán tử SQL IN

Toán tử IN có cú pháp đơn giản để lọc giá trị. Nó được dùng trong mệnh đề WHERE để cho phép lọc nhiều giá trị từ một danh sách cột. Cú pháp tổng quát cho toán tử IN như dưới đây.

-- Select the columns you want to retrieve
SELECT column_name(s)
-- Specify the table from which to retrieve the data
FROM table_name
-- Filter the results to include only those rows where the column's value matches any value in the specified list
WHERE column_name IN (value1, value2, ...);

Dưới đây là một ví dụ thực tế về việc dùng toán tử IN trong mệnh đề WHERE.

-- Select the employee ID, employee name, and department columns
SELECT employee_id, employee_name, department
FROM employees
-- Filter the results to include only employees whose department is 'Sales' and 'HR'
WHERE department IN ('Sales', 'HR');

Những điểm quan trọng cần ghi nhớ

Toán tử IN được dùng trong mệnh đề WHERE của câu lệnh SELECT. Vị trí này cho phép truy vấn lọc các hàng dựa trên nhiều giá trị. Khi sử dụng trong truy vấn SQL, toán tử IN đơn giản hóa các truy vấn phức tạp và giúp chúng dễ đọc hơn.

Toán tử IN là chuẩn trên nhiều hệ quản trị cơ sở dữ liệu khác nhau, bao gồm SQL Server, PostgreSQL, MySQL và Oracle. Việc viết toán tử IN bằng chữ hoa theo chuẩn là quan trọng để cải thiện khả năng đọc.

Các trường hợp sử dụng phổ biến của toán tử IN

Toán tử IN trong SQL được dùng cho nhiều ứng dụng phân tích dữ liệu. Phần này sẽ khám phá một số trường hợp sử dụng phổ biến nhất, bao gồm lọc dữ liệu, xử lý nhiều giá trị và sử dụng truy vấn lồng (subquery). 

Lọc dữ liệu

Toán tử IN lọc, ghi nhận và trả về một tập giá trị đã chỉ định. Ví dụ, truy vấn dưới đây sẽ chọn tất cả các cột từ bảng employees và trả về các hàng có nhân viên thuộc các phòng ban Sales, HR và IT.

-- Select all columns from employees table
SELECT employee_id, employee_name, department
FROM employees
-- Filter to include only 'Sales', 'HR', and 'IT' departments
WHERE department IN ('Sales', 'HR', 'IT');

Xử lý nhiều giá trị

Toán tử IN cũng được dùng để lọc các bản ghi với nhiều giá trị. Ứng dụng này hữu ích khi lọc dữ liệu bằng nhiều điều kiện OR. Vì vậy, toán tử IN cung cấp cách đơn giản hơn để cải thiện khả năng đọc của truy vấn.

Dưới đây là cách truy vấn sẽ trông như thế nào khi dùng toán tử OR thay cho IN.

-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on multiple department names using OR conditions
WHERE department = 'Sales'
OR department = 'Marketing'
OR department = 'HR';

Đây là truy vấn dùng toán tử IN. Hãy lưu ý sự đơn giản của truy vấn khi loại bỏ toán tử OR lặp lại.

-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on a list of department names using the IN operator
WHERE department IN ('Sales', 'Marketing', 'HR');

Truy vấn lồng (subquery)

Bạn cũng có thể dùng toán tử IN để lọc kết quả trong một truy vấn lồng. Thao tác này cho phép bạn lọc các bản ghi từ một truy vấn khác hoặc dữ liệu liên quan. Trong ví dụ dưới đây, truy vấn lồng chọn department_id của phòng ban Sales từ bảng departments. Do đó, truy vấn chính sẽ trả về các hàng chứa employee_id và tên từ bảng employees, được lọc theo truy vấn lồng.

-- Main query to select employee_id and name from the employees table
SELECT employee_id, name
FROM employees
-- Filter employees based on department_id using a subquery
WHERE department_id IN (
    -- Subquery to get department_id for the "Sales" department
    SELECT department_id
    FROM departments
    WHERE department_name = 'Sales'
);

Hạn chế và lựa chọn thay thế

Mặc dù toán tử IN dễ dùng trong các truy vấn SQL, vẫn có một số hạn chế trong việc áp dụng, bao gồm:

  • Vấn đề hiệu năng với danh sách lớn: Sử dụng toán tử IN với danh sách giá trị lớn có thể gây ra vấn đề hiệu năng, làm chậm thời gian thực thi truy vấn.
  • Xử lý giá trị NULL: Toán tử IN không xử lý hiệu quả các giá trị NULL và có thể trả về kết quả khó lường. Nguyên nhân là các giá trị NULL không nằm trong danh sách giá trị.
  • Linh hoạt hạn chế: Toán tử IN bị hạn chế khi xử lý các tập dữ liệu lớn với nhiều cột. Bạn chỉ có thể lọc một số cột giới hạn bằng cách dùng truy vấn lồng.

Các lựa chọn thay thế để tránh các hạn chế của toán tử IN bao gồm:

Dùng toán tử EXISTS

Toán tử EXISTS kiểm tra liệu các bản ghi đã chỉ định có tồn tại trong một truy vấn lồng hay không. Khi dùng đúng cách, toán tử này hiệu quả và nhanh hơn.

-- Select employee ID and name for employees in departments located in New York using EXISTS
SELECT employee_id, employee_name
FROM employees e
-- Check if there exists a row in the departments table
WHERE EXISTS (
    -- Select 1 is used here as a placeholder; it simply checks for existence
    SELECT 1
    FROM departments d
    -- Match the department_id in employees with department_id in departments
    WHERE d.department_id = e.department_id
    -- Filter for departments located in New York
    AND d.location = 'New York'
);

Sử dụng JOIN

Mệnh đề JOIN trong SQL hiệu quả khi truy vấn dữ liệu với lọc phức tạp và hữu ích khi lọc dữ liệu từ nhiều cột liên quan. Trong ví dụ dưới đây, mệnh đề JOIN được dùng để nối bảng employees và departments trên department_id nhằm lọc các bản ghi nhân viên sống ở New York.

-- Select employee ID and name for employees in departments located in New York using JOIN
SELECT e.employee_id, e.employee_name
FROM employees e
-- Join the employees table with the departments table on department_id
JOIN departments d ON e.department_id = d.department_id
-- Filter the results to include only departments located in New York
WHERE d.location = 'New York';

Dùng Common Table Expressions (CTE) hoặc bảng tạm

Nếu bạn có các bảng với danh sách lớn, hãy cân nhắc dùng CTE để lưu danh sách giá trị trước khi truy vấn. Cách này cải thiện hiệu năng và khả năng đọc của truy vấn.

-- Define a CTE (Common Table Expression) to store the list of department IDs located in New York
WITH DepartmentList AS (
    SELECT department_id
    FROM departments
    WHERE location = 'New York'
)
-- Select employee ID and name for employees who belong to the departments listed in the CTE
SELECT e.employee_id, e.employee_name
FROM employees e
-- Filter the results to include only employees whose department_id is in the list of department IDs from the CTE
WHERE e.department_id IN (SELECT department_id FROM DepartmentList);

Để học các kỹ thuật nâng cao khác về lọc dữ liệu, tôi khuyến nghị theo học lộ trình nghề nghiệp Associate Data Analyst in SQL của DataCamp. Bạn cũng có thể xem khóa Intermediate SQL Server của DataCamp, trong đó có một chương về common table expressions và các chủ đề nâng cao khác. 

Kết luận

Hiểu rõ toán tử IN trong SQL rất quan trọng đối với một người làm dữ liệu, vì nó cho phép bạn lọc và biến đổi dữ liệu trong quá trình phân tích. Để nâng cao kỹ năng SQL khi áp dụng toán tử IN, tôi khuyến khích bạn thực hành với các tập dữ liệu khác nhau để phân tích.

Nếu bạn muốn nâng cao kiến thức SQL lên mức trung cấp, tôi khuyến nghị khóa Reporting in SQL để khám phá các kỹ thuật truy vấn phức tạp khác. Ngoài ra, SQL Associate Certification sẽ giúp bạn nổi bật giữa các nhà phân tích dữ liệu khác bằng cách chứng minh kiến thức thực tiễn trong việc dùng SQL cho phân tích nâng cao.


Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Biên tập viên kỹ thuật về Khoa học dữ liệu với kinh nghiệm thực tế trong phân tích dữ liệu, trí tuệ doanh nghiệp và khoa học dữ liệu. Tôi viết nội dung thực tiễn, tập trung vào ngành về SQL, Python, Power BI, Databricks và kỹ thuật dữ liệu, dựa trên công việc phân tích trong thế giới thực. Bài viết của tôi kết nối chiều sâu kỹ thuật với tác động kinh doanh, giúp các chuyên gia chuyển đổi dữ liệu thành những quyết định vững chắc.

Câu hỏi thường gặp

Tôi có thể dùng toán tử IN để lọc các kiểu dữ liệu khác nhau không?

Toán tử IN lọc được nhiều kiểu dữ liệu SQL khác nhau, bao gồm chuỗi, số và ngày.

Bạn có thể dùng toán tử IN trong truy vấn lồng không?

Toán tử IN được dùng trong các truy vấn lồng như một phương pháp nâng cao để lọc dữ liệu từ truy vấn chính.

Lựa chọn thay thế cho toán tử IN là gì?

Toán tử EXISTS, mệnh đề JOIN và Common Table Expressions (CTE) là những lựa chọn thay thế tốt nhất cho toán tử IN.

Những cơ sở dữ liệu nào tương thích với toán tử IN?

Các hệ quản trị cơ sở dữ liệu phổ biến hỗ trợ toán tử IN, bao gồm SQL Server, MySQL, PostgreSQL và Oracle.

Chủ đề
SQL
Phân tích dữ liệu

Học SQL với DataCamp

Khóa học

Nhập môn SQL

2 giờ
1.6M
Học cách tạo và truy vấn cơ sở dữ liệu quan hệ bằng SQL chỉ trong hai giờ.
Xem chi tiếtRight Arrow
Bắt Đầu Khóa Học
Xem thêmRight Arrow
Liên quan

blog

Claude Opus 4.6: Tính năng, Điểm chuẩn, Bài kiểm tra thực hành và hơn thế nữa

Mô hình mới nhất của Anthropic dẫn đầu ở mã hóa tác tử và lập luận phức tạp. Thêm vào đó, nó có cửa sổ ngữ cảnh 1M.
Matt Crabtree's photo

Matt Crabtree

10 phút

Xem ThêmXem Thêm