В 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 - вместо вложенных подзапросов используется задание условия связывания таблиц
предыдущаяследующая