Оператор SELECT. Выбор данных из таблицы. Псевдонимы столбцов. Удаление повторяющихся строк, страница 6

INNER JOIN publisher p

ON a.city = p.city;

При выборке данных из нескольких таблиц применяется их объединение. Основные характеристик объединения:

1. Таблицы объединяются построчно, при выполнении указанных в конструкции ON условий.

2. Строки, не соответствующие условию, могут быть включены в некоторые типы объединений.

3. Обычно значения в столбцах связываются отношением равенства, но можно применять и другие операции сравнения.

4. Объединение по равенству – частный случай тэта-объединения.

5. Чаще всего связывают ключевые столбцы, однако можно связать любые столбцы, если их типы данных совместимы.

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

7. Связываемые столбцы не обязаны иметь одинаковые имена.

8. Можно связывать поэтапно (аналогично вложенным запросам) несколько таблиц. Одновременно выполняется объединение (соединение) двух таблиц.

9. Значения NULL в связывающих столбцах в объединение не попадут, т.к. они не могут быть равны.

10. Значения NULL могут встретиться в некотором столбце в случае перекрестного либо внешнего объединения.

11. Для ускорения запроса рекомендуется индексировать связывающие столбцы.

Этапность выполнения запроса с объединением:

1. Применить условия объединения (JOIN).

2. Применить условия поиска (и объединения) (WHERE).

3. Сгруппировать (GROUP).

4. Применить к группам условия (HAVING).

5. Сортировать результат (ORDER).

Для объединения может применяться не только конструкция JOIN (стандарт ANSI-92). Более ранние стандарты рекомендовали применять WHERE. Оба варианта до сих пор применяются на практике.

Пример. WHERE - объединение. (Запрос Alias-Tables#WHERE). (См. отличие от запроса Alias-Tables)

SELECT

         au_fname, au_lname, a.city

FROM authors AS a, publisher AS p

WHERE a.city=p.city;

Как видно из примера, условие конструкции WHERE может содержать как критерий отбора строк одной таблицы, так и критерий сцепления строк разных таблиц (плюс критерий отбора). Всякое условие объединения таблиц фактически работает как фильтр для декартова произведения (перекрестного) таблиц.

Можно задать более одного условия для объединения. Как правило, в этом случае применяют оператор AND. Оператор OR тоже допускается, однако смысл условия-результата труднее понять, поэтому такие условия избегают применять. Большинство запросов со сложным условием можно реконструировать в запрос с вложенным запросом.

Примечание. Связываемые данные могут иметь не идентичные типы. Они должны быть совместимы либо СУБД может их конвертировать. Можно применить функции для конвертации в тексте запроса.

Синтаксис произвольного объединения

SELECT столбцы

FROM таблица1 тип-объединения таблица 2

ON условие-объединения

[WHERE условие-отбора-строк]

[GROUP BY условие-группировки]

[HAVING условие-отбора-групп]

[ORDER BY столбцы]

Допускаются несколько типов объединения:

- INNER JOIN – внутреннее,

- LEFT OUTER JOIN – левое внешнее,

- RIGTH OUTER JOIN – правое внешнее,

- FUUL OUTER JOIN – полное внешнее,

- NATURAL JOIN – естественное,

- CROSS JOIN – перекрестное.

Условие объединения имеет форму:

[таблица1.] столбец оператор-сравнения [таблица2.]столбец

Оператор сравнения обычно оператор равенства, но допускаются и любой оператор сравнения >, <, >=, <=, <>.

Примечание. Стандартный SQL допускает применение предложения USING вместо JOIN. Ограничение – связываемые столбцы имеют одинаковые имена.

FROM таблица1 тип-объединения таблица 2 USING (столбцы)

Access и Microsoft SQL не поддерживают эту конструкцию.

Перекрестное объединение

Перекрестное объединения также называют Декартовым лили прямым произведением. Результатом являются все возможные комбинации строк двух таблиц, каждая строка первой таблицы объединяется с каждой строкой второй. Условия объединения не применяются.