Mysql
 sql >> база данни >  >> RDS >> Mysql

Условие WHERE в MySQL с 16 различни примера за заявка

В тази статия ще говорим за 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 клауза:

  1. Оценете FROM клауза за идентифициране на целевата таблица.
  2. Продължете към WHERE клауза за оценка на критериите за избор на данни.
  3. Проверете 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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Еквивалент на Laravel-5 „Харесвам“ (Eloquent)

  2. Защо mysqli дава грешка при несинхронизиране на команди?

  3. CURRENT_TIMESTAMP Примери – MySQL

  4. Как да се свържа с MySQL база данни в Python?

  5. PDO + MySQL и счупено UTF-8 кодиране