Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Предложение JOIN

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


Синтаксис SQL2003

FROM таблица [AS псевдоним] {CROSS JOIN |

{[NATURAL] [тип_соединения] JOIN соединяемая_таблица [AS псевдоним]

{ON условие_соединения! [{AND|OR> условие_соединения2] […]] | USING (столбец! […])}} [.]


Ключевые слова

FROM таблица

Определяется первая таблица или представление в соединении.

NATURAL

Указывается, что соединение (внешнее или внутреннее) таблиц должно проводиться по всем столбцам с идентичными именами. Соответственно не следует указывать условия соединения при помощи предложений ON или USING. Запрос не будет выполнен, если этот вид соединения будет производиться в таблицах, не содержащих столбцов с одинаковыми именами.

тип_соединения JOIN соединяемая_таблица

Указывается тип соединения и вторая (и все последующие) таблицы в соединении. Также вы можете определить псевдонимы для всех соединяемых_таблиц. Типы соединений следующие.

CROSS JOIN

Создается продукт полного перекрестного соединения двух таблиц. Каждая запись первой таблицы соединяется со всеми записями второй таблицы, что создает результирующий набор огромных размеров. Это предложение действует так же, как отсутствие условий соединения, и его результат также называется «координатным продуктом». Использовать перекрестные соединения не рекомендуется.

[INNER] JOIN

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

LEFT [OUTER] JOIN

Указывается, что записи будут возвращаться из таблицы, находящейся слева от инструкции JOIN. Если запись, возвращаемая из левой таблицы, не имеет соответствующей записи в правой таблице, запись все равно извлекается. В этом случае в столбцах для значений из правой таблицы будут значения NULL. Хорошей практикой является конфигурирование везде, где это возможно, соединений как левосторонних внешних (LEFT OUTER), чтобы не смешивать левосторонние и правосторонние соединения.

RIGHT [OUTER] JOIN

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

FULL [OUTER] JOIN

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

UNION JOIN

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

AS псевдоним

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

ON условие_соединения

Соединяются строки таблицы, указанной в предложении FROM, со строками таблицы, указанной в предложении JOIN. Можно использовать несколько предложений JOIN, но они все должны основываться на общем наборе значений. Эти значения обычно содержатся в столбцах с одинаковыми именами и типом данных, которые есть в обеих таблицах. Эти столбцы или, возможно, один столбец из каждой таблицы называются ключом соединения или общим ключом. В большинстве случаев, но не всегда ключ соединения — это первичный ключ одной таблицы и внешний ключ другой таблицы. Если данные в столбцах совпадают, соединение можно установить.

Условия_соединения синтаксически описываются следующим образом (заметьте, что типы соединения намеренно исключены из этого примера).

FROM имя_таблицы1 JOIN имя_таблицы2

ON имя_таблицы1.столбец1=имя_таблицы2, столбец2

[{AND | OR> имя_таблицы1.столбецЗ=имя_таблицы2.столбец4]

[…] JOIN table_name3

ON имя_таблицы1. столбецА=имя_таблицы3.столбецА

[{AND | OR > имя_таблицы1.столбецЗ=имя_таблицы2.столбец4]

[…] [JOIN…]

Для создания предложения JOIN с несколькими условиями используется оператор AND или OR. Также хорошей практикой является заключение каждой пары соединяемых таблиц в квадратные скобки, если таблиц больше двух. Это значительно упрощает чтение запроса. USING (столбец! [, …])

Предполагается условие равенства двух или более указанных столбцов, имеющихся в обеих таблицах. Этот столбец (или столбцы) должен существовать в обеих таблицах. Написать предложение USING можно несколько быстрее, чем писать …ON таблица1.столбецА=таблица2.столбецА, а результаты будут функционально эквивалентны.

Источник