Code Tu Tam

Sử dụng Where trong Mysql / Mariadb như thế nào?

Rate this post

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ử ANDOR , hoặc  NOT.

Trong MySQL, một vị từ là một biểu thức Boolean đánh giá là  TRUEFALSE, 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 đề SELECTORDER 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  jobTitleSales 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

Bài viết liên quan:

Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-order-by/

Exit mobile version