Сочетание условий LIKE и IN в SQL без подзапросов

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

SQL
Скопировать код
-- Если вас интересует получение результата здесь и сейчас, просто используйте несколько LIKE:
SELECT * FROM your_table WHERE column LIKE '%pattern1%' OR column LIKE '%pattern2%';
Кинга Идем в IT: пошаговый план для смены профессии

Более глубокое погружение в возможности поиска совпадений в SQL

Множество разработчиков задаются вопросом: можно ли в SQL соединить LIKE и IN? Рассмотрим, как с помощью LIKE можно фильтровать данные по разнообразным шаблонам.

Полнотекстовый поиск как метод расширенного поиска

Полнотекстовый поиск обеспечивает существенное расширение возможностей по сравнению со стандартным поиском по шаблону:

Применение FTS в SQL Server:

SQL
Скопировать код
-- Волшебство тщательного поиска обнажит все тайны!
SELECT * FROM your_table WHERE CONTAINS(column, '"pattern1*" OR "pattern2*"');

Применение FTS в Oracle:

SQL
Скопировать код
-- Oracle в гордом одиночестве выступает в роли всеведущего детектива!
SELECT * FROM your_table WHERE CONTAINS(column, 'pattern1 OR pattern2', 1) > 0;

Не забудьте активировать полнотекстовый поиск для нужных колонок с целью ускорения процесса поиска.

Комбинирование шаблонов с применением LIKE

Использование REGEXP_LIKE в Oracle:

SQL
Скопировать код
-- Даже Уолдо не уйдет от внимательного взгляда при использовании REGEXP_LIKE!
SELECT * FROM your_table WHERE REGEXP_LIKE(column, 'pattern1|pattern2');

Обратите внимание: выбор в пользу гибкого подхода может обернуться увеличением времени выполнения запросов.

Пример использования LIKE ANY в PostgreSQL:

SQL
Скопировать код
-- Чтобы не упустить ничего, используйте LIKE ANY!
SELECT * FROM your_table WHERE column LIKE ANY(ARRAY['%pattern1%', '%pattern2%']);

LIKE ANY выступает в роли шаблона, соответствующего любому элементу массива.

Мощь подзапросов EXISTS

SQL
Скопировать код
-- Да послужит мощь SQL в битве за справедливость: ваши шаблоны — ваши боевые единицы!
SELECT * FROM your_table t WHERE EXISTS (
  SELECT 1 FROM (VALUES ('%pattern1%'), ('%pattern2%')) AS v (pattern)
  WHERE t.column LIKE v.pattern
);

Таким методом каждый шаблон проверяется по очереди на соответствие снимку базы данных.

Использование временных таблиц для хранения шаблонов

Временные таблицы подходят для работы с несколькими шаблонами:

SQL
Скопировать код
-- Создайте свою собственную временную арену для забав с шаблонами!
CREATE TEMPORARY TABLE patterns (pattern VARCHAR(255));
INSERT INTO patterns VALUES ('%pattern1%'), ('%pattern2%');

-- Кинем LIKE-кубик и посмотрим, что получится!
SELECT DISTINCT t.* FROM your_table t
JOIN patterns p ON t.column LIKE p.pattern;

Временные таблицы превратятся в ваше основное хранилище для этих шаблонов.

Визуализация

Представьте себе детектива данных (🕵️‍♂️), который просматривает огромные стопки дел:

Markdown
Скопировать код
Дела (🗂️): [Д1, Д2, Д3, Д4, Д5, Д6]

Детектив нацеливается на улики, начинающиеся с 'Д%', и ему нужно проверить сразу несколько дел.

Markdown
Скопировать код
Шаблоны для поиска: ['Д%', 'Д2%']
Markdown
Скопировать код
🕵️‍♂️🔍🗂️: ['Д1', 'Д2', 'Д3', 'Д4', 'Д5']
# Сыщик проникает в тайны всех дел, которые начинаются на 'Д'.

В итоге мы получаем упорядоченный поиск среди большого количества данных.

Баланс между читаемостью и скоростью выполнения

При отдаче предпочтения регулярным выражениям необходимо бережно относиться к производительности, учитывая затраты на скорость.

Внимание и обслуживание как неотъемлемые компоненты

Сложные запросы, связанные с использованием временных таблиц или динамического SQL, требуют постоянного внимания и обслуживания. Это можно сравнить с регулярной медицинской проверкой вашей базы данных.

Работа с ненормализованными данными

Работа с ненормализованными данными не должна вызывать отчаяние. Напротив, мы стремимся оптимизировать наши SQL-запросы для эффективной работы даже в условиях ограниченных ресурсов.

Полезные материалы

  1. Обсуждение вопроса о сочетании LIKE и IN в SQL-запросах на Stack Overflow, где можно найти массу полезной информации.
  2. Практические примеры использования оператора LIKE в SQL Server, представленные на сайте TechOnTheNet.
  3. Руководство по высокоэффективному применению динамического SQL для объединения LIKE и IN, доступное на сайте C# Corner.
  4. Обсуждение сложных запросов с использованием LIKE и IN и множеством условий на CodeProject.

Завершение

Язык SQL предлагает богатый набор инструментов для поиска совпадений: от мощного полнотекстового поиска до универсальных REGEXP_LIKE и LIKE ANY. Применяйте EXISTS с подзапросами или создавайте временные таблицы — каждый инструмент находит свое применение в зависимости от задачи, особенностей базы данных и важного баланса между читаемостью и производительностью.

Помни: каждый хороший программист когда-то начинал с нуля. Надеемся, что данная статья оказалась для вас полезной! Успехов в работе с кодом!👩‍💻