При использовании подзапросов во внутреннем запросе можно ссылаться на таблицу, имя которой указано в предложении FROMвнешнего запроса. В этом случае такой связанный подзапрос выполняется по одному разу для каждой строки таблицы основного запроса.
Пример. Выбрать сведения обо всех предметах обучения, по которым проводился экзамен 20 января 1999 г.
SELECT*
FROMSUBJECT SU
WHERE‘20/01/1999’ IN
( SELECTEXAM_DATE
FROMEXAM_MARKS EX
WHERESU.SUBJ_ID = EX.SUBJ_ID);
Эту же задачу можно решить с помощью операции соединения таблиц:
SELECT DISTINCTSUBJ_ID, SUBJ_NAME, HOUR, SEMESTER
FROMSUBJECT FIRST, EXAM_MARKS SECOND
WHEREFIRST.SUBJ_ID = SECOND.SUBJ_ID
ANDSECOND.EXAM_DATE = ’20/01/1999’;
В этом выражении алиасами таблиц являются имена FIRST и SECOND. Можно использовать подзапросы, связывающие таблицу со своей собственной копией. Например, надо найти идентификаторы, фамилии и стипендии студентов , получающих стипендию выше средней на курсе, на котором они учатся.
SELECT DISTINCTSTUDENT_ID, SURNAME, STIPEND
FROMSTUDENT E1
WHERESTIPEND >
(SELECT AVG(STIPEND)
FROMSTUDENT E2
WHEREE1.KURS = E2.KURS);
Тот же результат можно получить с помощью следующего запроса:
SELECT DISTINCTSTUDENT_ID, SURNAME, STIPEND
FROMSTUDENT E1,
(SELECTKURS, AVG(STIPEND) ASAVG_STIPEND
FROMSTUDENT E2
GROUP BYE2.KURS) E3
WHEREE1.STIPEND > AVG_STIPEND ANDE1.KURS=E3.KURS;