Sek*_*har 145 sql oracle join outer-join
我正在检查一些旧的SQL语句,以便记录它们并可能增强它们.
DBMS是Oracle
我不明白这样的陈述:
select ...
from a,b
where a.id=b.id(+)
Run Code Online (Sandbox Code Playgroud)
我对(+)操作员感到困惑,并且无法在任何论坛上得到它...(在引号内搜索+也不起作用).
无论如何,我使用了SQLDeveloper的"解释计划",我得到了一个输出说HASH JOIN, RIGHT OUTER,等等.
如果我(+)在查询结束时删除运算符会有什么不同吗?数据库是否必须满足某些条件((+)如有一些索引等)才可以使用?如果你能给我一个简单的理解,或者我能读到的一些好的链接,那将会非常有帮助.
谢谢!
OMG*_*ies 177
这是OUTER JOIN的Oracle特定表示法,因为ANSI-89格式(在FROM子句中使用逗号分隔表引用)没有标准化OUTER连接.
该查询将以ANSI-92语法重写为:
SELECT ...
FROM a
LEFT JOIN b ON b.id = a.id
Run Code Online (Sandbox Code Playgroud)
还应该注意的是,即使(+)工作,Oracle建议不要使用它:
Oracle建议您使用
FROM子句OUTER JOIN语法而不是Oracle连接运算符.使用Oracle连接运算符的外连接查询(+)受以下规则和限制的约束,这些规则和限制不适用于FROM子句OUTER JOIN语法:
小智 26
(+)运算符表示外连接.这意味着即使没有匹配项,Oracle仍会从连接的另一端返回记录.例如,如果a和b是emp和dept,并且您可以将员工取消分配给部门,则以下语句将返回所有员工的详细信息,无论他们是否已分配到部门.
select * from emp, dept where emp.dept_id=dept.dept_id(+)
Run Code Online (Sandbox Code Playgroud)
简而言之,删除(+)可能会产生显着性差异,但根据您的数据,您可能暂时不会注意到!
Md.*_*ous 24
在Oracle中,(+)表示JOIN中的"可选"表.所以在你的查询中,
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id(+)
Run Code Online (Sandbox Code Playgroud)
它是一个LEFT OUTER JOIN'b'表,带有'a'表.就像现代左连接查询一样.(它会返回'a'表的所有数据而不会丢失另一侧的数据可选表'b'会丢失他的数据)

SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b ON a.id=b.id
Run Code Online (Sandbox Code Playgroud)
要么
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
LEFT JOIN b USING(id)
Run Code Online (Sandbox Code Playgroud)
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id=b.id
Run Code Online (Sandbox Code Playgroud)
它只返回'a'和'b'表'id'值相同的所有数据,意味着共同的部分.
旧:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
INNER JOIN b ON a.id=b.id
Run Code Online (Sandbox Code Playgroud)
现代:
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a
JOIN b ON a.id=b.id
Run Code Online (Sandbox Code Playgroud)
要么
SELECT a.id, b.id, a.col_2, b.col_2, ...
FROM a,b
WHERE a.id(+)=b.id
Run Code Online (Sandbox Code Playgroud)
https://asktom.oracle.com/pls/asktom/f?p=100:11:::::P11_QUESTION_ID:6585774577187
https://www.w3schools.com/sql/sql_join_left.asp
| 归档时间: |
|
| 查看次数: |
208302 次 |
| 最近记录: |