1. Giới thiệu

Toán tử IN trong MySQL được sử dụng để kiểm tra xem một giá trị có nằm trong một tập hợp các giá trị cụ thể hay không. Đây là một cách hiệu quả để lọc dữ liệu trong cơ sở dữ liệu khi bạn cần kiểm tra nhiều giá trị mà không cần sử dụng nhiều điều kiện OR rắc rối. Thay vì phải viết nhiều điều kiện OR, bạn có thể dùng IN để đơn giản hóa câu lệnh.

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng toán tử IN trong SQL thông qua cú pháp, cách sử dụng, và các ví dụ thực tế từ một bảng dữ liệu giả định.

2. Bảng dữ liệu giả định

Giả sử chúng ta có bảng employees với các thông tin như sau:

employee_idfirst_namelast_namedepartmentsalaryage
1JohnDoeSales150000035
2JaneSmithMarketing170000028
3BobJohnsonSales130000040
4AliceBrownHR200000045
5CharlieGreenMarketing180000025

3. MySQL IN là gì?

Toán tử IN trong MySQL được sử dụng để chỉ định một tập hợp giá trị và kiểm tra xem một cột có chứa giá trị nào từ tập hợp đó hay không. Nếu giá trị của cột nằm trong tập hợp giá trị đã cho, thì bản ghi đó sẽ được chọn.

Cú pháp tổng quát của SQL IN:

shell
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (value1, value2, ...);
  • column1, column2, ...: Các cột mà bạn muốn truy xuất.
  • table_name: Tên của bảng chứa dữ liệu.
  • column_name: Tên của cột mà bạn muốn kiểm tra.
  • value1, value2, ...: Danh sách các giá trị mà bạn muốn kiểm tra. Cột column_name phải có giá trị thuộc một trong các giá trị này.

4. Cách sử dụng SQL IN

a. Sử dụng SQL IN với danh sách các giá trị cụ thể

Toán tử IN có thể được sử dụng để kiểm tra xem giá trị của một cột có nằm trong danh sách các giá trị cụ thể hay không.

Ví dụ 1: Tìm tất cả các nhân viên làm việc trong phòng ban "Sales" và "Marketing"

shell
SELECT first_name, last_name, department
FROM employees
WHERE department IN ('Sales', 'Marketing');

Kết quả:

first_namelast_namedepartment
JohnDoeSales
JaneSmithMarketing
BobJohnsonSales
CharlieGreenMarketing

Trong ví dụ này, câu lệnh SQL sẽ trả về tất cả các nhân viên thuộc phòng ban "Sales" hoặc "Marketing".

b. Sử dụng SQL IN để thay thế nhiều điều kiện OR

Thay vì sử dụng nhiều điều kiện OR, bạn có thể sử dụng toán tử IN để làm câu lệnh gọn gàng và dễ đọc hơn.

Ví dụ 2: Tìm các nhân viên có employee_id là 1, 3 hoặc 5

shell
SELECT first_name, last_name, employee_id
FROM employees
WHERE employee_id IN (1, 3, 5);

Kết quả:

first_namelast_nameemployee_id
JohnDoe1
BobJohnson3
CharlieGreen5

Thay vì viết nhiều điều kiện WHERE employee_id = 1 OR employee_id = 3 OR employee_id = 5, bạn có thể sử dụng IN để kiểm tra một cách đơn giản hơn.

c. Sử dụng SQL IN với dữ liệu số và chuỗi

Toán tử IN có thể được sử dụng với cả dữ liệu số và chuỗi. Bạn có thể kiểm tra các cột chứa các kiểu dữ liệu khác nhau như số (INT, FLOAT, ...) hoặc chuỗi (VARCHAR, TEXT, ...).

Ví dụ 3: Tìm tất cả các nhân viên có mức lương là 1300000, 1500000 hoặc 1800000

shell
SELECT first_name, last_name, salary
FROM employees
WHERE salary IN (1300000, 1500000, 1800000);

Kết quả:

first_namelast_namesalary
JohnDoe1500000
BobJohnson1300000
CharlieGreen1800000

Câu lệnh này sẽ trả về tất cả các nhân viên có mức lương thuộc một trong các giá trị 1,300,000, 1,500,000, hoặc 1,800,000.

d. Sử dụng SQL IN với một câu lệnh con (Subquery)

Toán tử IN cũng có thể được sử dụng với một câu lệnh con (subquery) để lấy tập hợp các giá trị từ một truy vấn phụ và kiểm tra giá trị trong cột của bảng chính.

Ví dụ 4: Tìm tất cả các nhân viên có phòng ban giống như những người có lương trên 1,500,000

shell
SELECT first_name, last_name, department
FROM employees
WHERE department IN (
    SELECT department
    FROM employees
    WHERE salary > 1500000
);

Kết quả:

first_namelast_namedepartment
JaneSmithMarketing
AliceBrownHR
CharlieGreenMarketing

Câu lệnh con trong IN trả về danh sách các phòng ban của các nhân viên có mức lương trên 1,500,000. Sau đó, truy vấn chính sẽ tìm tất cả các nhân viên trong các phòng ban đó.

e. Sử dụng SQL NOT IN

Ngoài việc sử dụng IN, bạn cũng có thể sử dụng NOT IN để lọc ra các giá trị không thuộc tập hợp giá trị đã cho.

Ví dụ 5: Tìm tất cả các nhân viên không làm việc trong phòng ban "Sales" hoặc "Marketing"

shell
SELECT first_name, last_name, department
FROM employees
WHERE department NOT IN ('Sales', 'Marketing');

Kết quả:

first_namelast_namedepartment
AliceBrownHR

Câu lệnh này sẽ trả về tất cả các nhân viên không thuộc phòng ban "Sales" hoặc "Marketing".

5. Các ví dụ thực tế về MySQL IN

Ví dụ 1: Tìm tất cả các nhân viên có họ là "Smith", "Doe" hoặc "Johnson"

shell
SELECT first_name, last_name
FROM employees
WHERE last_name IN ('Smith', 'Doe', 'Johnson');

Ví dụ 2: Tìm tất cả các nhân viên có tuổi là 28, 35 hoặc 40

shell
SELECT first_name, last_name, age
FROM employees
WHERE age IN (28, 35, 40);

Ví dụ 3: Tìm tất cả các nhân viên thuộc những phòng ban có lương trung bình trên 1,600,000

shell
SELECT first_name, last_name, department
FROM employees
WHERE department IN (
    SELECT department
    FROM employees
    GROUP BY department
    HAVING AVG(salary) > 1600000
);

Ví dụ 4: Tìm tất cả các nhân viên không có tên bắt đầu bằng "J"

shell
SELECT first_name, last_name
FROM employees
WHERE first_name NOT IN ('John', 'Jane');

Ví dụ 5: Tìm tất cả các nhân viên có mức lương là 1,300,000 hoặc 1,500,000

shell
SELECT first_name, last_name, salary
FROM employees
WHERE salary IN (1300000, 1500000);

6. Một số lưu ý khi sử dụng toán tử IN trong MySQL

a. Xử lý giá trị NULL

Khi sử dụng IN hoặc NOT IN, nếu tập hợp giá trị chứa NULL, kết quả có thể không như mong muốn. Ví dụ, nếu trong câu lệnh con (subquery) có giá trị NULL, kết quả của NOT IN có thể không trả về gì vì NULL không bao giờ khớp với bất kỳ giá trị nào.

b. Sử dụng IN với câu lệnh con

Khi sử dụng IN với các câu lệnh con, hãy đảm bảo rằng câu lệnh con trả về một danh sách các giá trị hợp lệ để kiểm tra. Câu lệnh con nên trả về một cột duy nhất (danh sách đơn giá trị) để IN có thể so sánh chính xác.

c. Hiệu suất khi sử dụng MySQL IN

Khi sử dụng IN với danh sách giá trị lớn hoặc câu lệnh con, hiệu suất của truy vấn có thể bị ảnh hưởng. Trong một số trường hợp, sử dụng các phương pháp thay thế như EXISTS có thể cải thiện hiệu suất.

Kết luận

Toán tử IN trong SQL là một công cụ mạnh mẽ và hữu ích giúp đơn giản hóa các truy vấn khi bạn cần kiểm tra một cột có giá trị thuộc một tập hợp giá trị cụ thể. Thay vì sử dụng nhiều điều kiện OR, bạn có thể sử dụng IN để làm câu lệnh SQL ngắn gọn và dễ đọc hơn.

Hãy thử áp dụng các kiến thức này trong các bài tập và dự án thực tế trên CodeTutHub để nắm vững hơn về cách sử dụng toán tử IN trong SQL!