(+)运算符在PL/SQL的where子句中意味着什么?

App*_*rew 11 sql oracle11g

我有一个SQL查询类似于: -

Select Table1.attr1, Table1.attr2, Table2.attr3, Table2.attr4
From Tab1 Tabel1, Tab2 Tabel2
Where Tabel1.Attr = Tabel2.Attr (+)
Run Code Online (Sandbox Code Playgroud)

那么上面是什么意思呢?这是一个正确的外部联接吗?

Жас*_*ков 14

是的,这意味着正确加入.如果语句类似......其中Tabel1.Attr(+)= Tabel2.Attr,则必须保持连接.

  • Fasle,请参阅文档 https://www.techonthenet.com/oracle/joins.php 最后一点,值得一提的是,上面的 LEFT OUTER JOIN 示例可以使用利用外连接运算符的旧隐式语法进行重写( +) 如下(但我们仍然建议使用 LEFT OUTER JOIN 关键字语法): SELECT就有供应商.supplier_id, 供应商.supplier_name, 订单.order_date FROM 供应商, 订单 WHERE 供应商.supplier_id = 订单.supplier_id(+); (3认同)

For*_*ist 7

我认为这是一个左外连接(尽管当前批准的答案说它是一个右外连接)。来自Oracle 文档

Using Outer Joins: Examples

SELECT d.department_id, e.last_name
   FROM departments d LEFT OUTER JOIN employees e
   ON d.department_id = e.department_id
   ORDER BY d.department_id;


Users familiar with the traditional Oracle Database outer
joins syntax will recognize the same query in this form:

SELECT d.department_id, e.last_name
   FROM departments d, employees e
   WHERE d.department_id = e.department_id (+)
   ORDER BY d.department_id;
Run Code Online (Sandbox Code Playgroud)

对于 RIGHT OUTER JOIN,您可以在 = 符号之前放置 (+) 符号,例如。

SELECT d.department_id, e.last_name
   FROM departments d, employees e
   WHERE d.department_id (+) = e.department_id
   ORDER BY d.department_id;
Run Code Online (Sandbox Code Playgroud)