Этот вопрос был задан для MySQL, но для Transact-SQL, каково поведение по умолчанию JOIN
?
То есть просто пишет JOIN
в запросе, синонимом записи INNER JOIN
(как в случае с MySQL), или что-то еще, например, FULL OUTER JOIN
?
Этот вопрос был задан для MySQL, но для Transact-SQL, каково поведение по умолчанию JOIN
?
То есть просто пишет JOIN
в запросе, синонимом записи INNER JOIN
(как в случае с MySQL), или что-то еще, например, FULL OUTER JOIN
?
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
В 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
ВНУТРЕННЯЯ
Указывает, что возвращаются все совпадающие пары строк. Выбрасывает непревзойденные строки из обеих таблиц. Если тип соединения не указан, это по умолчанию.
Для некоторых ссылок MSDN. Чтобы перефразировать, внутреннее соединение является стандартным типом соединения.