Освоение подзапросов SQL: раскрытие возможностей вложенных запросов

Подзапросы SQL, также известные как вложенные запросы, — мощный инструмент в арсенале разработчика баз данных. Они позволяют писать сложные запросы, встраивая один запрос в другой. В этой статье мы рассмотрим различные методы использования подзапросов в SQL, дополненные разговорными объяснениями и примерами кода. Так что будьте готовы погрузиться в мир вложенных запросов и поднять свои навыки работы с SQL на новый уровень!

Метод 1: подзапрос в предложении WHERE
Одним из распространенных вариантов использования подзапросов является фильтрация данных на основе результатов другого запроса. Например, предположим, что вы хотите получить всех сотрудников, у которых зарплата выше средней зарплаты в компании. Вот как этого можно добиться:

SELECT employee_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Метод 2: подзапрос в предложении FROM
Другой способ использования подзапросов — использование их в предложении FROM. Это позволяет рассматривать результат подзапроса как временную таблицу и выполнять над ней дальнейшие операции. Допустим, вы хотите узнать количество заказов, размещенных каждым покупателем. Вот как это можно сделать:

SELECT customer_id, order_count
FROM (SELECT customer_id, COUNT(*) AS order_count
      FROM orders
      GROUP BY customer_id) AS subquery;

Метод 3: подзапрос в предложении SELECT
Подзапросы также можно использовать в предложении SELECT для получения одного значения на основе некоторого условия. Например, предположим, что вы хотите отобразить общее количество продуктов в каждой категории. Вот как это можно сделать:

SELECT category_name, (SELECT COUNT(*) FROM products WHERE category_id = categories.id) AS product_count
FROM categories;

Метод 4: коррелирующие подзапросы
В некоторых случаях может потребоваться ссылка на внешний запрос изнутри подзапроса. Это так называемые коррелированные подзапросы. Допустим, вы хотите найти всех клиентов, разместивших заказы за последние 30 дней. Вот пример использования коррелированного подзапроса:

SELECT customer_name
FROM customers
WHERE EXISTS (SELECT 1
              FROM orders
              WHERE orders.customer_id = customers.id
              AND orders.order_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY));

Метод 5: подзапрос с EXISTS
Оператор EXISTS позволяет проверить, возвращает ли подзапрос какие-либо строки. Обычно он используется для фильтрации данных на основе существования связанных записей. Например, вы можете захотеть найти всех сотрудников, у которых есть хотя бы один прямой подчиненный. Вот как этого можно добиться:

SELECT employee_name
FROM employees
WHERE EXISTS (SELECT 1
              FROM employees AS subquery
              WHERE subquery.manager_id = employees.id);

Подзапросы SQL — это универсальная функция, которая может значительно расширить ваши возможности по манипулированию и анализу данных в базе данных. В этой статье мы рассмотрели несколько методов использования подзапросов, в том числе их использование в предложениях WHERE, FROM и SELECT, а также использование коррелированных подзапросов и оператора EXISTS. Освоив эти методы, вы будете хорошо подготовлены к решению сложных SQL-запросов и извлечению ценной информации из ваших данных.