Sql join msdn: Joins (SQL Server) — SQL Server

sql server — Каково поведение T-SQL JOIN по умолчанию, INNER или OUTER?

спросил

Изменено
6 лет, 11 месяцев назад

Просмотрено
25 тысяч раз

Этот вопрос уже задан для MySQL, но для Transact-SQL, что такое значение по умолчанию JOIN поведение?

То есть просто писать JOIN в запросе, синонимично написанию INNER JOIN (как в случае с MySQL), или что-то еще, например, FULL OUTER JOIN ?

  • sql
  • sql-сервер
  • tsql

3

JOIN по умолчанию INNER JOIN поведение.

Чтобы убедиться в этом, я запустил следующий код:

 DECLARE @A TABLE (x INT)
ВСТАВЬТЕ В @A
    ВЫБЕРИТЕ 1 ОБЪЕДИНЕНИЕ ВСЕХ
    ВЫБЕРИТЕ 2
ОБЪЯВИТЬ @B TABLE (x INT)
ВСТАВЬТЕ В @B
    ВЫБЕРИТЕ 2 ОБЪЕДИНИТЬ ВСЕ
    ВЫБЕРИТЕ 3
ВЫБИРАТЬ
    A. x КАК 'A.x',
    B.x КАК 'B.x'
ОТ @A A
ПРИСОЕДИНЯЙТЕСЬ к @B B
    ВКЛ А.х = В.х
 

Создает только одну строку в соответствии с поведением INNER JOIN :

 A.x | Б.х
-----+-----
2 | 2
 

Сравните это с FULL OUTER JOIN :

 ...
ВЫБИРАТЬ
    A.x КАК 'A.x',
    B.x КАК 'B.x'
ОТ @A A
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ @B B
    ВКЛ А.х = В.х
 

Это, конечно, показывает все три строки:

 A.x | Б.х
-----+-----
1 | НУЛЕВОЙ
2 | 2
НУЛЕВОЙ | 3
 

1

В T-SQL JOIN без явного типа является INNER JOIN , как указано в документации по предложению FROM (отрывок):

 [ FROM {  } [ ,... п ] ]
<источник_таблицы> ::=
{
    ...
    | <присоединенная_таблица>
    ...
}
<присоединенная_таблица> ::=
{
       ON 
    ...
}
<тип_соединения> ::=
    [ { ВНУТРЕННИЙ | { { ВЛЕВО | ПРАВО | ПОЛНЫЙ } [ ВНЕШНИЙ ] } } [  ] ]
    ПРИСОЕДИНИТЬСЯ
 

ВНУТРЕННИЙ

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

Для справки MSDN.
Перефразируя, внутреннее соединение является типом соединения по умолчанию.

https://msdn.microsoft.com/en-us/library/zt8wzxy4.aspx

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

соединений в SQL Server

В этой статье мы узнаем о соединениях в SQL Server. Я объясню все соединения SQL на примере.

Введение

Соединения используются для выборки данных из двух или более двух таблиц на основе некоторых условий. Соединения — одна из самых важных концепций SQL Server. Мы можем получить данные из нескольких таблиц, используя соединения.

Классификация соединений в SQL

 

Когда мы извлекаем данные из нескольких таблиц с одним ключевым словом, это называется соединением в формате ANSI.

Когда мы извлекаем данные из нескольких таблиц на основе условия ключевого слова where, это называется объединением в формате НЕ ANSI.

Примечание
Внутреннее соединение — это соединение по умолчанию в соединениях.

Синтаксис соединений

  Выберите */<Список столбцов> из Имя_таблицы1 <Объединение>Имя_таблицы2 в/где (Условие присоединения)    

Давайте разберемся с объединением на примере.

Создать две таблицы в SQL

  Create Table Customer(Id int,Name varchar(50),Mobile int,CustomerId int)

Создайте таблицу company(Companyid int, CompanyName varchar(50),Salary decimal(6,2))   

 Вставить данные в таблицы SQL

  вставить в значения клиента (1, 'A', 89898989,101)
вставить в значения клиентов (2, 'B', 78787877,102)
вставить в значения клиента(3,'C',98323232,103)

вставить в значения компании (101, 'C1 Tech', 5000)
вставить в значения компании (102, "Cone Tech", 1000)
вставить в значения компании (104, «Netvision Tech», 3500)
вставить в значения компании (105,'S Tech',1500)    

Equi Join в SQL

Когда мы извлекаем данные из нескольких таблиц на основе условия равенства, это называется Equi Join.

Этот процесс соединения поддерживает только один оператор, равный оператору (=)

При использовании Equi Join мы должны поддерживать общее имя столбца, и этот столбец должен содержать один и тот же тип данных.

Пример 

  выберите c.id,c.name,c.mobile,c.CustomerId,com.Companyid,com.CompanyName,com.Salary от customer c, company com, где c.CustomerId=com.Companyid    

Результат

 

Псевдоним

Псевдоним является дубликатом или альтернативным именем.

Мы можем определить имена псевдонимов на двух уровнях,

  1. Имя псевдонима на уровне столбца
  2. Псевдоним на уровне таблицы

Когда мы создаем повторяющееся имя для столбца, оно называется псевдонимом уровня столбца.

Синтаксис: <Имя столбца> AS <псевдоним столбца> 

Когда мы создаем альтернативное имя для таблиц в базе данных, оно называется псевдонимом уровня таблицы.

Синтаксис: <Имя таблицы> AS <Псевдоним таблицы>

Примечание
Псевдонимы в основном реализуются в соединениях.

Внутреннее соединение в SQL

Inner Join используется для извлечения данных из нескольких таблиц. Когда мы используем внутреннее соединение, мы должны использовать общее имя столбца, и тип данных в таблице также одинаков.

Пример 

  выберите * из клиента c внутренней компании com on c.CustomerId=com.Companyid  

Результат

Внешнее соединение в SQL

Внешнее соединение является расширением внутреннего соединения.

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

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

Тип внешнего соединения в SQL

 

Левое внешнее соединение в SQL

Извлекает совпадающие данные из нескольких таблиц, а также несоответствует данным только из левой таблицы.

Правое внешнее соединение в SQL

Извлекает совпадающие данные из нескольких таблиц, а также несоответствует данным только из правой таблицы.

Пример левого внешнего соединения

Напишите запрос, чтобы отобразить совпадающие данные от клиента и компании и несоответствующие данные из таблицы клиентов.

  выберите * от клиента c левый внешний присоединиться к компании com on c.CustomerId=com.Companyid    

Результат

 

 

Пример правого внешнего соединения

Напишите запрос для отображения соответствующих данных от клиента и компании и несопоставления данных из таблицы компаний.

  выберите * из клиента c справа внешнее соединение с компанией com on c.CustomerId=com.Companyid    

 

 

 

Перекрестное соединение в SQL

Когда мы соединяем информацию двух таблиц без каких-либо условий, это называется перекрестным соединением

В механизме перекрестного соединения каждая запись первой таблицы объединяется с каждой записью второй таблицы. .

Например, если первая таблица содержит A записей, а вторая таблица содержит B записей, то мы получим векторное произведение A*B записей.

Пример

  выберите * из компании перекрестного соединения клиента    

 

 

 

Неэквивалентное соединение в SQL

Когда мы извлекаем данные из нескольких таблиц на основе любого условия, кроме условия равенства, это называется неэквивалентным соединением.

Когда мы реализуем соединение Non-Equi, нет необходимости поддерживать общий столбец в таблице.

Поддерживает всех операторов. Чтобы понять это, давайте создадим две таблицы и вставим значения:

  создать таблицу сотрудников (id int, name varchar(50),salary int,Mid int)

создать таблицу salary_Range(sno int, Lowsal int, Highsal int)

вставить в значения сотрудников (1, 'A', 2500, 101)
вставить в значения сотрудников (2, 'B', 3200, 108)
вставить в значения сотрудников (3, 'C', 400, 103)
вставить в значения сотрудников (4, 'D', 8200, 109)
вставить в значения сотрудников (5, 'E', 1100, 101)

INSERT INTO salary_Range VALUES (1 1500 2800)
INSERT INTO salary_Range VALUES (2 3500 5200)
INSERT INTO salary_Range VALUES(3 6500 8500)   

Пример: Напишите запрос для получения сведений о сотрудниках, чья зарплата выше минимальной и ниже максимальной.

  выберите * из employee,salary_Range где (salary>Lowsal) и (salary 

Результат

 

 

Самостоятельное соединение SQL

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

Самосоединение может быть реализовано, когда любые 2 столбца имеют некоторую связь в одной и той же таблице.

Можно работать только с одной таблицей.

Когда мы используем Self Join для таблицы, мы должны создать псевдонимы для таблицы.

Без псевдонимов мы не можем реализовать Self Join.

Таблица содержит любое количество псевдонимов.

Естественное соединение в SQL

Естественное соединение используется для предотвращения дублирования столбцов в наборе результатов.

Пример

  select id,name,mobile,customerid,companyname ,salary from customer c ,company com, где c.customerid=com.companyid    

Результат

 

Синтаксис x для объединения более двух таблиц

  Выберите */<Имя столбца> из <Таблица1> <Ключ соединения><Таблица2> При <условии> <Ключ соединения> <Таблица3> при <Условии>    

Создать таблицу

  создать таблицу Reg(Regno int, Regdate datetime, cid int)

вставить в значения Reg (1, '1-3-2017', 101)
вставить в значения Reg (1, '12-4-2017', 102)
вставить в значения Reg (1,'9-6-2017',108)  

Пример

  выберите * из клиента c, компании com, регистр r, где c.