3 WHERE stoimost_prok =
SELECT stoimost_prok
FROM film
6 WHERE namef = 'Дом');
NAMEF STOIMOST_PROK
------------------------- -------------
Дом 40
Азазель 40
Куклы 40
Ледниковый период 40
1. Первой выполняется команда SELECT вложенного блока запроса. Результат запроса – 40.
SQL> (SELECT stoimost_prok
FROM film
3 WHERE namef = 'Дом');
2. Далее обрабатывается главный блок запроса. Результат подзапроса используется при этом для вычисления условия поиска.
Фактически, для сервера Oracle главный запрос будет выглядеть следующим образом:
SQL> SELECT namef, stoimost_prok
FROM film
3 WHERE stoimost_prok = 40
Пример.
Вывод названия фильма и стоимости проката кассет всех фильмов, стоимость проката которых ниже средней.
SQL> SELECT namef, stoimost_prok
From film
3 WHERE stoimost_prok <
SELECT AVG(stoimost_prok)
5 from film);
NAMEF STOIMOST_PROK
------------------------- ---------------------------
Звонок 35
Звонок 36
Куклы 20
Ошибки в подзапросах
Одна из распространенных ошибок — возврат однострочным подзапросом более, чем одной строки.
KLIENTID FILMID VIDACHA VOZVRAT
---------------- -------------- --------------- ---------------
1 1 01.02.03 01.04.03
1 11 01.01.03
2 1 12.03.03
Пример.
Подзапрос возвращает более одной строки, но использует однострочный оператор cравнения. Для исправления ошибки следует изменить "=" на "IN".
SQL> select namef, stoimost_prok
From film
3 where filmID =
Select filmID