Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

DECLARE @A TABLE (x INT)
INSERT INTO @A
    SELECT 1 UNION ALL
    SELECT 2

DECLARE @B TABLE (x INT)
INSERT INTO @B
    SELECT 2 UNION ALL
    SELECT 3

SELECT 
    A.x AS 'A.x', 
    B.x AS 'B.x'
FROM @A A
JOIN @B B
    ON A.x = B.x

Это создает только одну строку, соответствующую поведению INNER JOIN:

A.x  | B.x
-----+-----
2    | 2

Контрастируйте это с помощью FULL OUTER JOIN:

...

SELECT 
    A.x AS 'A.x', 
    B.x AS 'B.x'
FROM @A A
FULL OUTER JOIN @B B
    ON A.x = B.x

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

A.x  | B.x
-----+-----
1    | NULL
2    | 2
NULL | 3

Ответ 2

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

[ FROM { <table_source> } [ ,...n ] ]   
<table_source> ::=   
{  
    ...
    | <joined_table>
    ...   
}  

<joined_table> ::=   
{  
    <table_source> <join_type> <table_source> ON <search_condition>
    ...   
}  

<join_type> ::=   
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]  
    JOIN  

ВНУТРЕННЯЯ

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

Ответ 3

Для некоторых ссылок MSDN. Чтобы перефразировать, внутреннее соединение является стандартным типом соединения.

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