Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные_задания / Лабораторная работа 5

.docx
Скачиваний:
18
Добавлен:
15.06.2014
Размер:
7.01 Кб
Скачать
    1. Лабораторная работа №10. Использование оператора JOIN для объединения таблиц

      1. Цель работы

Научиться формировать запросы на объединение различных типов с использованием предложения JOIN.

      1. Немного теории

В языке SQL предусмотрен ряд специальных операторов, которые используются в предложении SELECT для объединения таблиц:

  • INNER JOIN

  • OUTER JOIN

  • LEFT JOIN и RIGHT JOIN

Операции JOIN используются для обычного связывания записей двух таблиц, если связующие поля обеих таблиц содержат одинаковые значения.

INNER JOIN создает внутреннее объединение таблиц по указанному в предложении ON ключу. В свою очередь, операции LEFT, RIGHT, OUTER JOIN создают внешние объединения.

Условный оператор ON представляет собой условие в любой форме из числа тех, которые можно использовать в выражении WHERE. Однако, в большинстве случаев не следует задавать критерии отбора в части ON. Если необходимо указать, какие строки должны присутствовать в результате, рекомендуется делать это в выражении WHERE.

Оператор USING служит для указания списка столбцов, по которым производится связывание (столбцы должны иметь одинаковое название). Такое выражение USING, как:

t1 LEFT JOIN t2 USING (f1,f2,f3)

семантически идентично следующему выражению ON:

t1.f1=t2.f11 AND t1.f2=t2.f22 AND t1.f3=t2.f3

Рассмотрим несколько примеров:

SELECT * FROM goods INNER JOIN vendors ON goods.vendor=vendors.code;

Результат этого запроса будет эквивалентен тому, что будет получено при выполнении следующего запроса:

SELECT * FROM goods,vendors WHERE goods.vendor=vendors.code;

Разница - в способе обработки запросов драйвером СУБД и скорости их выполнения.

Запрос на выборку всех товаров, для которых указан код производителя, и названий их производителей:

SELECT * FROM goods AS a INNER JOIN vendors AS b ON a.vendor=b.code;

Аналогичный результат будет при выполнении запроса с использованием LEFT JOIN:

SELECT * FROM goods AS a LEFT JOIN vendors AS b ON a.vendor=b.code;

Использование RIGHT JOIN приведет к выборке всех товаров и названий их производителей, а также и тех производителей, товары которых не представлены в таблице goods:

SELECT * FROM goods AS a RIGHT JOIN vendors AS b ON a.vendor=b.code;

Если запись для правой таблицы в частях ON или USING в LEFT JOIN не найдена, то для данной таблицы используется строка, в которой все столбцы установлены в NULL. Эту возможность можно применять для нахождения результатов в таблице, не имеющей эквивалента в другой таблице:

SELECT a.* FROM goods a LEFT JOIN vendors b ON a.vendor=b.code WHERE b.code IS NULL;

Этот запрос вернет 0 записей, поскольку в таблице vendors определены все записи в поле code

Операции JOIN могут быть вложенными. К сожалению, проиллюстрировать вложенность запросов на таблицах goods, vendors и categorys не представляется возможным (это связано со структурой таблиц), поэтому, в качестве примера приведен следующий запрос. Обратите внимание порядок связывания таблиц во вложенных JOIN:

SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id;

      1. Задания к лабораторной работе

Используя операторы JOIN, создать по 2-3 запроса на объединение разных типов (см. указания к лабораторной работе № 9).