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ục đích cốt lõi: Mệnh đề WHERE giới hạn các hàng mà câu lệnh tác động đến, do đó SELECT, UPDATE và DELETE chỉ ảnh hưởng đến các hàng khớp với mệnh đề này.
  • 🔗 VÀ Operator: Các hàng chỉ được trả về khi mọi điều kiện đều đúng, thu hẹp tập kết quả.
  • 🔀 OR Operator: Các hàng được trả về khi bất kỳ điều kiện nào được đánh giá là đúng, làm mở rộng tập kết quả.
  • 📋 Ở TRONG và KHÔNG Ở TRONG: Từ khóa IN khớp với một danh sách các giá trị trong một biểu thức, trong khi NOT IN loại trừ danh sách đó.
  • ⚖️ sự so sánh Operator: Bằng (=), lớn hơn (>), nhỏ hơn (<) và không bằng (<>) dùng để lọc các cột số, văn bản và ngày tháng.
  • ⚠️ Xử lý giá trị NULL: NULL không bao giờ khớp với = hoặc <>, vì vậy cần sử dụng IS NULL và IS NOT NULL để kiểm tra các giá trị bị thiế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.

mệnh đề WHERE trong MySQL

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 email
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 – 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 email
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 email
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 email
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

Câu Hỏi Thường Gặp

WHERE lọc các hàng riêng lẻ trước khi nhóm lại.pingVì vậy, nó không thể tham chiếu đến các hàm tổng hợp. Bộ lọc HAVING nhóm các nhóm sau khi GROUP BY chạy, khiến nó trở thành nơi thích hợp cho các điều kiện như COUNT(*) > 5.

Sử dụng IS NULL hoặc IS NOT NULL. OperaCác toán tử như = và <> trả về giá trị không xác định cho NULL, vì vậy `postal_address` = NULL không khớp với gì, trong khi `postal_address` IS NULL thì hoạt động.

Đúng vậy, khi cột được lọc được lập chỉ mục. MySQL Chỉ đọc các hàng khớp thay vì quét toàn bộ bảng. (Bao bọc)ping Một cột trong hàm, chẳng hạn như YEAR(`date_of_birth`) = 1980, sẽ ngăn cản việc sử dụng chỉ mục.

Đúng vậy. Trợ lý AI chuyển đổi tiếng Anh thông thường thành SQL, và MySQL Workbench có thể chạy kết quả. RevHãy xem xét mọi điều kiện so với lược đồ của bạn, vì mô hình có thể tự đặt tên cột.

Hãy kiểm tra nó với câu lệnh SELECT trước. Một mệnh đề WHERE sai trên... Truy vấn DELETE hoặc UPDATE Có thể thay đổi mọi hàng. Xem trước các hàng khớp, sau đó sử dụng lại điều kiện tương tự để ghi.

Tóm tắt bài viết này với: