MySQL Mệnh đề WHERE: AND, OR, IN, NOT IN Ví dụ truy vấn
⚡ Tóm tắt thông minh
MySQL Mệnh đề WHERE lọc các hàng trước khi chúng đến tập kết quả, áp dụng các tiêu chí chính xác cho các câu lệnh SELECT, UPDATE và DELETE. Hiểu rõ các toán tử AND, OR, IN, NOT IN và các toán tử so sánh giúp người mới bắt đầu có thể truy xuất chính xác các bản ghi mà truy vấn yêu cầu.

Mệnh đề WHERE trong MySQL?
đÂU khoản in MySQL là một từ khóa được sử dụng để chỉ định tiêu chí chính xác của dữ liệu hoặc các hàng sẽ bị ảnh hưởng bởi câu lệnh SQL được chỉ định. Mệnh đề WHERE có thể được sử dụng với các câu lệnh SQL như INSERT, UPDATE, SELECT và DELETE để lọc các bản ghi và thực hiện nhiều thao tác khác nhau trên dữ liệu.
Chúng tôi đã xem xét cách truy vấn dữ liệu từ một cơ sở dữ liệu bằng cách sử dụng câu lệnh SELECT trong hướng dẫn trước. Câu lệnh SELECT trả về tất cả kết quả từ bảng cơ sở dữ liệu được truy vấn.
Tuy nhiên, đôi khi chúng ta muốn giới hạn kết quả truy vấn theo một điều kiện cụ thể. Mệnh đề WHERE trong SQL rất hữu ích trong những trường hợp như vậy, và nó hoạt động tương tự trong... Truy vấn DELETE hoặc UPDATE như trong truy vấn SELECT.
Cú pháp mệnh đề WHERE
Cú pháp cơ bản của mệnh đề WHERE như sau.
SELECT * FROM tableName WHERE condition;
tại ĐÂY
- “CHỌN * TỪ tên bảng” là tiêu chuẩn Câu lệnh SELECT
- "Ở ĐÂU" là từ khóa giới hạn tập hợp kết quả, và "tình trạng" Bộ lọc được áp dụng cho kết quả là một phạm vi, một giá trị đơn lẻ hoặc một truy vấn con.
Giả sử chúng ta muốn lấy thông tin chi tiết của một thành viên từ bảng thành viên, với số thành viên là 1. Đoạn mã dưới đây thực hiện điều đó.
SELECT * FROM `members` WHERE `membership_number` = 1;
Thực thi đoạn mã này trong MySQL bàn làm việc Khi tìm kiếm trên “myflixdb”, kết quả hiển thị như bên dưới.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Hiếm khi chỉ một điều kiện là đủ. Các phần bên dưới kết hợp mệnh đề WHERE với toán tử logic.
Mệnh đề WHERE kết hợp với – VÀ HỢP LÝ Operator
Với toán tử logic AND, một hàng chỉ được trả về nếu TẤT CẢ các tiêu chí được chỉ định đều được đáp ứng.
Giả sử chúng ta muốn tất cả các bộ phim thuộc thể loại 2 được phát hành năm 2008. Đoạn mã dưới đây sẽ thực hiện điều đó.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Thực thi đoạn mã trên đối với cơ sở dữ liệu “myflixdb” sẽ cho ra kết quả sau.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Công thức AND thu hẹp tập kết quả. Công thức OR mở rộng tập kết quả.
Mệnh đề WHERE kết hợp với – OR HỢP LÝ Operator
Với toán tử OR, một hàng sẽ được trả về nếu BẤT KỲ tiêu chí nào được chỉ định được đáp ứng.
Đoạn mã sau đây sẽ lấy tất cả các phim thuộc thể loại 1 hoặc thể loại 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Tập hợp kết quả được hiển thị bên dưới.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Việc kết hợp nhiều điều kiện OR với nhau sẽ khiến mã khó đọc. Từ khóa IN giải quyết vấn đề đó.
Mệnh đề WHERE kết hợp với – IN Từ khóa
Mệnh đề WHERE, khi được sử dụng với từ khóa IN, chỉ ảnh hưởng đến các hàng có giá trị khớp với danh sách được cung cấp. IN giúp giảm số lượng mệnh đề OR mà bạn thường phải viết.
Sau đây MySQL Truy vấn WHERE IN trả về các hàng có membership_number bằng 1, 2 hoặc 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Tập hợp kết quả được hiển thị bên dưới.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
Lệnh NOT IN thực hiện bộ lọc ngược lại.
Mệnh đề WHERE kết hợp với – KHÔNG VÀO Từ khóa
Với từ khóa NOT IN, mệnh đề WHERE loại trừ mọi hàng có giá trị trùng khớp với danh sách được cung cấp.
Truy vấn sau đây trả về các hàng có membership_number KHÔNG phải là 1, 2 hoặc 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Tập hợp kết quả được hiển thị bên dưới.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
Lệnh WHERE cũng lọc các giá trị theo kích thước và sự bằng nhau, sử dụng các toán tử so sánh.
Mệnh đề WHERE kết hợp với – SO SÁNH Operaxoắn
Các toán tử so sánh nhỏ hơn (<), bằng (=), lớn hơn (>) và không bằng (<>) đều có thể được sử dụng với mệnh đề WHERE.
= Tương đương với
Đoạn mã sau đây lấy tất cả các thành viên nữ từ bảng thành viên bằng cách sử dụng toán tử so sánh bằng.
SELECT * FROM `members` WHERE `gender` = 'Female';
Tập hợp kết quả được hiển thị bên dưới.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Lớn hơn
Đoạn mã sau đây sẽ lấy tất cả các khoản thanh toán lớn hơn 2,000 từ bảng thanh toán.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Tập hợp kết quả được hiển thị bên dưới.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
Không bằng
Đoạn mã sau sẽ lấy tất cả các phim có ID danh mục không phải là 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Tập hợp kết quả được hiển thị bên dưới.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Tham khảo nhanh: Mệnh đề WHERE Operaxoắn
Các toán tử thường được ghép nối với WHERE được tóm tắt dưới đây. Định nghĩa đầy đủ có trong phần tiếp theo. MySQL tham chiếu người vận hành.
| Operator | Ý nghĩa | Ví dụ về điều kiện |
|---|---|---|
| = | Tương đương với | `giới tính` = 'Nữ' |
| <> | Không bằng | `category_id` <> 1 |
| > / | Lớn hơn / nhỏ hơn | `amount_paid` > 2000 |
| VÀ / HOẶC | Tất cả các tiêu chí / bất kỳ tiêu chí nào | `category_id` = 2 VÀ `year_released` = 2008 |
| TRONG / KHÔNG TRONG | Phù hợp / loại trừ một danh sách | `membership_number` IN (1,2,3) |
| IS NULL / IS NOT NULL | Kiểm tra các giá trị bị thiếu | `postal_address` IS NULL |
⚠️ Lưu ý: Giá trị NULL không bao giờ khớp với dấu = hoặc <>. Hãy sử dụng IS NULL hoặc IS NOT NULL khi một cột có thể không chứa giá trị nào.
Câu đố hóc búa: Tìm những bộ phim được trả muộn
Giả sử chúng ta muốn tìm những bộ phim đã thuê nhưng chưa được trả lại trước ngày 25/06/2012. Kết hợp mệnh đề WHERE với toán tử nhỏ hơn và toán tử AND sẽ thực hiện được điều đó.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Thực thi đoạn script trên trong MySQL workbench đưa ra kết quả sau.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

