JOIN Tables SQL Server

В этом учебном пособии вы узнаете, как использовать JOINS, как INNER, так и OUTER JOINS, в SQL Server (Transact-SQL) с синтаксисом, рисунками и примерами.

Описание

SQL Server (Transact-SQL) JOINS используются для извлечения данных из нескольких таблиц. JOIN SQL Server выполняется, когда две или более таблицы объединены в SQL-запрос.

Существует 4 разных типа соединений SQL Server:

Итак, обсудим синтаксис SQL Server JOIN, посмотрим на рисунки SQL Server JOINS и рассмотрим примеры JOIN для SQL Server.

INNER JOIN (простое соединение)

Скорее всего, вы уже писали запросы, в котором используется SQL INNER JOIN. Это наиболее распространенный тип соединения. SQL Server INNER JOINS возвращает все строки из нескольких таблиц, где выполняется условие объединения.

Синтаксис

Синтаксис INNER JOIN в SQL Server (Transact-SQL):

SELECT columns
FROM table1
INNER JOIN table2
ON table1.column = table2.column;

Рисунок

На этом рисунке SQL INNER JOIN возвращает затененную область:
inner join
SQL Server INNER JOIN вернет записи, в которых пересекаются table1 и table2.

Пример

Ниже приведен пример INNER JOIN в SQL Server (Transact-SQL):

Этот пример SQL Server INNER JOIN возвратит все строки из таблиц suppliers и orders, где в таблицах suppliers и orders будет указано соответствующее значение supplier_id.

Давайте рассмотрим некоторые данные, чтобы объяснить, как работает INNER JOINS:

У нас есть таблица, называемая suppliers с двумя полями (supplier_id и supplier_name), которая содержит следующие данные:

supplier_id supplier_name
10000 IBM
10001 Hewlett Packard
10002 Microsoft
10003 NVIDIA

Если мы выполним SQL Server оператор SELECT (который содержит INNER JOIN) ниже:

Наш результирующий набор будет выглядеть следующим образом:

supplier_id name order_date
10000 IBM 05.05.2015
10001 Hewlett Packard 08.02.2016

Строки для Microsoft и NVIDIA из таблицы suppliers будут опущены, так как значения supplier_id 10002 и 10003 не существует в обеих таблицах. Строка order_id 500127 из таблицы orders будет опущена, так как supplier_id 10004 не существует в таблице suppliers.

Старый синтаксис

В качестве последнего примечания, стоит отметить, что приведенный выше пример SQL Server INNER JOIN можно переписать, используя старый неявный синтаксис следующим образом (но рекомендуется использовать синтаксис INNER JOIN):

SELECT suppliers.supplier_id, suppliers.supplier_name, orders.order_date
FROM suppliers, orders
WHERE suppliers.supplier_id = orders.supplier_id;

LEFT OUTER JOIN

Другой тип соединения называется SQL Server LEFT OUTER JOIN. Этот тип соединения возвращает все строки из таблицы с левосторонним соединением, указанной в условии ON, и только те строки из другой таблицы, где объединенные поля равны (условие соединения выполнено).

Синтаксис

Синтаксис LEFT OUTER JOIN в SQL Server (Transact-SQL):

SELECT columns
FROM table1
LEFT [OUTER] JOIN table2
ON table1.column = table2.column;

В некоторых базах данных ключевые слова LEFT OUTER JOIN заменяются LEFT JOIN.

Рисунок

На этом рисунке, SQL Server LEFT OUTER JOIN возвращает затененную область:
inner join
SQL Server LEFT OUTER JOIN вернет все записи из table1 и только те записи из table2, которые пересекаются с table1.

Пример

Ниже приведен пример LEFT OUTER JOIN в SQL Server (Transact-SQL):

Этот пример LEFT OUTER JOIN возвращает все строки из таблиц suppliers и orders, где имеются соответствующие значение поля supplier_id в обоих таблицах.

Если значение supplier_id в таблице suppliers не существует в таблице orders, все поля в таблице orders будут отображаться как в наборе результатов.

Рассмотрим некоторые данные, чтобы понять, как работает INNER JOIN:

У нас есть таблица suppliers с двумя полями (supplier_id и supplier_name) которая содержит следующие данные:

supplier_id supplier_name
10000 IBM
10001 Hewlett Packard
10002 Microsoft
10003 NVIDIA

У нас есть еще одна таблица orders с тремя полями (order_id, supplier_id и order_date). Она содержит следующие данные:

order_id supplier_id order_date
500125 10000 05.05.2015
500126 10001 08.02.2016

Если мы запустим оператор SELECT (который содержит LEFT OUTER JOIN) ниже:

Результирующий набор будет выглядеть следующим образом:

supplier_id name order_date
10000 IBM 05.05.2015
10001 Hewlett Packard 08.02.2016
10002 Microsoft null
10003 NVIDIA null

Строки для Microsoft и NVIDIA будут включены, так как был использован LEFT OUTER JOIN. Тем не менее, вы заметите, что поле order_date для этих записей содержит значение NULL.

RIGHT OUTER JOIN

Другой тип соединения называется SQL Server RIGHT OUTER JOIN. Этот тип соединения возвращает все строки из таблицы с правосторонним соединением, указанной в условии ON, и только те строки из другой таблицы, где объединенные поля равны (условие соединения выполнено).

Синтаксис

Синтаксис RIGHT OUTER JOIN в SQL Server (Transact-SQL):

SELECT columns
FROM table1
RIGHT [OUTER] JOIN table2
ON table1.column = table2.column;

В некоторых базах данных, RIGHT OUTER JOIN заменяется на RIGHT JOIN.

Рисунок

На этом рисунке, Oracle RIGHT OUTER JOIN возвращает затененную область:

right outer join

Пример

Рассмотрим пример RIGHT OUTER JOIN SQL Server (Transact-SQL):

Этот пример RIGHT OUTER JOIN возвращает все строки из таблицы orders и только те строки из таблицы suppliers, где объединяемые поля равны.

Если значение supplier_id в таблице orders не существует в таблице suppliers, все поля в таблице suppliers будут отображаться в результирующем наборе как NULL.

Рассмотрим некоторые данные, чтобы понять, как работает RIGHT OUTER JOIN:

У нас есть таблица suppliers с двумя полями (supplier_id и supplier_name) которая содержит следующие данные:

supplier_id supplier_name
10000 Apple
10001 Google

У нас есть вторая таблица orders с тремя полями (order_id, supplier_id и order_date). Она содержит следующие данные:

order_id supplier_id order_date
500125 10000 12.05.2016
500126 10001 14.05.2016
500127 10002 18.05.2016

Если мы запустим оператор SELECT (который содержит RIGHT OUTER JOIN) ниже:

Результирующий набор будет выглядеть следующим образом:

order_id order_date supplier_name
500125 12.05.2016 Apple
500126 14.05.2016 Google
500127 18.05.2016 null

Строка для order_id 500127 будет включена, так как был использован RIGHT OUTER JOINS. Тем не менее, вы заметите, что поле supplier_name для этой записи содержит значение NULL.

FULL OUTER JOIN

Другой тип соединения называется SQL Server FULL OUTER JOIN. Этот тип соединения возвращает все строки из левой таблицы и правой таблицы с NULL - значениями в месте, где условие объединения не выполняется.

Синтаксис

Синтаксис SQL Server FULL OUTER JOIN:

SELECT columns
FROM table1
FULL [OUTER] JOIN table2
ON table1.column = table2.column;

В некоторых базах данных, FULL OUTER JOIN заменяются FULL JOIN.

Рисунок

На этом рисунке, FULL OUTER JOIN возвращает затененную область:

full outer join
SQL Server FULL OUTER JOIN будет возвращать все записи из обеих таблиц table1 и table2.

Пример

Ниже приведен пример ПОЛНОГО ВНЕШНЕГО СОСТАВА в SQL Server (Transact-SQL):

Этот пример FULL OUTER JOIN возвратит все строки из таблицы suppliers и все строки из таблицы orders и всякий раз, когда условие соединения не выполняется, то поля в результирующем наборе будут принимать значения NULL.

Если значение поля supplier_id в таблице suppliers не существует в таблице orders, то все поля в таблице orders будут отображаться в результирующем наборе как NULL. Если значение supplier_id в таблице orders не существует в таблице suppliers, то все поля в таблице suppliers будут отображаться результирующем наборе как NULL .

Рассмотрим некоторые данные, чтобы понять, как работает FULL OUTER JOIN:
У нас есть таблица suppliers с двумя полями (supplier_id и supplier_name). Она содержит следующие данные:

supplier_id supplier_name
10000 IBM
10001 Hewlett Packard
10002 Microsoft
10003 NVIDIA

У нас есть вторая таблица orders с тремя полями (order_id, supplier_id и order_date), которая содержит следующие данные:

order_id supplier_id order_date
500125 10000 12.05.2016
500126 10001 14.05.2016
500127 10004 18.05.2016

Если мы выполним оператор SELECT (который содержит FULL OUTER JOIN) ниже:

Результирующий набор будет выглядеть следующим образом:

supplier_id supplier_name order_date
10000 IBM 12.05.2016
10001 Hewlett Packard 14.05.2016
10002 Microsoft null
10003 NVIDIA null
null null 18.05.2016

Строки для Microsoft и NVIDIA будут включены, так как используется FULL OUTER JOIN. Тем не менее, вы заметите, что поле order_date для этих записей содержит значение NULL.

Строка для supplier_id 10004 также будет включена, так как используется FULL OUTER JOIN. Тем не менее, вы заметите, что supplier_id и поле supplier_name для этих записей содержат значение NULL.