Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
16.04.2013
Размер:
1.04 Mб
Скачать
      1. Многотабличные запросы.

Книга – немой учитель” Платон 428-347 гг. до н.э.

Все рассмотренные примеры имеют одно существенное ограничение. Выборка всегда делалась только из одной таблицы, хранящейся в базе данных. Для того, чтобы объединить несколько таблиц из базы данных надо выполнить между ними операции соединения. Для этого достаточно указать в предложенииFROM имена двух и более таблиц, разделив их запятыми. При этом каждому имени таблицы в спискеFROM можно присвоить псевдоним (алиас), разделяемых пробелами. Алиасы нужны для избежания неопределённости и сокращения имен таблиц.

Простое соединение двух таблиц.

SELECT т1.столб_1, столб_2, столб_3, столб_4, столб_5

FROM табл_1 т1, табл_2 т2

WHERE т1.столб_5 = т2.столб_1;

Условие поиска в виде равенства значений в атрибутах таблиц (называемых также сочетаемыми столбцами) логически эквивалентна операции соединения по равенству. Чаще всего многотабличные запросы выполняются для двух таблиц, соединяемых связью “один ко многим”. Стандарт ISO позволяет использовать следующие формы описания данного соединения.

FROM табл_1 т1 JOIN табл_2 т2 ON т1.солб = т2.столб

FROM табл_1 JOIN табл_2 USING столб

FROM табл_1 NATURAL JOIN табл_2

Соединение трех таблиц.

SELECT т1.столб_1, т1.столб_2, т2.столб_3, столб_4, столб_5

FROM табл_1 т1, табл_2 т2, табл_3 т3

WHERE т1.столб_1 = т2.столб_1 AND т2.столб_1 = т3.столб

ORDER BY т1.столб_1, т2.столб_1, столб;

В результитующую таблицу помещаются столбцы из трех соединяемых таблиц. Условия соединенния описываются по сочетаемым столбцам, описание которых забается во фразе WHERE. Результирующая таблица сортируется по сложному ключу, описанном в во фразеORDER BY.

Группировка по нескольким столбцам.

SELECT т1.столб_1, т1.столб_2, COUNT(*) AS count

FROM табл_1 т1, табл_2 т2

WHERE т1.столб_1 = т2.столб_1

GROUP BY т1.столб_1, т2.столб_1, столб

ORDER BY т1.столб_1, т2.столб_1, столб;

В результитующую таблицу помещаются столбцы из двух соединяемых таблиц. Условия соединенния описываются по сочетаемым столбцам, описание которых забается во фразе WHERE. Результирующая таблицагруппируется по паре значений в столбцах с подсчетом количества строк в группе. Затем она сортируется по сложному ключу, описанном в во фразеORDER BY. В окончательном результате имеет таблицу из трех столбцов и для каждой группы – свою строку.

Декартовое произведение как соединение.

Соединение содержит как частный случай операцию декартового произведения. Декартовое произведение двух таблиц есть таблица из множества всех возможных пар строк исходных. В стандарте ISO предусмотрен специальный вариант операции SELECTдляреализации декартова произведения таблиц.

SELECT [ DISTINCT | ALL ] { * | colomn_list }

FROM табл_1 CROSS JOIN табл_2

Выполнение соединений.

При соединении двух таблиц процедура вычисления результата в виде таблицы состоит в следующих действиях.

  1. Формируется декартовое произведение двух таблиц, указанных в предложении FROM оператора SELECT.

  2. Если в запросе присутствует предложение WHERE, то фильтарация оставляет только те строки, которые удовлетворяют заданным условиям, т.е. приводит к ограничению декартового произведения.

  3. Для каждой оставшейся строки определяется значение каждого элемента, указанного в спике столбцов оператора SELECTи в результате формируется строка результирующей таблицы.

  4. Усли в исходном запросе присутствует SELECT DISTINCT, то дублирующие по значению строки удаляются.

  5. Если в исходном запросе присутсвует ORDER BY, то строки результирующей таблицы упорядочиваются.

Открытые соединения.

Закрытое соединение (т.е. обычное) двух таблиц определяется для выполнения с помощью следующего SQL – оператора.

SELECT т1.*, т2.*

FROM табл_1 т1, табл_2 т2

WHERE т1.столб = т2.столб;

Если сторока одной таблицы не находит себе соответствия в другой таблице, то она исчезает. В случае открытого соединения такая строка не исчезает, а запоминается в таблице результата, где неопределенные столбцы принимают значение NULL. Существует три типа открытого соединения:

левое,

SELECT т1.*, т2.*

FROM табл_1 т1 LEFT JOIN табл_2 т2 ON т1.столб = т2.столб;

правое

SELECT т1.*, т2.*

FROM табл_1 т1 RIGHT JOIN табл_2 т2 ON т1.столб = т2.столб;

и полное.

SELECT т1.*, т2.*

FROM табл_1 т1 FULL JOIN табл_2 т2 ON т1.столб = т2.столб;

Ключевые слова EXISTS и NOT EXISTS.

Используются только с подзапросами. Результат их обработки равен TRUE или FALSE. Для ключевого словаEXISTS результат равенTRUE, если в возвращаемой подзапросом результирующей таблице есть хотя бы одна стока, иначе FALSE. Для ключевого словаNOT EXITSправила обработки обратные. Они используются в подзапросе предложения WHERE.

Соседние файлы в папке УП_ОПТ2