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 department
là Sales
.
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_date
là NULL
).
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 AND
và OR
:
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 ANY
và ALL
: 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.