Xin chào các bạn, trong bài viết trước chúng ta đã học cách sử dụng ORDER BY để sắp xếp tập kết quả MySQL. Trong bài viết này, bạn sẽ học được cách sử dụng mệnh đề WHERE
của MySQL trong câu lệnh SELECT
để lọc các hàng từ tập kết quả.
Giới thiệu về mệnh đề WHERE của MySQL
Mệnh đề WHERE
cho phép bạn chỉ định điều kiện tìm kiếm cho các bản ghi được trả về bởi một truy vấn. Sau đây là cú pháp của mệnh đề WHERE
:
SELECT select_list FROM table_name WHERE search_condition;
search_condition
là sự kết hợp của một hoặc nhiều biểu thức bằng toán tử AND
, OR
, hoặc NOT
.
Trong MySQL, một vị từ là một biểu thức Boolean đánh giá là TRUE
, FALSE
, hoặc UNKNOWN
.
Câu lệnh SELECT
sẽ bao gồm bất kỳ hàng nào thỏa mãn điều kiện tìm kiếm trong tập kết quả.
Bên cạnh câu lệnh SELECT
, bạn có thể sử dụng mệnh đề WHERE
trong câu lệnh UPDATE
hoặc DELETE
để chỉ định các hàng cần cập nhật hoặc xóa.
Khi thực hiện câu lệnh SELECT
với mệnh đề WHERE
, MySQL đánh giá mệnh đề WHERE
sau mệnh đề FROM
và trước mệnh đề SELECT
và ORDER BY:
MySQL WHERE VÍ DỤ
Chúng tôi sẽ sử dụng bảng employees
từ cơ sở dữ liệu mẫu để thao tác.
1) Sử dụng mệnh đề WHERE trong MySQL với ví dụ về toán tử “=”
Truy vấn sau sử dụng mệnh đề WHERE
để tìm tất cả nhân viên có chức danh công việc là Sales Rep
:
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep';
Kết quả:
+-----------+-----------+-----------+ | lastname | firstname | jobtitle | +-----------+-----------+-----------+ | Jennings | Leslie | Sales Rep | | Thompson | Leslie | Sales Rep | | Firrelli | Julie | Sales Rep | | Patterson | Steve | Sales Rep | | Tseng | Foon Yue | Sales Rep | | Vanauf | George | Sales Rep | | Bondur | Loui | Sales Rep | | Hernandez | Gerard | Sales Rep | | Castillo | Pamela | Sales Rep | | Bott | Larry | Sales Rep | | Jones | Barry | Sales Rep | | Fixter | Andy | Sales Rep | | Marsh | Peter | Sales Rep | | King | Tom | Sales Rep | | Nishi | Mami | Sales Rep | | Kato | Yoshimi | Sales Rep | | Gerard | Martin | Sales Rep | +-----------+-----------+-----------+ 17 rows in set (0.00 sec)
Trong ví dụ này, câu lệnh SELECT
kiểm tra tất cả các hàng của bảng employees
và chỉ chọn các hàng có giá trị trong cột jobTitle
là Sales Rep
.
2) Sử dụng mệnh đề WHERE của MySQL với toán tử AND
Ví dụ sau sử dụng mệnh đề WHERE
để tìm nhân viên có chức danh công việc là Sales Rep
và mã văn phòng là 1:
SELECT lastname, firstname, jobtitle, officeCode FROM employees WHERE jobtitle = 'Sales Rep' AND officeCode = 1;
Kết quả:
+----------+-----------+-----------+------------+ | lastname | firstname | jobtitle | officeCode | +----------+-----------+-----------+------------+ | Jennings | Leslie | Sales Rep | 1 | | Thompson | Leslie | Sales Rep | 1 | +----------+-----------+-----------+------------+ 2 rows in set (0.00 sec)
Trong ví dụ này, biểu thức trong mệnh đề WHERE
sử dụng toán tử AND
để kết hợp hai điều kiện:
jobtitle = 'Sales Rep' AND officeCode = 1;
Toán tử AND
chỉ đánh giá là TRUE
nếu cả hai biểu thức đều đánh giá là TRUE
. Do đó, truy vấn trả về các hàng có giá trị trong cột jobTitle
là Sales Rep
và officeCode
là 1.
3) Sử dụng mệnh đề WHERE của MySQL với toán tử OR
Truy vấn này tìm nhân viên có chức danh công việc là Sales Rep
hoặc nhân viên đặt văn phòng với mã văn phòng 1:
SELECT lastName, firstName, jobTitle, officeCode FROM employees WHERE jobtitle = 'Sales Rep' OR officeCode = 1 ORDER BY officeCode , jobTitle;
Kết quả:
+-----------+-----------+--------------------+------------+ | lastName | firstName | jobTitle | officeCode | +-----------+-----------+--------------------+------------+ | Murphy | Diane | President | 1 | | Bow | Anthony | Sales Manager (NA) | 1 | | Jennings | Leslie | Sales Rep | 1 | | Thompson | Leslie | Sales Rep | 1 | | Firrelli | Jeff | VP Marketing | 1 | | Patterson | Mary | VP Sales | 1 | | Firrelli | Julie | Sales Rep | 2 | | Patterson | Steve | Sales Rep | 2 | | Tseng | Foon Yue | Sales Rep | 3 | | Vanauf | George | Sales Rep | 3 | | Bondur | Loui | Sales Rep | 4 | | Hernandez | Gerard | Sales Rep | 4 | | Castillo | Pamela | Sales Rep | 4 | | Gerard | Martin | Sales Rep | 4 | | Nishi | Mami | Sales Rep | 5 | | Kato | Yoshimi | Sales Rep | 5 | | Fixter | Andy | Sales Rep | 6 | | Marsh | Peter | Sales Rep | 6 | | King | Tom | Sales Rep | 6 | | Bott | Larry | Sales Rep | 7 | | Jones | Barry | Sales Rep | 7 | +-----------+-----------+--------------------+------------+ 21 rows in set (0.00 sec)
Toán tử OR
chỉ đánh giá là TRUE
nếu một trong các biểu thức đánh giá là TRUE
:
jobtitle = 'Sales Rep' OR officeCode = 1
Do đó, truy vấn trả về bất kỳ nhân viên nào có chức danh Công việc Đại diện Bán hàng hoặc mã văn phòng 1.
4) Sử dụng mệnh đề WHERE trong MySQL với ví dụ về toán tử BETWEEN
Toán tử BETWEEN
trả về TRUE
nếu một giá trị nằm trong một dải giá trị:
expression BETWEEN low AND high
Truy vấn sau tìm những nhân viên làm việc tại các văn phòng có mã văn phòng từ 1 đến 3:
SELECT firstName, lastName, officeCode FROM employees WHERE officeCode BETWEEN 1 AND 3 ORDER BY officeCode;|
Kết quả:
+-----------+-----------+------------+ | firstName | lastName | officeCode | +-----------+-----------+------------+ | Diane | Murphy | 1 | | Mary | Patterson | 1 | | Jeff | Firrelli | 1 | | Anthony | Bow | 1 | | Leslie | Jennings | 1 | | Leslie | Thompson | 1 | | Julie | Firrelli | 2 | | Steve | Patterson | 2 | | Foon Yue | Tseng | 3 | | George | Vanauf | 3 | +-----------+-----------+------------+ 10 rows in set (0.00 sec)
5) Sử dụng mệnh đề WHERE của MySQL với ví dụ về toán tử LIKE
Toán tử LIKE
sẽ cho kết quả là TRUE
nếu một giá trị khớp với một mẫu được chỉ định.
Để tạo một mẫu, bạn sử dụng các ký tự đại diện% và _. Ký tự đại diện% khớp với bất kỳ chuỗi nào không hoặc nhiều ký tự trong khi ký tự đại diện _ khớp với bất kỳ ký tự đơn nào.
Truy vấn sau đây tìm các nhân viên có họ kết thúc bằng chuỗi 'son'
:
SELECT firstName, lastName FROM employees WHERE lastName LIKE '%son' ORDER BY firstName;
Kết quả:
+-----------+-----------+ | firstName | lastName | +-----------+-----------+ | Leslie | Thompson | | Mary | Patterson | | Steve | Patterson | | William | Patterson | +-----------+-----------+ 4 rows in set (0.00 sec)
6) Sử dụng mệnh đề WHERE của MySQL với ví dụ về toán tử IN
Toán tử IN
trả về TRUE
nếu một giá trị khớp với bất kỳ giá trị nào trong danh sách.
value IN (value1, value2,...)
Ví dụ sau sử dụng mệnh đề WHERE
với toán tử IN
để tìm nhân viên làm việc tại văn phòng với mã văn phòng 1.
SELECT firstName, lastName, officeCode FROM employees WHERE officeCode IN (1 , 2, 3) ORDER BY officeCode;
Kết quả:
+-----------+-----------+------------+ | firstName | lastName | officeCode | +-----------+-----------+------------+ | Diane | Murphy | 1 | | Mary | Patterson | 1 | | Jeff | Firrelli | 1 | | Anthony | Bow | 1 | | Leslie | Jennings | 1 | | Leslie | Thompson | 1 | | Julie | Firrelli | 2 | | Steve | Patterson | 2 | | Foon Yue | Tseng | 3 | | George | Vanauf | 3 | +-----------+-----------+------------+ 10 rows in set (0.00 sec)
7) Sử dụng mệnh đề WHERE của MySQL với toán tử IS NULL
Để kiểm tra xem một giá trị có phải là NULL
hay không, bạn sử dụng toán tử IS NULL
, không phải toán tử bằng (=
). Toán tử IS NULL
trả về TRUE
nếu giá trị là NULL
.
value IS NULL
Trong thế giới cơ sở dữ liệu, NULL là một điểm đánh dấu cho biết rằng một giá trị bị thiếu hoặc không xác định. Và NULL không tương đương với số 0 hoặc một chuỗi rỗng.
Câu lệnh sau sử dụng mệnh đề WHERE
với toán tử IS NULL
để lấy các hàng có giá trị trong cột reportsTo
là NULL
:
SELECT lastName, firstName, reportsTo FROM employees WHERE reportsTo IS NULL;
Kết quả:
+----------+-----------+-----------+ | lastName | firstName | reportsTo | +----------+-----------+-----------+ | Murphy | Diane | NULL | +----------+-----------+-----------+ 1 row in set (0.01 sec)
8) Sử dụng mệnh đề WHERE của MySQL với các toán tử so sánh
Bảng sau đây cho thấy các toán tử so sánh mà bạn có thể sử dụng để tạo biểu thức trong mệnh đề WHERE.
Operator | Description |
---|---|
= | Bạn có thể sử dụng nó với hầu hết mọi kiểu dữ liệu. |
<> or != | Không bằng |
< | Nhỏ hơn. Bạn thường sử dụng nó với các kiểu dữ liệu số và ngày / giờ. |
> | Lớn hơn. |
<= | Nhỏ hơn hoặc bằng |
>= | Lớn hơn hoặc bằng |
Truy vấn sau sử dụng toán tử không bằng (<>) để tìm tất cả nhân viên không phải là Sales Rep
:
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle <> 'Sales Rep';
Kết quả:
+-----------+-----------+----------------------+ | lastname | firstname | jobtitle | +-----------+-----------+----------------------+ | Murphy | Diane | President | | Patterson | Mary | VP Sales | | Firrelli | Jeff | VP Marketing | | Patterson | William | Sales Manager (APAC) | | Bondur | Gerard | Sale Manager (EMEA) | | Bow | Anthony | Sales Manager (NA) | +-----------+-----------+----------------------+ 6 rows in set (0.00 sec)
Truy vấn sau đây tìm nhân viên có mã văn phòng lớn hơn 5:
SELECT lastname, firstname, officeCode FROM employees WHERE officecode > 5;
Kết quả:
+-----------+-----------+------------+ | lastname | firstname | officeCode | +-----------+-----------+------------+ | Patterson | William | 6 | | Bott | Larry | 7 | | Jones | Barry | 7 | | Fixter | Andy | 6 | | Marsh | Peter | 6 | | King | Tom | 6 | +-----------+-----------+------------+ 6 rows in set (0.00 sec)
Truy vấn sau trả về những nhân viên có mã văn phòng nhỏ hơn hoặc bằng 4 (<= 4):
SELECT lastname, firstname, officeCode FROM employees WHERE officecode <= 4;
Kết quả:
+-----------+-----------+------------+ | lastname | firstname | officeCode | +-----------+-----------+------------+ | Murphy | Diane | 1 | | Patterson | Mary | 1 | | Firrelli | Jeff | 1 | | Bondur | Gerard | 4 | | Bow | Anthony | 1 | | Jennings | Leslie | 1 | | Thompson | Leslie | 1 | | Firrelli | Julie | 2 | | Patterson | Steve | 2 | | Tseng | Foon Yue | 3 | | Vanauf | George | 3 | | Bondur | Loui | 4 | | Hernandez | Gerard | 4 | | Castillo | Pamela | 4 | | Gerard | Martin | 4 | +-----------+-----------+------------+ 15 rows in set (0.00 sec)
Tổng kết bài học
- Sử dụng mệnh đề
WHERE
để lọc các hàng theo một điều kiện. - MySQL quy định mệnh đề
WHERE
sau mệnh đềFROM
và trước mệnh đềSELECT
vàORDER BY.
Bài viết liên quan:
Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-order-by/