Базы данных

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

Вложенные запросы подходят для обработки нескольких таблиц до тех пор, пока результаты (столбцы в предложении SELECT) относятся к одной и той же теблице. Если же нам нужно извлечь данные из двух или более таблиц, при помощи вложенного запроса это сделать не удастся. Вместо этого необходимо использовать операцию соединения (join).

Основная идея здесь — создать новое отношение, связав между собой содержимое двух или более исходных отношений. Рассмотрим следующий пример:

SELECT  Title, AskingPrice

FROM WORK,   TRANSACTION

WHERE WORK.WorkID  = TRANSACTION.WorkID;

Смысл этого оператора заключается в том, что создается новая таблица с двумя столбцами Title и AskingPrice. Эти столбцы берутся соответственно из таблиц WORK и TRANSACTION при условии, что столбец WorkID в таблице WORK равен одноименному столбцу в таблице TRANSACTION. Обозначения WORK.WorkID и TRANSACTION.WorkID необходимы для устранения конфликта имен столбцов.

Эту операцию можно представить себе следующим образом. Начнем с первой строки таблицы TRANSACTION. Возьмем значение столбца WorkIDв данной строке (в табл. 1.3 это 505) и просмотрим строки таблицы WORK (табл. 1.2). Найдя в таблице WORK строку, где WorkID также равняется 505, соединим столбец Title только что найденной первой строки таблицы WORK со столбцом AskingPrice первой строки таблицы TRANSACTION.

Первая строка таблицы WORK (см. табл. 1.2) имеет WorkID, равный 505, поэтому мы соединяем столбец Title первой строки таблицы WORK со столбцом AskingPrice первой строки таблицы TRANSACTION, и получаем тем самым первую строку соединения:

MysticFabric      20000

Теперь, по-прежнему используя WorkID=505, найдем следующую строку в отношении WORK, которая имеет WorkID, равный 505. Таких строк больше нет, поэтому переходим ко второй строке таблицы TRANSACTION. Так как в этой строке WorkID так же равен 505, снова найдем первую строку в отношении WORK, которая имеет WorkID, равный 505. Соединив столбец Title первой строки таблицы WORK со столбцом AskingPrice второй строки таблицы TRANSACTION, мы получим вторую строку соединения:

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