Внутренние объединения в стандарте SQL2

Изучить все варианты легче всего, рассматривая по очереди каждый тип объединения. Например, стандартное внутреннее объединение таблиц girls и boys на языке SQL1 можно выразить так:

В стандарте SQL2 это по-прежнему допустимый оператор, но его можно также записать следующим образом:

Обратите внимание на то, что две объединяемые таблицы соединяются явно посредством операции join, а условие поиска, описывающее объединение, находится теперь в предложении on внутри предложения from. В условии поиска, следующем за ключевым словом on, могут быть заданы любые критерии сравнения строк двух объединяемых таблиц. Предположим, например, что таблицы boys и girls были расширены путем добавления столбца age. Вот объединение, в котором связываются пары девочка/мальчик из одного города, а также требуется, чтобы мальчик и девочка в каждой паре были одного возраста:

В этих простых двухтабличных объединениях все содержимое предложения where просто перешло в предложение on, и предложение on не добавляет ничего нового в язык SQL. Вспомните, однако, что во внешних объединениях трех и более таблиц результат запроса зависит от порядка, в котором производятся объединения.

Стандарт SQL2 допускает еще один вариант запроса на простое внутреннее объединение таблиц girls и boys. Так как связанные столбцы этих таблиц имеют одинаковые имена и сравниваются на предмет равенства (что делается довольно часто), то можно использовать альтернативную форму предложения on, в которой задается список имен связанных столбцов:

В предложении using перечисляются через запятую имена связанных столбцов; они должны быть идентичными в обеих таблицах. Это предложение полностью эквивалентно предложению on, в котором каждая пара связанных столбцов задается явно, но намного компактнее и, следовательно, легче для понимания. Конечно, если связанные столбцы имеют разные имена в таблицах boys и girls, то необходимо использовать предложение on или where со знаком равенства. Предложение on требуется использовать также в том случае, если объединение не производится по равенству связанных столбцов. Например, если вы хотите выбрать пары девочка/мальчик, в которых девочка старше мальчика, то должны задать объединение с помощью предложения on:

Наконец, имеется еще один, последний вариант этого простого запроса, иллюстрирующий одну особенность предложения from в стандарте SQL2. Объединение двух таблиц, в котором связанные столбцы имеют идентичные имена, называется естественным объединением, так как обычно это действительно самый "естественный" способ объединения двух таблиц. Запрос на выборку пар девочка/мальчик, живущих в одних и тех же городах и имеющих тот же самый возраст, можно выразить как естественное объединение следующим образом:

Если задано ключевое слово natural, предложения on и using могут отсутствовать в запросе на объединение, так как в естественном объединении точно определено условие поиска для объединения двух таблиц — сравниваются все столбцы с идентичными именами в обеих таблицах.

В стандарте SQL2 определено, что объединение двух таблиц по умолчанию является внутренним объединением. Во всех предыдущих примерах можно опустить ключевое слово inner, и полученные в результате запросы по-прежнему будут действительными операторами стандарта SQL2, имеющими тот же самый смысл.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: