nop*_*ole 5 mysql sql join inner-join outer-join
对于SQL,什么时候开始需要始终使用单词"Inner Join"而不是通过以下方式隐式加入:
select * from t1, t2 where t1.ID = t2.ID;
Run Code Online (Sandbox Code Playgroud)
?它只是为了风格或区分外部联接还是有其他原因吗?
INNER 和 OUTER JOIN 语法在 SQL-92 规范中得到了形式化。在许多数据库产品(例如 MySQL 和 SQL Server)中,您可以省略内连接中的“INNER”一词,而仅使用“JOIN”。同样,许多数据库产品允许您省略“OUTER”一词,而仅使用“LEFT JOIN”或“RIGHT JOIN”进行外连接。旧的外连接语法*=or=*在许多情况下会产生歧义。许多产品已经或很快将停止支持旧的外连接语法。
在 SQL-92 规范之前,供应商各自使用自己的语法来表示外连接。即,*=不是通用的(我似乎记得有人使用?=)。此外,他们没有以通用的方式实现外连接。举个例子:
Table1
Col1 Col2
1 Alice
2 Bob
Table2
Col1 Col2
1 1
2 2
3 3
4 4
Select
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
Run Code Online (Sandbox Code Playgroud)
上述查询通常会产生:
1 1 1 Alice
2 2 2 Bob
3 3 Null Null
4 4 Null Null
Run Code Online (Sandbox Code Playgroud)
现在尝试:
Select
From Table1, Table2
Where Table2.Col1 *= Table1.Col1
And Table2.Name = 'Alice'
Run Code Online (Sandbox Code Playgroud)
在某些数据库产品上,您将得到:
1 1 1 Alice
Run Code Online (Sandbox Code Playgroud)
在其他方面你会得到:
1 1 1 Alice
2 2 Null Null
3 3 Null Null
4 4 Null Null
Run Code Online (Sandbox Code Playgroud)
简而言之,对于未保留表的过滤应该在连接之前还是之后应用是不明确的。
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |