Mic*_*rie 22 sql t-sql sql-server
这个问题已经被要求用于MySQL,但对于Transact-SQL,默认JOIN行为是什么?
也就是说,简单地写JOIN一个与写作同义的查询INNER JOIN(就像MySQL的情况一样),或者其他什么东西,比如说也许FULL OUTER JOIN?
Mic*_*rie 21
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
Run Code Online (Sandbox Code Playgroud)
这只产生一行,与INNER JOIN行为一致:
A.x | B.x
-----+-----
2 | 2
Run Code Online (Sandbox Code Playgroud)
与此对比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
Run Code Online (Sandbox Code Playgroud)
这当然显示了所有三行:
A.x | B.x
-----+-----
1 | NULL
2 | 2
NULL | 3
Run Code Online (Sandbox Code Playgroud)
Jer*_*ert 11
在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
Run Code Online (Sandbox Code Playgroud)
内
指定返回所有匹配的行对.丢弃两个表中不匹配的行.如果未指定连接类型,则这是默认值.