Работа с фильтрами, базовые условные операторы, операторы EXISTS, IN, ANY, ALL, LIKE, RLIKE

Работа с фильтрами и условными операторами — это основа написания SQL-запросов. Понимание того, как использовать такие операторы, как EXISTS, IN, ANY, ALL, LIKE, и RLIKE, поможет вам создавать эффективные и точные запросы для работы с данными. Давайте рассмотрим каждый из них.

Базовые условные операторы

  • =, !=, <>: Равенство и неравенство.

    SELECT * FROM employees WHERE salary = 50000;
    SELECT * FROM employees WHERE salary != 50000;
  • >, <, >=, <=: Сравнение больше, меньше и их вариации.

    SELECT * FROM employees WHERE salary > 50000;
    SELECT * FROM employees WHERE salary <= 50000;
  • AND, OR: Логические операторы для объединения нескольких условий.

    SELECT * FROM employees WHERE salary > 50000 AND department_id = 10;
    SELECT * FROM employees WHERE salary > 50000 OR department_id = 10;
  • BETWEEN: Проверка диапазона значений.

    SELECT * FROM employees WHERE salary BETWEEN 40000 AND 60000;

Оператор EXISTS

Оператор EXISTS проверяет, существует ли хотя бы одна строка, которая удовлетворяет подзапросу. Если такая строка существует, EXISTS возвращает TRUE.

SELECT department_name
FROM departments d
WHERE EXISTS (
    SELECT 1
    FROM employees e
    WHERE e.department_id = d.department_id
    AND e.salary > 50000
);

Этот запрос вернет названия отделов, в которых есть хотя бы один сотрудник с зарплатой выше 50000.

Оператор IN

Оператор IN проверяет, входит ли значение в набор значений, возвращаемых подзапросом или указанных вручную.

SELECT * FROM employees WHERE department_id IN (10, 20, 30);

Запрос выберет всех сотрудников, которые работают в отделах 10, 20 или 30.

SELECT * FROM employees WHERE department_id IN (
    SELECT department_id FROM departments WHERE location_id = 100
);

Запрос выберет всех сотрудников из отделов, расположенных в локации с идентификатором 100.

Операторы ANY и ALL

  • ANY: Проверяет, соответствует ли значение хотя бы одному из значений в подзапросе.

    SELECT * FROM employees WHERE salary > ANY (
        SELECT salary FROM employees WHERE department_id = 10
    );

    Этот запрос выберет всех сотрудников, зарплата которых больше зарплаты хотя бы одного сотрудника из отдела 10.

  • ALL: Проверяет, соответствует ли значение всем значениям в подзапросе.

    SELECT * FROM employees WHERE salary > ALL (
        SELECT salary FROM employees WHERE department_id = 10
    );

    Этот запрос выберет всех сотрудников, зарплата которых больше, чем у всех сотрудников из отдела 10.

Оператор LIKE

Оператор LIKE используется для поиска строк по шаблону. Используются символы подстановки:

  • %: Любое количество символов (в том числе 0).

  • _: Один любой символ.

SELECT * FROM employees WHERE first_name LIKE 'J%';

Запрос выберет всех сотрудников, чьи имена начинаются на букву "J".

SELECT * FROM employees WHERE first_name LIKE '_a%';

Запрос выберет всех сотрудников, у которых вторая буква имени — "a".

Оператор RLIKE

Оператор RLIKE (или REGEXP) используется для сопоставления строк с регулярным выражением. Он мощнее, чем LIKE, так как позволяет использовать сложные шаблоны.

SELECT * FROM employees WHERE first_name RLIKE '^[A-Za-z]{3,5}$';

Запрос выберет всех сотрудников, чьи имена состоят из 3-5 букв латинского алфавита.

Примеры использования в комбинациях

SELECT *
FROM employees e
WHERE e.salary > 50000
AND e.department_id IN (SELECT department_id FROM departments WHERE location_id = 100)
AND EXISTS (
    SELECT 1
    FROM bonuses b
    WHERE b.employee_id = e.employee_id
    AND b.bonus_amount > 1000
);

Этот запрос выбирает сотрудников, у которых зарплата выше 50000, они работают в отделах, находящихся в определенной локации, и получили бонусы свыше 1000.

Заключение

Использование фильтров и условных операторов позволяет вам более точно управлять запросами к базе данных, получая только те данные, которые соответствуют заданным условиям. Понимание и правильное использование таких операторов, как EXISTS, IN, ANY, ALL, LIKE, и RLIKE, помогает оптимизировать запросы и делать их более читабельными и эффективными.

Last updated