Субд лекции

Темы:

Запросы, затрагивающие несколько таблиц

В SQL запросы, затрагивающие несколько таблиц, могут реализовываться различными способами. Во-первых, условия соединения таблиц могут быть заданы в предложении WHERE. Во-вторых, возможно применение вложенных запросов. В-третьих, можно использовать встроенные операторы JOIN, включаемые в предложение FROM (что рассматривалось выше). Последняя из указанных возможностей была включена в SQL сравнительно недавно (начиная с SQL-92). Использование встроенных операторов JOIN часто помогает упростить написание запроса. Встроенные операторы JOIN реализованы не во всех диалектах SQL. В случае их отсутствия (или в силу привычки) можно запросы реализовать и без использования JOIN.

Один и тот же запрос может быть реализован несколькими способами.

Рассмотрим следующий пример. Пусть имеются две таблицы. Первая («Postavka») содержит сведения о поставках продукции и включает колонки: Код поставщика (kod_post), Код продукции {kod_prod), Дата поставки (dat_post), Количество поставленной продукции (kolv). Вторая таблица («Sp_post») содержит колонки Код поставщика и Наименование поставщика (naim_pst). Требуется выдать наименования поставщиков, которые поставляют товар с кодом Р2.

Возможны следующие варианты задания этого запроса:

1          - пример простого вложенного подзапроса

SELECTnaim_post

FROM sp_post

WHERE kod_post IN

(SELECT kod_post FROM postavka WHERE kod_prod="P2");

2          - пример коррелированного подзапроса

SELECTnaim_post

FROM sp_post

WHERE "P2" IN

(SELECT kod__prod FROM postavka

WHERE sp_post.kod_post=postavka.kod_post);

3          - вместо вложенных подзапросов используется задание условия связывания таблиц

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