Базы данных

Чтение данных из нескольких таблиц с применением вложенных запросов

Все запросы, рассмотренные ранее, считывали данные из одиночной таблицы. Бывает, однако, что для получения требуемой информации необходимо обработать более одной таблицы. Предположим, например, что мы хотим знать названия работ, которые были проданы галереей дороже 20000. Названия работ хранятся в таблице WORK, а стоимости продаж — в таблице TRANSACTION.

Если бы мы знали, что дороже 20000 были проданы работы с номерами 505, 506 и 530, мы могли бы получить названия этих работ с помощью следующего оператора:

SELECT Title

FROM WORK

WHERE WorkID IN (505, 506, 530);

Но в том-то и дело, что в условии задачи номера работ нам не заданы. Ничто, однако, не мешает нам узнать эти номера, инициировав следующий запрос:

SELECT DISTINCT WorkID

FROM TRANSACTION

WHERE AskingPrice > 20000;

Результатом будет таблица:

~505 506 530______

Теперь мы можем объединить эти два SQL-оператора при помощи так называемого вложенного запроса (subquery):

SELECT Title

FROM WORK

WHERE WorkID IN

(SELECT DISTINCT WorkID

FROM TRANSACTION

WHERE AskingPrice > 20000);

Результатом этого оператора будет следующее:

Mystic Fabric Mi Vida

Northwest by Night

И действительно, здесь мы видим названия работ, которые были проданы галереей дороже 20000. Подобным образом вложенность запросов может быть расширена до трех, четырех и более уровней.

предыдущаяследующая