Mệnh đề WHERE trong MySQL

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ả.

Giới thiệu về mệnh đề WHERE trong MySQL

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, ORNOT.

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 đề SELECTORDER BY:

Mệnh đề WHERE trong MySQL

Ví dụ mệnh đề WHERE trong MySQL

Chúng ta sẽ sử dụng bảng employees từ cơ sở dữ liệu mẫu để minh họa.

Ví dụ mệnh đề WHERE trong MySQL
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 jobTitleSales Rep.

Sử dụng mệnh đề WHERE trong 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 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 jobTitleSales RepofficeCode là 1.

Sử dụng mệnh đề WHERE trong 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 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à TRUEnế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.

Sử dụng mệnh đề WHERE trong MySQL với toán tử BETWEEN

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)

Sử dụng mệnh đề WHERE trong MySQL với toán tử LIKE

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 %_. 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)

Sử dụng mệnh đề WHERE trong MySQL với toán tử IN

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)

Sử dụng mệnh đề WHERE trong MySQL với toán tử IS NULL

Để 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 reportsToNULL:

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)

Sử dụng mệnh đề WHERE trong 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.

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)

Tóm lược

  • Sử dụng mệnh đề WHERE để lọc các hàng theo một điều kiện.
  • MySQL đánh giá mệnh đề WHERE sau mệnh đề FROM và trước mệnh đề SELECTORDER BY.
MySQL
Bài Viết Liên Quan:
Toán Tử IS NULL Trong MySQL
Nụ Nguyễn 01/04/2022
Toán Tử IS NULL Trong MySQL

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.

Câu lệnh UPDATE JOIN trong MySQL
Trung Nguyen 06/03/2022
Câu lệnh UPDATE JOIN trong MySQL

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.

Mệnh đề LIMIT trong MySQL
Trung Nguyen 05/03/2022
Mệnh đề LIMIT trong MySQL

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.

Toán tử LIKE trong MySQL
Trung Nguyen 04/03/2022
Toán tử LIKE trong MySQL

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.