Trong hướng dẫn này, bạn sẽ học cách sử dụng mệnh đề WHERE
trong câu lệnh SELECT
trong MySQL để lọc các hàng từ tập kết quả.
Mệnh đề WHERE
cho phép bạn chỉ định điều kiện tìm kiếm cho các hàng đượ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;
Trong đó search_condition
là sự kết hợp của một hoặc nhiều biểu thức sử dụng toán tử logic AND
, OR
và NOT
.
Trong MySQL, mỗi condition
là một biểu thức boolean trả về 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 search_condition
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 những hàng nào cần cập nhật hoặc xóa.
Khi thực hiện một câu lệnh SELECT
với một mệnh đề WHERE
, MySQL đánh giá mệnh đề WHERE
sau mệnh đề FROM
và trước mệnh đề SELECT
và ORDER BY
:
Chúng ta sẽ sử dụng bảng employees
từ cơ sở dữ liệu mẫu để minh họa.
SELECT
lastname,
firstname,
jobtitle
FROM
employees
WHERE
jobtitle = 'Sales Rep';
Đầu ra:
+-----------+-----------+-----------+
| 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
.
Ví dụ sau sử dụng mệnh đề WHERE
để tìm nhân viên có chức danh Sales Rep
và mã văn phòng là 1:
SELECT
lastname,
firstname,
jobtitle,
officeCode
FROM
employees
WHERE
jobtitle = 'Sales Rep' AND
officeCode = 1;
Đầu ra:
+----------+-----------+-----------+------------+
| 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
đánh giá là TRUE
nếu cả hai biểu thức được đá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.
Truy vấn này tìm nhân viên có chức danh công việc Sales Rep
hoặc nhân viên có mã văn phòng là 1:
SELECT
lastName,
firstName,
jobTitle,
officeCode
FROM
employees
WHERE
jobtitle = 'Sales Rep' OR
officeCode = 1
ORDER BY
officeCode ,
jobTitle;
Đầu ra:
+-----------+-----------+--------------------+------------+
| 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ử chỉ OR
đánh giá là TRUE
nếu một trong các biểu thức đượ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 là Sales Rep
hoặc có mã văn phòng 1.
Toán tử BETWEEN
đánh giá là 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 đây 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;
Đầu ra:
+-----------+-----------+------------+
| 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)
Toán tử LIKE
đánh giá là TRUE
nếu một giá trị có khớp với một mẫu được chỉ định hay không.
Để tạo một mẫu, bạn sử dụng 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 tìm những 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;
Đầu ra:
+-----------+-----------+
| firstName | lastName |
+-----------+-----------+
| Leslie | Thompson |
| Mary | Patterson |
| Steve | Patterson |
| William | Patterson |
+-----------+-----------+
4 rows in set (0.00 sec)
Toán tử IN
đánh giá là 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, 2, 3.
SELECT
firstName,
lastName,
officeCode
FROM
employees
WHERE
officeCode IN (1 , 2, 3)
ORDER BY
officeCode;
Đầu ra:
+-----------+-----------+------------+
| 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)
Để kiểm tra xem một giá trị có 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 một 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. 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;
Đầu ra:
+----------+-----------+-----------+
| lastName | firstName | reportsTo |
+----------+-----------+-----------+
| Murphy | Diane | NULL |
+----------+-----------+-----------+
1 row in set (0.01 sec)
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
.
Toán Tử | Mô Tả |
---|---|
= | Tương đương với. Bạn có thể sử dụng nó với hầu hết mọi kiểu dữ liệu. |
<> hoặc != | Không bằng |
< | Bé 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. |
<= | Bé 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';
Đầu ra:
+-----------+-----------+----------------------+
| 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;
Đầu ra:
+-----------+-----------+------------+
| 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;
Đầu ra:
+-----------+-----------+------------+
| 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)
WHERE
để lọc các hàng theo một điều kiện.WHERE
sau mệnh đề FROM
và trước mệnh đề SELECT
và ORDER BY
.Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử MySQL IS NULLđể kiểm tra xem một giá trị có NULL hay không.
Trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh UPDATE JOIN trong MySQL để thực hiện cập nhật bảng chéo.
Trong hướng dẫn này, bạn sẽ học cách sử dụng mệnh đề LIMIT trong MySQL để hạn chế số hàng được trả về bởi một truy vấn.
Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử LIKE trong MySQL để truy vấn dữ liệu dựa trên một mẫu được chỉ định.