Mệnh Đề WHERE Trong MySQL: Giới Thiệu và Các Trường Hợp Sử Dụng

Mệnh đề WHERE trong MySQL là một trong những thành phần quan trọng giúp lọc dữ liệu dựa trên các điều kiện cụ thể trong câu truy vấn SQL. Nó được sử dụng để chỉ định các điều kiện phải thỏa mãn đối với các hàng dữ liệu trong bảng.

Dưới đây là giải thích chi tiết về mệnh đề WHERE và các trường hợp sử dụng phổ biến.

1. Cú pháp cơ bản của mệnh đề WHERE

Mệnh đề WHERE được sử dụng sau câu lệnh chính như SELECT, UPDATE, DELETE, hoặc INSERT để áp dụng các điều kiện lọc dữ liệu.

Cú pháp:

SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT * FROM employees
WHERE department = 'Sales';

Câu lệnh trên sẽ trả về tất cả các bản ghi từ bảng employees nơi giá trị trong cột departmentSales.

2. Các toán tử trong mệnh đề WHERE

  • Toán tử so sánh: Đây là các toán tử cơ bản giúp so sánh dữ liệu trong bảng với một giá trị cụ thể.
    • =: So sánh bằng
    • != hoặc <>: So sánh khác
    • >: Lớn hơn
    • <: Nhỏ hơn
    • >=: Lớn hơn hoặc bằng
    • <=: Nhỏ hơn hoặc bằng
    Ví dụ:
SELECT * FROM products
WHERE price > 100;

Câu lệnh trên sẽ lấy tất cả các sản phẩm có giá lớn hơn 100.

Toán tử logic:

  • AND: Kết hợp nhiều điều kiện và chỉ trả về kết quả nếu tất cả các điều kiện đúng.
  • OR: Kết hợp nhiều điều kiện và trả về kết quả nếu bất kỳ điều kiện nào đúng.
  • NOT: Phủ định điều kiện.

Ví dụ:

SELECT * FROM employees
WHERE department = 'Sales' AND salary > 5000;

Truy vấn này sẽ lấy tất cả các nhân viên trong phòng Sales có mức lương lớn hơn 5000.

Toán tử BETWEEN: Dùng để kiểm tra nếu một giá trị nằm trong một khoảng xác định.

Ví dụ:

SELECT * FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-06-30';

Truy vấn này sẽ lấy tất cả các đơn hàng có ngày đặt trong khoảng từ ngày 1 tháng 1 năm 2023 đến ngày 30 tháng 6 năm 2023.

Toán tử IN: Dùng để kiểm tra nếu một giá trị thuộc một danh sách giá trị.

Ví dụ:

SELECT * FROM customers
WHERE country IN ('USA', 'Canada', 'Mexico');

Câu lệnh này sẽ lấy tất cả khách hàng ở các quốc gia USA, Canada, hoặc Mexico.

Toán tử LIKE và ký tự đại diện: Dùng để tìm kiếm các mẫu khớp một phần trong văn bản.

  • %: Đại diện cho chuỗi ký tự bất kỳ.
  • _: Đại diện cho một ký tự đơn lẻ.

Ví dụ:

SELECT * FROM customers
WHERE name LIKE 'J%';

Câu lệnh này sẽ lấy tất cả khách hàng có tên bắt đầu bằng chữ J.

Toán tử IS NULL: Dùng để kiểm tra các giá trị NULL.

Ví dụ:

SELECT * FROM orders
WHERE shipped_date IS NULL;

Truy vấn này sẽ lấy tất cả các đơn hàng chưa được vận chuyển (shipped_dateNULL).

3. Kết hợp nhiều điều kiện với AND, OR, và NOT

Khi bạn cần lọc dữ liệu dựa trên nhiều điều kiện phức tạp, bạn có thể kết hợp AND, OR, và NOT trong một câu lệnh.

Ví dụ với ANDOR:

SELECT * FROM employees
WHERE (department = 'Sales' AND salary > 5000) OR (department = 'IT' AND salary > 6000);

Câu lệnh này sẽ lấy tất cả nhân viên trong phòng Sales có lương lớn hơn 5000 hoặc nhân viên trong phòng IT có lương lớn hơn 6000.

Ví dụ với NOT:

SELECT * FROM products
WHERE NOT price > 100;

Câu lệnh này sẽ lấy tất cả các sản phẩm có giá nhỏ hơn hoặc bằng 100.

4. Các tình huống sử dụng thực tế của mệnh đề WHERE

4.1. Truy vấn dữ liệu dựa trên điều kiện ngày tháng

SELECT * FROM sales
WHERE sale_date = CURDATE();

Câu lệnh này sẽ trả về tất cả các giao dịch bán hàng trong ngày hiện tại.

4.2. Tìm kiếm dữ liệu dựa trên giá trị NULL

SELECT * FROM employees
WHERE manager_id IS NULL;

4.3. Sử dụng WHERE với ORDER BY để lọc và sắp xếp dữ liệu

SELECT * FROM products
WHERE stock > 0
ORDER BY price DESC;

Câu lệnh này sẽ lấy tất cả các sản phẩm còn trong kho và sắp xếp theo giá giảm dần.

4.4. Sử dụng WHERE với LIMIT để giới hạn kết quả

SELECT * FROM customers
WHERE country = 'USA'
LIMIT 10;

Truy vấn này sẽ lấy 10 khách hàng đầu tiên ở USA.

4.5. Lọc dữ liệu với WHERE trong các câu lệnh UPDATE

UPDATE employees
SET salary = salary * 1.1
WHERE department = 'IT';

Truy vấn này sẽ tăng lương của tất cả nhân viên trong phòng IT lên 10%.

4.6. Xóa dữ liệu với mệnh đề WHERE trong câu lệnh DELETE

DELETE FROM orders
WHERE order_date < '2023-01-01';

Truy vấn này sẽ xóa tất cả các đơn hàng có ngày đặt trước ngày 1 tháng 1 năm 2023.

5. Các trường hợp nâng cao với mệnh đề WHERE

Sử dụng EXISTS: Kiểm tra sự tồn tại của một hàng trong một truy vấn con.

Ví dụ:

SELECT * FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);

Truy vấn này sẽ lấy tất cả khách hàng có ít nhất một đơn hàng.

Sử dụng ANYALL: So sánh một giá trị với bất kỳ hoặc tất cả các giá trị trong một tập hợp con.

Ví dụ với ANY:

SELECT * FROM products
WHERE price > ANY (SELECT price FROM products WHERE category = 'Electronics');

Truy vấn này sẽ lấy tất cả sản phẩm có giá cao hơn bất kỳ sản phẩm nào trong danh mục Electronics.

Ví dụ với ALL:

SELECT * FROM products
WHERE price > ALL (SELECT price FROM products WHERE category = 'Electronics');

Truy vấn này sẽ lấy tất cả sản phẩm có giá cao hơn tất cả các sản phẩm trong danh mục Electronics.

Mệnh đề WHERE là một công cụ mạnh mẽ trong MySQL giúp bạn lọc và truy vấn dữ liệu dựa trên các điều kiện khác nhau. Việc hiểu rõ cách sử dụng các toán tử, kết hợp nhiều điều kiện và các tình huống sử dụng thực tế sẽ giúp bạn thao tác với dữ liệu một cách hiệu quả hơn.