В этом учебном пособии вы узнаете, как использовать subqueries (подзапросы) в SQLite запросе с синтаксисом и примерами.
Описание
В SQLite подзапрос - это запрос в запросе. Вы можете создавать подзапросы в своих запросах SQL. Эти подзапросы могут находиться в операторе WHERE, операторе FROM или операторе SELECT.
Примечание
- В SQLite подзапрос также называется INNER QUERY или INNER SELECT.
- В SQLite основной запрос, содержащий подзапрос, также называется OUTER QUERY или OUTER SELECT.
Оператор WHERE
Чаще всего подзапрос будет найден в операторе WHERE. Эти подзапросы также называются вложенными подзапросами.
Например:
1 2 3 4 5 6 7 8 |
SELECT e.employee_id, e.last_name FROM employees e WHERE e.department_id IN (SELECT d.department_id FROM departments d WHERE d.department_name = 'HR' OR d.department_name = 'Accounting'); |
Часть подзапроса оператора SELECT выше:
1 2 3 4 |
(SELECT d.department_id FROM departments d WHERE d.department_name = 'IT' OR d.department_name = 'Accounting'); |
Этот подзапрос позволяет вам найти все значения department_id из таблицы departments, которые имеют department_name 'IT' или 'Accounting'. Затем подзапрос используется для фильтрации результатов из основного запроса с использованием условия IN.
Этот подзапрос может быть записан как INNER JOIN следующим образом:
1 2 3 4 5 6 7 |
SELECT e.employee_id, e.last_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id WHERE d.department_name = 'IT' OR d.department_name = 'Accounting'; |
Этот INNER JOIN будет работать более эффективно, чем исходный подзапрос. Важно отметить, однако, что не все подзапросы могут быть переписаны с помощью объединений (JOIN).
Оператор FROM
Подзапрос также можно найти в операторе FROM. Это называется встроенными представлениями.
Например:
1 2 3 4 5 6 7 8 |
SELECT departments.department_name, subquery1.latest_hire FROM departments, (SELECT department_id, MAX(hire_date) AS latest_hire FROM employees GROUP BY department_id) subquery1 WHERE subquery1.department_id = departments.department_id; |
В этом примере мы создали подзапрос в операторе FROM следующим образом:
1 2 3 4 |
(SELECT department_id, MAX(hire_date) AS latest_hire FROM employees GROUP BY department_id) subquery1 |
Этот подзапрос был определен алиасом subquery1. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.
Оператор SELECT
Подзапрос также можно найти в операторе SELECT. Они обычно используются, когда вы хотите получить вычисление с использованием агрегатной функции, такой как sum, count, min, max или функция avg, но вы не хотите, чтобы агрегатная функция применялась к основному запросу.
Например:
1 2 3 4 5 |
SELECT e1.department_id, (SELECT MAX(hire_date) FROM employees e2 WHERE e1.department_id = e2.department_id) subquery2 FROM employees e1; |
В этом примере мы создали подзапрос в операторе SELECT следующим образом:
1 2 3 |
(SELECT MAX(hire_date) FROM employees e2 WHERE e1.department_id = e2.department_id) subquery2 |
Этот подзапрос был определен алиасом subquery2. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.
Хитрость в размещении подзапроса в операторе SELECT заключается в том, что подзапрос должен возвращать одно значение. Вот почему в подзапросе обычно используется агрегатная функция, такая как функция sum, count, min, max или avg.