MySQL Предложение WHERE: AND, OR, IN, NOT IN Пример запроса

⚡ Умное резюме

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

  • 🔍 Основная цель: Предложение WHERE ограничивает круг строк, которые затрагивает оператор, поэтому операторы SELECT, UPDATE и DELETE влияют только на соответствующие строки.
  • 🔗 И Operaтор: Строки возвращаются только в том случае, если каждое условие истинно, что сужает набор результатов.
  • 🔀 OR Operaтор: Строки возвращаются, когда хотя бы одно из условий оценивается как истинное, расширяя результирующий набор.
  • 📋 ВНУТРИ и НЕ ВНУТРИ: Ключевое слово IN соответствует списку значений в одном выражении, тогда как NOT IN исключает этот же список.
  • Сравнение OperaТорс: Фильтр «Равно» (=), «больше» (>), «меньше» (<) и «не равно» (<>) для числовых, текстовых и датовых столбцов.
  • ⚠️ Обработка значений NULL: Значение NULL никогда не соответствует знакам = или <>, поэтому для проверки наличия пропущенных значений необходимы операторы IS NULL и IS NOT NULL.

Что такое пункт WHERE в MySQL?

Предложение WHERE in MySQL — это ключевое слово, используемое для указания точных критериев данных или строк, которые будут затронуты указанным оператором SQL. Предложение WHERE может использоваться с такими операторами SQL, как INSERT, UPDATE, SELECT и DELETE, для фильтрации записей и выполнения различных операций с данными.

Мы рассмотрели, как запросить данные из база данных используя оператор SELECT из предыдущего руководства. Инструкция SELECT вернула все результаты из запрошенной таблицы базы данных.

Однако бывают случаи, когда нам нужно ограничить результаты запроса определенным условием. В таких ситуациях очень полезен оператор WHERE в SQL, и он работает аналогично в других запросах. Запрос на удаление или обновление как это происходит в запросе SELECT.

Предложение WHERE в MySQL

Синтаксис предложения 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 email
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 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

Функция 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 email
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 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

> Больше

Следующий скрипт получает все платежи, превышающие 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

Часто задаваемые вопросы (FAQ)

WHERE фильтрует отдельные строки перед группировкойpingТаким образом, он не может ссылаться на агрегатные функции. Фильтрация HAVING выполняет группы после выполнения GROUP BY, что делает его подходящим местом для условий, таких как COUNT(*) > 5.

Используйте IS NULL или IS NOT NULL. OperaОператоры `=` и `<>` возвращают значение `known` для NULL, поэтому `postal_address` = NULL ничего не соответствует, в то время как `postal_address` IS NULL работает.

Да, если отфильтрованный столбец проиндексирован. MySQL Считывает только совпадающие строки, а не сканирует таблицу. Перенос строки.ping Столбец в функции, например, YEAR(`date_of_birth`) = 1980, препятствует использованию индексов.

Да. Искусственные интеллекты-помощники преобразуют простой английский язык в SQL, и MySQL Верстак можно запустить результат. RevПроверяйте каждое условие на соответствие вашей схеме, поскольку модель может придумывать имена столбцов.

Сначала протестируйте с помощью SELECT. Неправильное условие WHERE в... Запрос на удаление или обновление Можно изменить каждую строку. Предварительно просмотрите найденные строки, затем используйте то же условие для записи.

Подведем итог этой публикации следующим образом: