•
Возвращают один столбец и одну строку, один столбец и несколько
строк, а также несколько столбцов и строк.
•
Не зависят от содержащего выражения (несвязанные подзапросы).
•
Используют один или более столбцов из содержащего выражения
(связанные подзапросы).
•
Применяются в условиях, используемых операторами сравнения
и специальными операторами
in
,
not
in
,
exists
и
not
exists
.
•
Могут находиться в выражениях
select
,
update
,
delete
и
insert
.
•
Формируют таблицы, которые можно соединить в запросе с други
ми таблицами.
194
Глава 9. Подзапросы
•
Позволяют формировать значения для заполнения таблицы или
столбцов результирующего набора запроса.
•
Используются в блоках
select
,
from
,
where
,
having
и
order
by
запросов.
Очевидно, подзапросы – очень многогранный инструмент, поэтому не
отчаивайтесь, если при первом прочтении главы вы поймете не все
представленные здесь принципы. Продолжайте экспериментировать
с подзапросами и вскоре обнаружите, что при написании каждого не
обычного SQLвыражения очень полезно рассматривать возможность
использования подзапроса.
Упражнения
Эти упражнения ориентированы на проверку понимания подзапросов.
Решения приведены в приложении С.
9.1
Создайте запрос к таблице
account
, использующий условие фильтра
ции с несвязанным подзапросом к таблице
product
для поиска всех кре
дитных счетов (
product.product_type_cd
=
'LOAN'
). Должны быть выбра
ны ID счета, код счета, ID клиента и доступный остаток.
9.2
Переработайте запрос из упражнения 9.1, используя
связанный
подза
прос к таблице
product
для получения того же результата.
9.3
Соедините следующий запрос с таблицей
employee
, чтобы показать уро
вень квалификации каждого сотрудника:
SELECT 'trainee' name, '20040101' start_dt, '20051231' end_dt
UNION ALL
SELECT 'worker' name, '20020101' start_dt, '20031231' end_dt
UNION ALL
SELECT 'mentor' name, '20000101' start_dt, '20011231' end_dt
Дайте подзапросу псевдоним
levels
(уровни) и включите ID сотрудни
ка, имя, фамилию и квалификацию (
levels.name
). (Совет: в условии со
единения определяйте диапазон, в который попадает столбец
em
ployee.start_date
, с помощью условия неравенства.)
9.4
Создайте запрос к таблице
employee
для получения ID, имени и фами
лии сотрудника вместе с названиями отдела и отделения, к которым
он приписан. Не используйте соединение таблиц.
|