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ả.
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 đề WHEREsau mệnh đề FROM và trước mệnh đề SELECT và ORDER BY:

Chúng tôi sẽ sử dụng bảng employees từ cơ sở dữ liệu mẫu để thao tác.

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.
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.
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.
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)
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)
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)
Để 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)
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)
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ài viết liên quan:
Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-order-by/
Bình luận: