MySQL Предложение WHERE: AND, OR, IN, NOT IN Пример запроса
⚡ Умное резюме
MySQL Оператор WHERE фильтрует строки до того, как они попадут в результирующий набор, применяя точные критерии к операторам SELECT, UPDATE и DELETE. Понимание операторов AND, OR, IN, NOT IN и операторов сравнения позволяет начинающим пользователям получать именно те записи, которые необходимы для выполнения запроса.

Что такое пункт WHERE в MySQL?
Предложение WHERE in MySQL — это ключевое слово, используемое для указания точных критериев данных или строк, которые будут затронуты указанным оператором SQL. Предложение WHERE может использоваться с такими операторами SQL, как INSERT, UPDATE, SELECT и DELETE, для фильтрации записей и выполнения различных операций с данными.
Мы рассмотрели, как запросить данные из база данных используя оператор SELECT из предыдущего руководства. Инструкция SELECT вернула все результаты из запрошенной таблицы базы данных.
Однако бывают случаи, когда нам нужно ограничить результаты запроса определенным условием. В таких ситуациях очень полезен оператор WHERE в SQL, и он работает аналогично в других запросах. Запрос на удаление или обновление как это происходит в запросе SELECT.
Синтаксис предложения WHERE
Основной синтаксис предложения WHERE выглядит следующим образом.
SELECT * FROM tableName WHERE condition;
ВОТ
- «ВЫБРАТЬ * ИЗ имени таблицы» это стандарт Оператор SELECT
- "ГДЕ" — это ключевое слово, ограничивающее набор результатов, и "состояние" Это фильтр, применяемый к результатам. Фильтр может представлять собой диапазон, одно значение или подзапрос.
Предположим, нам нужны данные участника из таблицы "Участники", если его номер участника равен 1. Приведенный ниже скрипт позволяет это сделать.
SELECT * FROM `members` WHERE `membership_number` = 1;
Выполнение этого скрипта в MySQL верстак При обращении к базе данных “myflixdb” получается результат, показанный ниже.
| 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 |
Одного условия редко бывает достаточно. В разделах ниже WHERE сочетается с логические операторы.
Предложение WHERE в сочетании с – И ЛОГИЧЕСКИЕ Operaтор
При использовании логического оператора И строка возвращается только в том случае, если выполняются ВСЕ указанные критерии.
Предположим, нам нужны все фильмы категории 2, вышедшие в 2008 году. Приведенный ниже скрипт позволяет это сделать.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Выполнение приведенного выше скрипта в базе данных «myflixdb» дает следующий результат.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
И сужает набор результатов. ИЛИ расширяет его.
Предложение WHERE в сочетании с – OR ЛОГИЧЕСКИЕ Operaтор
При использовании оператора ИЛИ возвращается строка, если выполняется ХОТЯ БЫ ОДИН из указанных критериев.
Следующий скрипт получает все фильмы, относящиеся либо к категории 1, либо к категории 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
Результаты представлены ниже.
| 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 |
Последовательное использование множества условий ИЛИ затрудняет чтение текста. Ключевое слово IN решает эту проблему.
Предложение WHERE в сочетании с – IN Ключевое слово
Предложение WHERE, используемое с ключевым словом IN, затрагивает только те строки, значения которых соответствуют указанному списку. IN сокращает количество предложений OR, которые вам пришлось бы написать в противном случае.
Следующие MySQL Запрос WHERE IN выдает строки, в которых membership_number равен 1, 2 или 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
Результаты представлены ниже.
| 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 |
Функция NOT IN выполняет обратную фильтрацию.
Предложение WHERE в сочетании с – НЕ В Ключевое слово
При использовании ключевого слова NOT IN предложение WHERE исключает все строки, значение которых соответствует указанному списку.
Следующий запрос выдает строки, в которых membership_number НЕ равно 1, 2 или 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
Результаты представлены ниже.
| 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 |
Функция WHERE также фильтрует значения по размеру и равенству, используя операторы сравнения.
Предложение WHERE в сочетании с – СРАВНЕНИЕ OperaTORs
Операторы сравнения «меньше» (<), «равно» (=), «больше» (>) и «не равно» (<>) могут использоваться с предложением WHERE.
= Равно
Следующий скрипт получает всех членов женского пола из таблицы участников, используя оператор сравнения «равно».
SELECT * FROM `members` WHERE `gender` = 'Female';
Результаты представлены ниже.
| 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 |
> Больше
Следующий скрипт получает все платежи, превышающие 2,000, из таблицы платежей.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
Результаты представлены ниже.
| 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 |
Не равно
Следующий скрипт получает все фильмы, идентификатор категории которых не равен 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
Результаты представлены ниже.
| 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 |
Краткий справочник: условие WHERE OperaTORs
Ниже приведено краткое описание операторов, наиболее часто используемых в сочетании с оператором WHERE. Полные определения приведены в [ссылка на описание]. MySQL справочник оператора.
| оператор | Смысл | Пример условия |
|---|---|---|
| = | Равно | `gender` = 'Female' |
| <> | Не равно | `category_id` <> 1 |
| > / | Больше / меньше | `amount_paid` > 2000 |
| И / ИЛИ | Все критерии / любые критерии | `category_id` = 2 AND `year_released` = 2008 |
| ВНУТРИ / НЕ ВНУТРИ | Соответствует/исключает список | `membership_number` IN (1,2,3) |
| Является NULL / Не является NULL | Проверка на наличие пропущенных значений | `postal_address` IS NULL |
⚠️ Примечание: Значение NULL никогда не соответствует знакам = или <>. Используйте IS NULL или IS NOT NULL, если столбец не может содержать значения.
Головоломка: Найти фильмы, возвращенные с опозданием.
Предположим, нам нужны фильмы, взятые напрокат, но не возвращенные до 25.06.2012. Для этого мы используем оператор WHERE, оператор "меньше" и оператор AND.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Выполнение приведенного выше сценария в MySQL Workbench дает следующие результаты.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |

