В этой статье будет обсуждаться использование запроса IN в MySQL для проверки того, входит ли конкретное значение в набор значений, что полезно при замене набора операторов OR.
Оператор IN достаточно прост. Он работает, проверяя, соответствует ли набор указанному значению.
Общий синтаксис запроса:
SELECT col_names FROM table_name WHERE expression IN (value_sets);
В приведенном выше синтаксисе мы указываем выполняемую функцию. Это может быть SELECT, INSERT, DELETE, UPDATE и т. д.
Затем мы указываем имя таблицы, из которой нужно выполнить указанное выше действие.
Следующая часть – это предложение WHERE, в котором мы указываем выражение или значение для оценки. Это значение, которое мы тестируем в наборах значений в правой части предложения IN.
В правой части предложения мы указываем значения, по которым следует искать соответствующее выражение.
Если предложение IN находит совпадение в указанном наборе значений, оно возвращает 1, указывающую истину, и 0, указывающую ложь.
Вот примеры, иллюстрирующие предложение IN:
Простым вариантом использования оператора IN является проверка единственного значения в наборе. Например, мы можем проверить, входит ли символ «A» в набор символов.
SELECT 'A' IN ('A', 'B', 'C', 'D');
В приведенном выше примере мы проверяем, входит ли символ «A» в набор символов ABCD.
Приведенный выше запрос должен вернуть 1, если он истинен, как показано в выходных данных ниже:
+-----------------------------+ | 'A' IN ('A', 'B', 'C', 'D') | +-----------------------------+ | 1 | +-----------------------------+ 1 row in set (0.00 sec)
Аналогичный случай применяется, если значение не входит в набор значений. Например, приведенный ниже запрос вернет 0 или false.
SELECT 'Z' IN ('A', 'B', 'C', 'D');
Поскольку Z не входит в набор, оператор возвращает false, как показано:
+-----------------------------+ | 'Z' IN ('A', 'B', 'C', 'D') | +-----------------------------+ | 0 | +-----------------------------+
Проиллюстрируем запрос IN на более практическом примере. Давайте возьмем таблицу actor из образца базы данных.
SELECT * FROM actor LIMIT 10;
+----------+------------+--------------+---------------------+ | actor_id | first_name | last_name | last_update | +----------+------------+--------------+---------------------+ | 1 | PENELOPE | GUINESS | 2021-08-25 11:22:21 | | 2 | NICK | WAHLBERG | 2021-08-25 11:22:21 | | 3 | ED | CHASE | 2021-08-25 11:22:21 | +----------+------------+--------------+---------------------+
В приведенном выше примере таблицы у нас есть столбцы act_id, first_name, last_name и last_update.
Мы можем использовать запрос IN, чтобы получить только столбцы, в которых первое имя является набором значений.
Рассмотрим запрос ниже:
SELECT * FROM actor WHERE first_name IN ('BETTE', 'JOHN', 'NICK');
Приведенный выше запрос должен возвращать столбцы только для указанных субъектов. Пример результата ниже:
+----------+------------+-----------+---------------------+ | actor_id | first_name | last_name | last_update | +----------+------------+-----------+---------------------+ | 2 | NICK | WAHLBERG | 2021-08-25 11:22:21 | | 6 | BETTE | NICHOLSON | 2021-08-25 11:22:21 | | 44 | NICK | STALLONE | 2021-08-25 11:22:21 | | 166 | NICK | DEGENERES | 2021-08-25 11:22:21 | | 192 | JOHN | SUVARI | 2021-08-25 11:22:21 | +----------+------------+-----------+---------------------+
Мы также можем использовать оператор IN для проверки числовых значений. Давайте изменим ситуацию и воспользуемся таблицей film из базы данных. Предположим, мы хотим получить только те фильмы, у которых Rental_duration равно 7.
SELECT film_id, title, rental_duration FROM film WHERE rental_duration IN (7) LIMIT 5;
В приведенном выше примере запроса должны быть возвращены столбцы, в которых Rental_duration равно 7.
+---------+------------------+-----------------+ | film_id | title | rental_duration | +---------+------------------+-----------------+ | 3 | ADAPTATION HOLES | 7 | | 27 | ANONYMOUS HUMAN | 7 | | 36 | ARGONAUTS TOWN | 7 | +---------+------------------+-----------------+ 3 rows in set (0.00 sec)
MySQL также предоставляет отрицание для оператора IN. Чтобы использовать его, добавьте ключевое слово NOT перед IN как:
SELECT * FROM table_name WHERE expression NOT IN (values);
Например, возьмем фильмы, в названии которых нет буквы S.
SELECT film_id, title, rental_duration FROM film WHERE 'S' NOT IN (title) LIMIT 5;
Ниже приведен пример вывода:
+---------+------------------+-----------------+ | film_id | title | rental_duration | +---------+------------------+-----------------+ | 1 | ACADEMY DINOSAUR | 6 | | 2 | ACE GOLDFINGER | 3 | | 3 | ADAPTATION HOLES | 7 | +---------+------------------+-----------------+ 3 rows in set (0.00 sec)
В этой статье мы сосредоточились на использовании оператора IN в MySQL, чтобы определить, находится ли значение в наборе значений. Это может помочь заменить связанные операторы OR, сделав запрос более читаемым и более простым в управлении.