В этом учебном материале вы узнаете, как использовать подзапросы в Oracle с синтаксисом и примерами.
Что такое подзапрос в Oracle?
В Oracle подзапрос - это запрос в запросе. Вы можете создавать подзапросы внутри ваших операторов. Эти подзапросы могут находиться в предложении WHERE, в предложении FROM, или SELECT.
WHERE
Чаще всего, подзапрос будет используется в предложении WHERE. Эти подзапросы также называются вложенными подзапросами.
Например:
1 2 3 4 5 |
SELECT * FROM all_tables tabs WHERE tabs.table_name IN (SELECT cols.table_name FROM all_tab_columns cols WHERE cols.column_name = 'SUPPLIER_ID'); |
Ограничение: Oracle позволяет использовать до 255 уровней подзапросов в предложении WHERE.
FROM
Подзапрос также можно найти в FROM. Они называются inline представлениями.
Например:
1 2 3 4 5 6 |
SELECT suppliers.name, subquery1.total_amt FROM suppliers, (SELECT supplier_id, SUM(orders.amount) AS total_amt FROM orders GROUP BY supplier_id) subquery1 WHERE subquery1.supplier_id = suppliers.supplier_id; |
В этом примере мы создали подзапрос в предложении FROM следующим образом:
1 2 3 |
(SELECT supplier_id, SUM(orders.amount) AS total_amt FROM orders GROUP BY supplier_id) subquery1 |
Этот подзапрос с псевдонимом subquery1. Subquery1 используется для ссылки на этот подзапрос или любое из его полей.
Ограничения
В FROM Oracle позволяет неограниченное количество подзапросов.
SELECT
Подзапрос также можно найти в предложениях SELECT.
Например:
1 2 3 4 5 6 |
SELECT tbls.owner, tbls.table_name, (SELECT COUNT(column_name) AS total_columns FROM all_tab_columns cols WHERE cols.owner = tbls.owner AND cols.table_name = tbls.table_name) subquery2 FROM all_tables tbls; |
В этом примере мы создали вложенный запрос в предложении SELECT, следующим образом:
1 2 3 4 |
(SELECT COUNT(column_name) AS total_columns FROM all_tab_columns cols WHERE cols.owner = tbls.owner AND cols.table_name = tbls.table_name) subquery2 |
Этот подзапрос с псевдонимом subquery2. Subquery2 используется для ссылки на этот подзапрос или любое из его полей.
Уловка размещения подзапроса в select предложении является то, что подзапрос должен возвращать одно значение. Именно поэтому в подзапросе обычно используются агрегатные функции, такие как функция SUM, COUNT, MIN или MAX.