В тази статия ще говорим за WHERE
клауза и как да я използвате в MySQL. Освен SELECT
, обхвата на WHERE
клаузата включва UPDATE
и DELETE
изявления. WHERE
клаузата е незаменима за качествена работа с MySQL бази данни. Ето защо настоящата статия ще се занимава с тази клауза и ще проучи задълбочено отличителните й характеристики.
Когато работим с MySQL, имаме нужда от условни клаузи за операторите SELECT в абсолютното мнозинство от случаите. Такива клаузи определят критериите за подбор, така че получаваме само данните, от които се нуждаем.
MySQL WHERE
клаузата е най-удобното средство за филтриране на резултатите. Той е гъвкав, позволявайки на потребителите да задават различни условия за избор на данни и да комбинират няколко условия в едно изявление. За да направите ежедневната си работна рутина още по-приятна, винаги е по-добре да прибягвате до MySQL профилиране и оптимизиране на заявки.
Съдържание
- Синтаксис WHERE на MySQL
- Използване на WHERE в MySQL
- Пример на заявка WHERE с едно условие
- Множество WHERE условия
- КЪДЕ И оператор
- Оператор WHERE OR
- Използване на И с условия ИЛИ
- Оператор WHERE BETWEEN
- оператор WHERE LIKE
- КЪДЕ НЕ КАТО пример
- оператор WHERE IN
- КЪДЕ НЕ В пример
- Оператор WHERE IS NULL
- Пример WHERE IS NOT NULL
- КЪДЕ НЕ СЪЩЕСТВУВА
- КЪДЕ СЪЩЕСТВУВА
- Използване на клауза WHERE на MySQL с оператори за сравнение
- Резюме
синтаксис на MySQL WHERE
Като начало, нека разгледаме по-отблизо използването на WHERE
в SELECT
изявление. Основният синтаксис е следният:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
е стандартният израз, определящ кои колони и коя таблица сме насочени. WHERE
ключова дума идентифицира критериите за избор на данни. Може да има една стойност, диапазонът между стойностите, подзаявката и повече от едно условие.
Автоматизирайте работата си с критерии за заявка. Вижте и ги редактирайте визуално в отделните раздели на нашия визуален Инструмент за заявки на MySQL където рисувате заявката си. Не е нужно да въвеждате имената на колоните или да помните сложни правила. Просто изберете необходимите данни от списъците и се насладете на резултатите.
Използване на WHERE в MySQL
MySQL работи по следния начин при изпълнение на SELECT
изявление, съдържащо WHERE
клауза:
- Оценете
FROM
клауза за идентифициране на целевата таблица. - Продължете към
WHERE
клауза за оценка на критериите за избор на данни. - Проверете
SELECT
оператор за дефиниране на колоните за извличане.
Забележка :SELECT
операторът често включва ORDER BY
клауза, която поставя резултатите във възходящ или низходящ ред. Ако е така, MySQL ще го оцени накрая.
Принципът на работа на MySQL WHERE
е подобен на IF
състояние в езиците за програмиране. Той сравнява стойностите, които предоставяме, с тези на целевата MySQL таблица. Когато тези стойности съвпадат, RDBMS извлича тези записи на потребителите.
Когато условието за WHERE
клаузата е текстова стойност, ние поставяме този текст в единични кавички. За числовите стойности обаче не са необходими кавички.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Повишете способностите си за скриптове с усъвършенствания MySQL формат, който позволява да разкрасите кода си, за да го получите точно както ви харесва.
Сега нека прегледаме използването на WHERE
клауза. Включва много конкретни случаи. Най-добрият начин да ги проучите е да се обърнете към практически MySQL WHERE
пример за всеки сценарий.
Пример на заявка WHERE за едно условие
Най-простият сценарий за използване на тази клауза е MySQL WHERE
има един единствен критерий за избор на данни. Да предположим, че някаква компания иска да извлече списъка на своите служители, работещи в отдела за обслужване на клиенти като мениджъри за поддръжка:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
Заявката ще извлече данни от служителите таблица и филтрирайте записите според стойността в job_title колона. Той трябва да върне списъка с всички фамилни и собствени имена на всички служители, които работят като мениджъри за поддръжка. Резултатът е по-долу:
фамилно име | first_name | служебно_заглавие |
Лисица | Мери | Поддръжка |
Черно | Джон | Поддръжка |
Джонсън | Стив | Поддръжка |
Хъдсън | Диана | Поддръжка |
Уилямс | Кейти | Поддръжка |
Зелено | Джейк | Поддръжка |
Забележка :Кодирайте по-малко и постигайте повече с проверка на синтаксиса на MySQL. dbForge Studio за MySQL е богата на функции IDE, предназначена да улесни разработването, поддръжката и администрирането на база данни на MySQL и MariaDB.
Множество WHERE условия
Предоставеният по-горе пример доказва, че MySQL WHERE
клауза носи данни, които отговарят на условието. В този случай той филтрира всички онези служители, които имат посочената длъжност. Често обаче трябва да зададем няколко критерия, за да извлечем данните. Това е възможно – трябва да приложим MySQL WHERE
със специфичните оператори – AND
оператор и OR
оператор.
Оператор WHERE AND
Нека направим предишния ни пример малко по-сложен. Искаме списъка на служителите, работещи в отдела за поддръжка, наети миналата година.
За да постигнем това, ще зададем две условия и ще ги обединим с AND
логически оператор:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
Резултатът:
фамилно име | first_name | служебно_заглавие | here_year |
Лисица | Мери | Поддръжка | 2021 |
Черно | Джон | Поддръжка | 2021 |
Джонсън | Стив | Поддръжка | 2021 |
Самото писане на код заема лъвски дял от общото време, което отделяте за разработване и администриране на база данни. Удвоете скоростта на кодиране с усъвършенствания и оптимизиран редактор на код на MySQL Server, който идва с dbForge Studio за MySQL.
Оператор WHERE OR
Използване на OR
логическият оператор е друг метод за работа с няколко условия в MySQL WHERE
клауза. Ако изпратим тази заявка, тя ще върне данни, отговарящи на зададените от нас критерии.
Компанията иска да провери редовните клиенти, идващи от два града. За това ще посочим тези градове и ще използваме OR
оператор.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
фамилно име | first_name | град |
Андерсън | Мери | Сиатъл |
Черно | Джон | Сиатъл |
Томпсън | Стив | Bellevue |
Смит | Диана | Bellevue |
Уилямс | Кейти | Сиатъл |
Питърс | Джейк | Сиатъл |
Използване на И с условия ИЛИ
MySQL позволява комбиниране на MySQL WHERE AND OR
– и двата логически оператора могат да присъстват в един оператор. В този случай MySQL ще провери три условия наведнъж.
Например библиотеката иска да получи информация за своите читатели, живеещи в Белвю, които станаха редовни читатели на библиотеката през 2021 г. или са чели повече от 20 книги.
В този случай MySQL WHERE
низът става по-сложен. За да пасне и организира AND
&OR
условия, ние използваме скоби, за да определим как MySQL трябва да ги оцени.
Разгледайте примера по-долу:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
Резултатът:
фамилно име | first_name | град | reg_year | books_read |
Андерсън | Мери | Сиатъл | 2021 | 25 |
Джоунс | Крис | Bellevue | 2020 | 12 |
Томпсън | Лора | Сиатъл | 2020 | 35 |
Фарел | Брайън | Bellevue | 2021 | 48 |
Смит | Джеф | Bellevue | 2020 | 50 |
Питърс | Анна | Bellevue | 2020 | 10 |
Патерсън | Джон | Bellevue | 2020 | 11 |
Този изход показва някои резултати, съответстващи на състоянието на града на пребиваване + годината на регистрация. Той също така включва резултати, отговарящи на второто условие, че сте прочели повече от 20 книги.
Оператор WHERE BETWEEN
Операторът BETWEEN позволява задаване на по-широки граници. Да приемем, че библиотеката иска да получи списъка на своите читатели, които са се присъединили през 2019, 2020 и 2021 г. Вместо да изпращате няколко заявки или да използвате AND
оператор, можем да зададем диапазона за WHERE
условие с помощта на BETWEEN
оператор.
За да извлечем списъка с читатели, присъединили се между 2019 и 2022 г., изпращаме следното запитване:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
Резултатът:
фамилно име | first_name | reg_year |
Андерсън | Мери | 2019 |
Джоунс | Крис | 2019 |
Томпсън | Лора | 2019 |
Фарел | Брайън | 2019 |
Смит | Джеф | 2020 |
Питърс | Анна | 2020 |
Патерсън | Джон | 2020 |
Уилямс | Маркиране | 2021 |
Hiks | Андрю | 2021 |
Предоставяне | Валентина | 2021 |
Оператор WHERE LIKE
Прилагането на оператора LIKE ви позволява да използвате клаузата WHERE, за да изберете определени записи, които включват специфичен модел. За да дефинираме този модел, използваме знака за процент (%), за да заменим знак или низ от няколко знака с произволна дължина.
Най-често срещаните модели за MySQL SELECT WHERE LIKE
са следните:
WHERE
стойност LIKE 'abc%
‘ – намира и връща всички стойности, започващи с „abc”
WHERE
стойност LIKE '%abc'
– намира и връща всички стойности, завършващи с “abc”
WHERE
стойност LIKE '%abc%'
– намира и връща стойности с „abc“ някъде между началото и края
Нека да разгледаме WHERE LIKE
пример. Компанията иска да получи списъка на своите клиенти от САЩ и Великобритания. Заявката е следната:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
Резултатът е:
Име на контакт | Държава | Град |
Хелън Бенет | UK | Cowes |
Саймън Краутър | UK | Лондон |
Хари Кумар | UK | Лондон |
Хауърд Снайдер | САЩ | Юджийн |
Йоши Латимър | САЩ | Елгин |
Джон Стийл | САЩ | Walla Walla |
Хайме Торес | САЩ | Сан Франциско |
Фран Уилсън | САЩ | Портланд |
Пример КЪДЕ НЕ КАТО КАТО
Има и друг случай, в който трябва да изключите някои данни от резултатите. Можем да използваме MySQL WHERE NOT LIKE
оператор. Той намира и връща данните, които нямат специфични знаци.
Компанията иска списък на своите клиенти от всички страни с изключение на Обединеното кралство и САЩ. Синтаксисът на WHERE NOT LIKE
в MySQL ще изглежда както следва:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
Резултатът:
Име на контакт | Държава | Град |
Роланд Мендел | Австрия | Грац |
Георг Пипс | Австрия | Залцбург |
Катрин Дюи | Белгия | Брюксел |
Pascale Cartrain | Белгия | Шарлеруа |
Елизабет Линкълн | Канада | Цавасен |
Йоши Танамури | Канада | Ванкувър |
Жан Фресниер | Канада | Монреал |
Jytte Petersen | Дания | Копенхавн |
Пале Ибсен | Дания | Орхус |
Пиркко Коскитало | Финландия | Оулу |
Мати Картунен | Финландия | Хелзинки |
Анет Рулет | Франция | Тулуза |
Мари Бертран | Франция | Париж |
Мария Андерс | Германия | Берлин |
Хана Моос | Германия | Манхайм |
оператор WHERE IN
Използване на IN
и NOT IN
keywords е друга опция за филтриране на редовете и извличане само на част от данни, която отговаря на нашите строги критерии. Основната цел е да се намали броят на OR
клаузи в един SELECT
изявление.
MySQL WHERE IN
апелира към редовете, съдържащи стойностите, които посочихме за WHERE
състояние. Например искаме да извлечем списъка с клиенти, които пребивават в няколко европейски държави. WHERE IN
Синтаксисът е следният в MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Моля, имайте предвид, че ние прилагаме нашите стойности, които определят условието за търсене в скоби. В случай на работа с текстови стойности, трябва да ги поставим всички в единични кавички. Въпреки това, ако нашите стойности и числови, ще ги изброим без единични кавички, например (25, 35, 45).
Резултатът от горния MySQL WHERE IN
клауза в SELECT
изявлението е:
Име на контакт | Държава | Град |
Катрин Дюи | Белгия | Брюксел |
Pascale Cartrain | Белгия | Шарлеруа |
Frédérique Citeaux | Франция | Страсбург |
Лорънс Лебиханс | Франция | Марсилия |
Жанин Лабрюн | Франция | Нант |
Мартин Рансе | Франция | Лил |
Александър Фойер | Германия | Лайпциг |
Хенриет Пфалцхайм | Германия | Кьолн |
Хорст Клос | Германия | Кюневалде |
Карин Джоузефс | Германия | Мюнстер |
Рита Мюлер | Германия | Щутгарт |
Томас Харди | UK | Лондон |
Виктория Ашуърт | UK | Лондон |
Елизабет Браун | UK | Манчестър |
Ан Девън | UK | Лондон |
Пример КЪДЕ НЕ
Обратният случай е MySQL WHERE NOT IN
клауза. Използва се, за да се гарантира, че вашата заявка ще игнорира тези редове, съдържащи стойностите, посочени за условието. В горния пример поискахме клиенти от 4-те определени европейски държави. MySQL WHERE NOT IN
SELECT
заявка за същата заявка ще върне всички клиенти, пребиваващи в други държави, с изключение на тези 4, определени по-рано.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Резултатът:
Име на контакт | Държава | Град |
Патрисио Симпсън | Аржентина | Буенос Айрес |
Серхио Гутиерес | Аржентина | Буенос Айрес |
Brian Citeaux | Канада | Монреал |
Лора Смит | Канада | Торонто |
Джейн Грийн | Канада | Торонто |
Мартин Рансе | Канада | Ванкувър |
Александър Фойер | Канада | Орхус |
Паоло Акорти | Италия | Рим |
Джовани Ровели | Италия | Торино |
Анна Морони | Италия | Павия |
Забележка :Препоръчваме да използвате [NOT] EXISTS
през [NOT] IN
тъй като EXISTS
логическият оператор работи по-бързо от IN
, когато сравнявате набори от данни с помощта на подзаявка. Освен това NOT EXISTS
ще избегне неочаквани резултати, когато изходните данни съдържат NULL
стойности.
Оператор WHERE IS NULL
За да проверите дали дадена стойност е NULL
или не, използвайте IS NULL
оператор. Следващият израз използва WHERE
клауза с IS NULL
оператор, за да получите редовете без стойност в books_read
колона:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
Резултатът ще изглежда така:
фамилно име | first_name | reg_year | books_read |
Джанет | Overacker | 2020 | NULL |
Лидия | Суенсън | 2017 | NULL |
Алберт | Крепо | 2018 | NULL |
Анастасия | Джонсън | 2021 | NULL |
Ще | Смит | 2017 | NULL |
Пример WHERE IS NOT NULL
За разлика от предишната команда, WHERE IS NOT NULL
, напротив, показва само онези редове, които съдържат някаква стойност във въпросната колона. В следващия пример ще изберем само онези редове, където books_read колоната не е празна:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
В изхода ще видите само онези редове, които съдържат стойност в books_read колона:
фамилно име | first_name | reg_year | books_read |
Кори | 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
оператор. 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 |
Summary
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