Trong bài viết này, chúng ta sẽ nói về WHERE
và cách sử dụng nó trong MySQL. Bên cạnh SELECT
, phạm vi của WHERE
mệnh đề bao gồm UPDATE
và DELETE
các câu lệnh. WHERE
điều khoản không thể thiếu để làm việc chất lượng với cơ sở dữ liệu MySQL. Đó là lý do tại sao bài viết hiện tại sẽ đề cập đến điều khoản này và khám phá chuyên sâu các đặc điểm phân biệt của nó.
Khi chúng ta xử lý MySQL, chúng ta cần các mệnh đề điều kiện cho các câu lệnh SELECT trong phần lớn các trường hợp. Các điều khoản như vậy xác định tiêu chí lựa chọn, vì vậy chúng tôi chỉ nhận được dữ liệu chúng tôi cần.
MySQL WHERE
mệnh đề là phương tiện lọc kết quả hữu ích nhất. Nó linh hoạt, cho phép người dùng chỉ định các điều kiện khác nhau cho việc lựa chọn dữ liệu và kết hợp một số điều kiện trong một câu lệnh. Để làm cho thói quen làm việc hàng ngày của bạn trở nên dễ chịu hơn, tốt hơn hết là bạn nên sử dụng tối ưu hóa truy vấn và cấu hình MySQL.
Nội dung
- Cú pháp MySQL WHERE
- Sử dụng WHERE trong MySQL
- Ví dụ về truy vấn điều kiện đơn WHERE
- Nhiều điều kiện WHERE
- Toán tử WHERE VÀ
- Toán tử WHERE HOẶC
- Sử dụng AND với các điều kiện OR
- WHERE GIỮA toán tử
- Toán tử WHERE LIKE
- Ví dụ WHERE NOT LIKE
- Toán tử WHERE IN
- Ví dụ WHERE NOT IN
- Toán tử NULL LÀ ĐÂU
- Ví dụ WHERE IS NOT NULL
- Ở ĐÂU KHÔNG TỒN TẠI
- TỒN TẠI TẠI ĐÂU
- Sử dụng mệnh đề WHERE của MySQL với các toán tử so sánh
- Tóm tắt
Cú pháp WHERE của MySQL
Để bắt đầu, hãy xem xét kỹ hơn bằng cách sử dụng WHERE
trong SELECT
tuyên bố. Cú pháp cơ bản như sau:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
là câu lệnh chuẩn xác định cột nào và bảng nào chúng ta nhắm mục tiêu. WHERE
từ khóa xác định các tiêu chí lựa chọn dữ liệu. Có thể có một giá trị duy nhất, phạm vi giữa các giá trị, truy vấn con và nhiều hơn một điều kiện.
Tự động hóa công việc của bạn với các tiêu chí truy vấn. Xem và chỉnh sửa trực quan chúng trên các tab riêng biệt của hình ảnh của chúng tôi Công cụ truy vấn MySQL nơi bạn đang vẽ truy vấn của mình. Bạn không cần phải nhập tên của các cột hoặc ghi nhớ các quy tắc phức tạp. Chỉ cần chọn dữ liệu cần thiết từ danh sách và tận hưởng kết quả.
Sử dụng WHERE trong MySQL
MySQL hoạt động theo cách sau khi thực thi SELECT
câu lệnh chứa WHERE
mệnh đề:
- Đánh giá
FROM
mệnh đề để xác định bảng mục tiêu. - Tiếp tục đến
WHERE
để đánh giá các tiêu chí lựa chọn dữ liệu. - Kiểm tra
SELECT
câu lệnh để xác định các cột cần truy xuất.
Lưu ý :SELECT
câu lệnh thường bao gồm ORDER BY
mệnh đề đặt kết quả theo thứ tự tăng dần hoặc giảm dần. Nếu vậy, MySQL sẽ đánh giá nó cuối cùng.
Nguyên lý hoạt động của MySQL WHERE
tương tự như IF
điều kiện trong ngôn ngữ lập trình. Nó so sánh các giá trị chúng tôi cung cấp với các giá trị của bảng MySQL đích. Khi các giá trị này khớp, RDBMS tìm nạp các bản ghi đó cho người dùng.
Khi điều kiện cho WHERE
mệnh đề là một giá trị văn bản, chúng tôi đặt văn bản đó vào các dấu ngoặc kép. Tuy nhiên, không cần dấu ngoặc kép cho các giá trị số.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Nâng cấp khả năng viết kịch bản của bạn với trình định dạng MySQL nâng cao cho phép làm đẹp mã của bạn để mã của bạn chính xác như bạn muốn.
Bây giờ, chúng ta hãy xem lại việc sử dụng WHERE
mệnh đề. Nó liên quan đến nhiều trường hợp cụ thể. Cách tốt nhất để khám phá chúng là tham khảo một MySQL thực tế WHERE
ví dụ cho từng tình huống.
Ví dụ về truy vấn điều kiện duy nhất của WHERE
Kịch bản đơn giản nhất của việc sử dụng mệnh đề này là MySQL WHERE
có một tiêu chí duy nhất cho việc lựa chọn dữ liệu. Giả sử rằng một số công ty muốn truy xuất danh sách nhân viên của họ làm việc trong bộ phận Chăm sóc khách hàng với tư cách là người quản lý hỗ trợ:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
Truy vấn sẽ truy xuất dữ liệu từ nhân viên bảng và lọc các bản ghi theo giá trị trong job_title cột. Nó sẽ trả về danh sách tất cả họ và tên của tất cả nhân viên làm việc với tư cách là người quản lý hỗ trợ. Kết quả là bên dưới:
last_name | first_name | job_title |
Cáo | Mary | Hỗ trợ |
Đen | John | Hỗ trợ |
Johnson | Steve | Hỗ trợ |
Hudson | Diana | Hỗ trợ |
Williams | Katie | Hỗ trợ |
Màu xanh lá cây | Jake | Hỗ trợ |
Lưu ý :Сode ít hơn và hoàn thành nhiều hơn với trình kiểm tra cú pháp MySQL. dbForge Studio cho MySQL là một IDE giàu tính năng được thiết kế để hỗ trợ phát triển, bảo trì và quản trị cơ sở dữ liệu MySQL và MariaDB.
Nhiều điều kiện WHERE
Ví dụ được cung cấp ở trên chứng minh rằng MySQL WHERE
mệnh đề mang dữ liệu phù hợp với điều kiện. Trong trường hợp này, nó lọc tất cả những nhân viên có chức danh công việc được chỉ định. Tuy nhiên, chúng ta thường cần thiết lập một số tiêu chí để truy xuất dữ liệu. Nó là khả thi - chúng ta cần áp dụng MySQL WHERE
với các toán tử cụ thể - AND
toán tử và OR
nhà điều hành.
Toán tử WHERE VÀ
Hãy làm cho ví dụ trước của chúng ta phức tạp hơn một chút. Chúng tôi muốn có danh sách các nhân viên làm việc trong bộ phận Hỗ trợ, được thuê vào năm ngoái.
Để đạt được điều đó, chúng tôi sẽ đặt hai điều kiện và hợp nhất chúng với AND
toán tử logic:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
Đầu ra:
last_name | first_name | job_title | Rent_year |
Cáo | Mary | Hỗ trợ | 2021 |
Đen | John | Hỗ trợ | 2021 |
Johnson | Steve | Hỗ trợ | 2021 |
Bản thân việc viết mã chiếm tỷ trọng của sư tử trong tổng thời gian bạn dành cho việc phát triển và quản trị cơ sở dữ liệu. Nhân đôi tốc độ viết mã của bạn với trình chỉnh sửa mã MySQL Server được tinh chỉnh và tối ưu hóa đi kèm với dbForge Studio cho MySQL.
Toán tử WHERE HOẶC
Sử dụng OR
toán tử logic là một phương pháp khác làm việc với một số điều kiện trong MySQL WHERE
mệnh đề. Nếu chúng tôi gửi truy vấn này, nó sẽ trả về dữ liệu phù hợp với tiêu chí chúng tôi đặt ra.
Công ty muốn kiểm tra các khách hàng thường xuyên đến từ hai thành phố. Đối với điều đó, chúng tôi sẽ chỉ định các thành phố đó và sử dụng OR
nhà điều hành.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
last_name | first_name | thành phố |
Anderson | Mary | Seattle |
Đen | John | Seattle |
Thompson | Steve | Bellevue |
Smith | Diana | Bellevue |
Williams | Katie | Seattle |
Peters | Jake | Seattle |
Sử dụng AND với điều kiện HOẶC
MySQL cho phép kết hợp MySQL WHERE AND OR
- cả hai toán tử logic đều có thể có trong một câu lệnh. Trong trường hợp này, MySQL sẽ kiểm tra ba điều kiện cùng một lúc.
Ví dụ:thư viện muốn nhận thông tin về những độc giả của mình cư trú ở Bellevue, người đã trở thành độc giả thường xuyên của thư viện vào năm 2021 hoặc đã đọc hơn 20 cuốn sách.
Trong trường hợp này, MySQL WHERE
chuỗi trở nên phức tạp hơn. Để phù hợp và sắp xếp AND
&OR
điều kiện, chúng tôi sử dụng dấu ngoặc đơn để xác định cách MySQL phải đánh giá chúng.
Hãy xem ví dụ dưới đây:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
Đầu ra:
last_name | first_name | thành phố | reg_year | books_read |
Anderson | Mary | Seattle | 2021 | 25 |
Jones | Chris | Bellevue | 2020 | 12 |
Thompson | Lora | Seattle | 2020 | 35 |
Farrell | Brian | Bellevue | 2021 | 48 |
Smith | Jeff | Bellevue | 2020 | 50 |
Peters | Anna | Bellevue | 2020 | 10 |
Patterson | John | Bellevue | 2020 | 11 |
Kết quả này hiển thị một số kết quả phù hợp với điều kiện của thành phố cư trú + năm đăng ký. Nó cũng bao gồm các kết quả phù hợp với điều kiện thứ hai là đã đọc hơn 20 cuốn sách.
WHERE GIỮA toán tử
Toán tử GIỮA cho phép thiết lập các giới hạn rộng hơn. Giả sử rằng thư viện muốn nhận danh sách độc giả đã tham gia vào các năm 2019, 2020 và 2021. Thay vì gửi một số truy vấn hoặc sử dụng AND
, chúng ta có thể đặt phạm vi cho WHERE
điều kiện sử dụng BETWEEN
nhà điều hành.
Để truy xuất danh sách độc giả tham gia từ năm 2019 đến năm 2022, chúng tôi gửi truy vấn sau:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
Đầu ra:
last_name | first_name | reg_year |
Anderson | Mary | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrell | Brian | 2019 |
Smith | Jeff | 2020 |
Peters | Anna | 2020 |
Patterson | John | 2020 |
Williams | Đánh dấu | 2021 |
Đi bộ đường dài | Andrew | 2021 |
Cấp | Valentina | 2021 |
Toán tử WHERE LIKE
Việc áp dụng toán tử LIKE cho phép bạn sử dụng mệnh đề WHERE để chọn các bản ghi nhất định bao gồm một mẫu cụ thể. Để xác định mẫu đó, chúng tôi sử dụng dấu phần trăm (%) để thay thế một ký tự hoặc một chuỗi gồm một số ký tự có độ dài bất kỳ.
Các mẫu phổ biến nhất cho MySQL SELECT WHERE LIKE
như sau:
WHERE
giá trị LIKE 'abc%
‘- tìm và trả về tất cả các giá trị bắt đầu bằng“ abc ”
WHERE
giá trị LIKE '%abc'
- tìm và trả về tất cả các giá trị kết thúc bằng “abc”
WHERE
giá trị LIKE '%abc%'
- tìm và trả về các giá trị có “abc” ở bất kỳ đâu giữa đầu và cuối
Hãy xem WHERE LIKE
ví dụ. Công ty muốn có được danh sách khách hàng của mình từ Mỹ và Anh. Truy vấn như sau:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
Đầu ra là:
Tên liên hệ | Quốc gia | Thành phố |
Helen Bennett | Vương quốc Anh | Bò |
Simon Crowther | Vương quốc Anh | Luân Đôn |
Hari Kumar | Vương quốc Anh | Luân Đôn |
Howard Snyder | Hoa Kỳ | Eugene |
Yoshi Latimer | Hoa Kỳ | Elgin |
John Steel | Hoa Kỳ | Walla Walla |
Jaime Torres | Hoa Kỳ | San Francisco |
Fran Wilson | Hoa Kỳ | Portland |
Ví dụ WHERE NOT LIKE
Có một trường hợp khác mà bạn cần loại trừ một số dữ liệu khỏi kết quả. Chúng ta có thể sử dụng MySQL WHERE NOT LIKE
nhà điều hành. Nó tìm và trả về dữ liệu không có các ký tự cụ thể.
Công ty muốn có một danh sách khách hàng của mình từ tất cả các quốc gia ngoại trừ Anh và Mỹ. Cú pháp của WHERE NOT LIKE
trong MySQL sẽ như sau:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
Đầu ra:
Tên liên hệ | Quốc gia | Thành phố |
Roland Mendel | Áo | Graz |
Georg Pipps | Áo | Salzburg |
Catherine Dewey | Bỉ | Bruxelles |
Pascale Cartrain | Bỉ | Charleroi |
Elizabeth Lincoln | Canada | Tsawassen |
Yoshi Tannamuri | Canada | Vancouver |
Jean Fresnière | Canada | Montréal |
Jytte Petersen | Đan Mạch | København |
Palle Ibsen | Đan Mạch | Århus |
Pirkko Koskitalo | Phần Lan | Oulu |
Matti Karttunen | Phần Lan | Helsinki |
Annette Roulet | Pháp | Toulouse |
Marie Bertrand | Pháp | Paris |
Maria Anders | Đức | Berlin |
Hanna Mooss | Đức | Mannheim |
Toán tử WHERE IN
Sử dụng IN
và NOT IN
từ khóa là một tùy chọn khác để lọc các hàng và chỉ lấy một phần dữ liệu phù hợp với tiêu chí nghiêm ngặt của chúng tôi. Mục đích chính là giảm số lượng OR
mệnh đề trong một SELECT
tuyên bố.
MySQL WHERE IN
kháng cáo các hàng chứa các giá trị mà chúng tôi đã chỉ định cho WHERE
điều kiện. Ví dụ:chúng tôi muốn truy xuất danh sách khách hàng cư trú ở một số quốc gia Châu Âu. WHERE IN
cú pháp như sau trong MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Xin lưu ý rằng chúng tôi đặt các giá trị chỉ định điều kiện tìm kiếm trong ngoặc đơn. Trong trường hợp làm việc với các giá trị văn bản, chúng ta phải đặt tất cả chúng vào các dấu nháy đơn. Tuy nhiên, nếu giá trị và số của chúng tôi, chúng tôi sẽ liệt kê chúng mà không có dấu ngoặc kép, ví dụ:(25, 35, 45).
Kết quả của MySQL ở trên WHERE IN
mệnh đề trong SELECT
tuyên bố là:
Tên liên hệ | Quốc gia | Thành phố |
Catherine Dewey | Bỉ | Bruxelles |
Pascale Cartrain | Bỉ | Charleroi |
Frédérique Citeaux | Pháp | Strasbourg |
Laurence Lebihans | Pháp | Marseille |
Janine Labrune | Pháp | Nantes |
Martine Rancé | Pháp | Chữ nổi |
Alexander Feuer | Đức | Leipzig |
Henriette Pfalzheim | Đức | Köln |
Horst Kloss | Đức | Cunewalde |
Karin Josephs | Đức | Münster |
Rita Müller | Đức | Stuttgart |
Thomas Hardy | Vương quốc Anh | Luân Đôn |
Victoria Ashworth | Vương quốc Anh | Luân Đôn |
Elizabeth Brown | Vương quốc Anh | Manchester |
Ann Devon | Vương quốc Anh | Luân Đôn |
Ví dụ WHERE NOT IN
Trường hợp ngược lại là MySQL WHERE NOT IN
mệnh đề. Nó được sử dụng để đảm bảo rằng truy vấn của bạn sẽ bỏ qua những hàng có chứa các giá trị được chỉ định cho điều kiện. Trong ví dụ trên, chúng tôi đã yêu cầu khách hàng từ 4 quốc gia châu Âu xác định. MySQL WHERE NOT IN
SELECT
truy vấn cho cùng một yêu cầu sẽ trả về tất cả khách hàng cư trú ở các quốc gia khác ngoại trừ 4 khách hàng được xác định trước đó.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Đầu ra:
Tên liên hệ | Quốc gia | Thành phố |
Patricio Simpson | Argentina | Buenos Aires |
Sergio Gutiérrez | Argentina | Buenos Aires |
Brian Citeaux | Canada | Montréal |
Laura Smith | Canada | Toronto |
Jane Green | Canada | Toronto |
Martine Rancé | Canada | Vancouver |
Alexander Feuer | Canada | Århus |
Paolo Accorti | Ý | Rome |
Giovanni Rovelli | Ý | Torino |
Anna Moroni | Ý | Pavia |
Lưu ý :Chúng tôi khuyên bạn nên sử dụng [NOT] EXISTS
trên [NOT] IN
kể từ EXISTS
toán tử logic hoạt động nhanh hơn IN
, khi so sánh các tập dữ liệu bằng truy vấn con. Hơn nữa, NOT EXISTS
sẽ tránh kết quả không mong muốn khi dữ liệu nguồn chứa NULL
giá trị.
WHERE IS NULL toán tử
Để kiểm tra xem một giá trị có phải là NULL
không hoặc không, hãy sử dụng IS NULL
nhà điều hành. Câu lệnh sau sử dụng WHERE
mệnh đề với IS NULL
toán tử để lấy các hàng không có giá trị trong books_read
cột:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
Đầu ra sẽ như thế này:
last_name | first_name | reg_year | books_read |
Janett | Overacker | 2020 | NULL |
Lidia | Swenson | 2017 | NULL |
Albert | Crepeau | 2018 | NULL |
Anastasia | Johnson | 2021 | NULL |
Sẽ | Smith | 2017 | NULL |
Ví dụ WHERE IS NOT NULL
Không giống như lệnh trước, WHERE IS NOT NULL
, ngược lại, chỉ hiển thị những hàng có chứa một số loại giá trị trong cột được đề cập. Trong ví dụ sau, chúng tôi sẽ chỉ chọn những hàng có books_read cột không trống:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
Trong đầu ra, bạn sẽ chỉ thấy những hàng chứa giá trị trong books_read cột:
last_name | first_name | reg_year | books_read |
Cory | Baster | 2021 | 8 |
Maddison | Winston | 2022 | 3 |
Isabella | Garsia | 2014 | 45 |
Jeremy | Koh | 2022 | 1 |
Aaron | Peterson | 2021 | 15 |
WHERE EXISTS
EXISTS
operator checks if the subquery returns any value at all. Typically, this operator is used to indicate that at least one row in a table satisfies a certain condition.
In the example below,
SELECT last_name, first_name
FROM customers
WHERE EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
WHERE NOT EXISTS
However, the NOT EXISTS
operator is there for us in case we want to make sure whether there are rows in the table that do not satisfy a certain condition. For example, let’s find all products from the Products table for which there were no orders in the Orders table:
SELECT last_name, first_name
FROM customers
WHERE NOT EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
There is a separate article in our blog for those willing to learn more about the difference between EXISTS and NOT EXISTS in SQL.
Using MySQL WHERE clause with comparison operators
As we know, the WHERE
condition value can be any number, text, string, or subquery. Besides specifying the condition strictly, we can set a wider meaning for it by using the comparison operators. One example of a similar function is using the BETWEEN
nhà điều hành. Now, let us review other options to set the condition range.
Operator | Description | Example |
= | Equal to the value. It is applicable for almost any data type. | SELECT * FROM VisitorsWHERE City =’London’; |
<> or != | Not equal to. It excludes the rows matching the value from the results. | SELECT * FROM CustomersWHERE Country=’Germany’ AND City !=’Berlin’; |
< | Less than. Mostly applies to numbers and date/time. | SELECT * FROM CustomersWHERE CustomerID <7; |
> | Greater than. Works in the same way, for numeric values and date/time. | SELECT * FROM CustomersWHERE CustomerID> 10; |
<= | Less than or equal to. The results set includes the rows with the same values or less than the condition value. | SELECT * FROM CustomersWHERE CustomerID <=5; |
>= | Greater than or equal to. The result set includes rows having the same values exceeding the condition values. | SELECT * FROM CustomersWHERE CustomerID>=55; |
In our example, we want to retrieve the list of customers with a customer ID lower than 90 who reside in the USA. The query is the following:
SELECT CustomerID, ContactName, City, Country
FROM Customers
WHERE CustomerID < 90 AND Country ='USA';
The output is:
CustomerID | ContactName | City | Country |
65 | Paula Wilson | Albuquerque | USA |
55 | Rene Phillips | Anchorage | USA |
78 | Liu Wong | Butte | USA |
36 | Yoshi Latimer | Elgin | USA |
32 | Howard Snyder | Eugene | USA |
82 | Helvetius Nagy | Kirkland | USA |
48 | Fran Wilson | Portland | USA |
77 | Liz Nixon | Portland | USA |
45 | Jaime Torres | San Francisco | USA |
89 | Karl Jablonski | Seattle | USA |
55 | Rene Phillips | Anchorage | USA |
Tóm tắt
As you see, MySQL WHERE
is among the most helpful clauses for all MySQL users. The variety of different logical operators lets you focus on the specific portion of data only, filter it correctly, and receive the results you need. Besides, modern professional tools for MySQL databases allow you to perform all tasks faster and easier. They take the burden of manual routines off your shoulders and make the performance much more stable and reliable. To sum up, working with a WHERE
statement is not too complicated. However, it requires being familiar with the corresponding commands. The command-line tools are more oriented toward experienced tech-savvy users. On the contrary, dbForge Studio for MySQL can boast an intuitive graphical interface. The intelligent code completion feature will be of use while working with the WHERE
clause, navigating the code, obtaining quick object information, and instantly performing syntax checks. Moreover, dbForge Query Builder will be of use to easily build WHERE
clauses visually.
Useful Links
- Joins in MySQL
- MySQL update query