MS SQL Server - Объединение таблиц

MS SQL Server

MS SQL Server - Объединение таблиц.

Довольно часто данные, которые требуется извлечь, находятся в нескольких таблицах. Конструкция JOIN позволяет создать объединение, то есть выбрать данные из многих (до 256) таблиц, представлений или производных таблиц.

• Не допускается прямое объединение столбцов типа NTEXT, TEXT и IMAGE.
• Если таблица объединяется сама с собой, для нее необходимо создать псевдоним.
• Подзапросы являются особым случаем объединения данных нескольких таблиц в одной команде SELECT.

Объединения делятся на три типа: ортогональные, внутренние и внешние.

Ортогональные объединения

Ортогональное объединение, также называемое «декартовым произведением», возвращает все записи из всех объединяемых таблиц. Общее количество возвращаемых записей равно произведению количества записей в каждой из таблиц. Предположим, в объединении участвуют три таблицы. Первая таблица возвращает 30 000 записей, а остальные — по 1000 записей каждая. Общее число записей, возвращаемых ортогональным объединением, будет равно 30 000*1000*1000, или 30 000 000 000 записей. Конечно, при организации ортогональных объединений следует быть очень осторожными. Примеры ортогональных объединений приведены в следующем фрагменте:

SELECT * FROM titles CROSS JOIN titleauthor 
SELECT * FROM titles, titleauthor

Первая команда создает стандартное ортогональное объединение таблиц titles и titleauthor в стандарте ANSI. Вторая команда делает то же самое, но с применением расширений TSQL.

Внутренние объединения

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

SELECT * FROM titles, titleauthor
WHERE titles.title_id = titleauthor.title_id

Внешние объединения

Внешние объединения тоже используются для связывания таблиц, однако результат возвращается в том случае, когда условие объединения не выполняется. Внешние объединения делятся на три типа: левые, правые и полные.

Левое внешнее объединение

Левое внешнее объединение возвращает все записи левой таблицы объединения даже в том случае, если записи в правой таблице не существуют. Если условие объединения не выполняется, столбцы правой таблицы заполняются неопределенными значениями NULL. Пример левого внешнего объединения приведен в следующем фрагменте:

SELECT * FROM titles, titleauthor
WHERE titles.title_id *= titleauthor.title_id

Команда возвращает все записи левой таблицы (titles) даже в том случае, если соответствующие записи правой таблицы (titleauthor) не существуют.

Правое внешнее объединение

Правое внешнее объединение возвращает все записи правой таблицы объединения даже в том случае, если записи в левой таблице не существуют. Если условие объединения не выполняется, столбцы правой таблицы заполняются неопределенными значениями NULL. Пример левого внешнего объединения приведен в следующем фрагменте:

SELECT * FROM titles, titleauthor
WHERE titleauthortitles.title_id =* titles.title_id

Команда возвращает все записи правой таблицы (titles) даже в том случае, если соответствующие записи левой таблицы (titleauthor) не существуют.

Полное внешнее объединение

Полное внешнее объединение возвращает все записи левой и правой таблиц даже в том случае, если условие не выполняется. Там, где между таблицами находится совпадение, все столбцы заполняются соответствующими значениями. При отсутствии совпадения возвращаются значения одной таблицы и NULL — для столбцов другой таблицы.

В SQL Server существуют два вида объединений: стандартные объединения ANSI и расширенные объединения T-SQL. Оба вида могут одновременно присутствовать в команде SELECT, хотя это не рекомендуется.


 

Добавить комментарий


Защитный код
Обновить