В этом учебном пособии вы узнаете, как использовать MariaDB подзапросы в MariaDB с синтаксисом и примерами.
Описание
В MariaDB подзапрос - это запрос в запросе. Вы можете создавать подзапросы в своих SQL запросах. Эти подзапросы могут находиться в операторе WHERE, операторе FROM или операторе SELECT.
Примечание
- В MariaDB подзапрос также называется INNER QUERY или INNER SELECT.
- В MariaDB основной запрос, содержащий подзапрос, также называется OUTER QUERY или OUTER SELECT.
WHERE оператор
Чаще всего подзапрос будет найден в операторе WHERE. Эти подзапросы также называются вложенными подзапросами.
Например:
1 2 3 4 5 6 |
SELECT s.site_id, s.site_name FROM sites s WHERE s.site_id IN (SELECT p.site_id FROM pages p WHERE p.file_size > 89); |
Часть подзапроса оператора SELECT выше:
1 2 3 |
(SELECT p.site_id FROM pages p WHERE p.file_size > 89); |
Этот подзапрос позволяет найти все значения site_id из таблицы pages, у которых file_size больше 89. Подзапрос затем используется для фильтрации результаты основного запроса с использованием условия IN.
Этот подзапрос мог бы быть записан как INNER join следующим образом
1 2 3 4 5 |
SELECT s.site_id, s.site_name FROM sites s INNER JOIN pages p ON s.site_id = p.site_id WHERE p.file_size > 89; |
Этот INNER JOIN будет работать более эффективно, чем исходный подзапрос. Однако важно отметить, что не все подзапросы можно переписать с помощью Joins.
FROM оператор
Подзапрос также можно найти в операторе FROM. Они называются встроенными представлениями.
Например:
1 2 3 4 5 6 |
SELECT sites.site_name, subquery1.total_size FROM sites, (SELECT site_name, SUM(file_size) AS total_size FROM pages GROUP BY site_name) subquery1 WHERE subquery1.site_name = sites.site_name; |
В этом примере мы создали подзапрос в операторе FROM следующим образом:
1 2 3 |
(SELECT site_name, SUM(file_size) AS total_size FROM pages GROUP BY site_name) subquery1 |
Этот подзапрос имеет псевдоним с именем subquery1. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.
SELECT оператор
Подзапрос также можно найти в операторе SELECT. Они обычно используются, когда вы хотите получить расчет с использованием агрегатной функции, такой как функция SUM, COUNT, MIN, MAX или AVG, но вы не хотите, чтобы агрегатная функция применялась к основному запросу.
Например:
1 2 3 4 5 |
SELECT p1.site_name, (SELECT MAX(file_size) FROM pages p2 WHERE p1.site_id = p2.site_id) subquery2 FROM pages p1; |
В этом примере мы создали подзапрос в операторе SELECT следующим образом:
1 2 3 |
(SELECT MAX(file_size) FROM pages p2 WHERE p1.site_id = p2.site_id) subquery2 |
Подзапрос имеет псевдоним с именем subquery2. Это будет имя, используемое для ссылки на этот подзапрос или любое из его полей.
Хитрость в размещении подзапроса в операторе SELECT заключается в том, что подзапрос должен возвращать одно значение. Вот почему агрегатная функция, такая как SUM, COUNT, функция MIN, MAX или AVG обычно используется в подзапросе.