gpt4 book ai didi

sql - Oracle 11g 中使用 + 符号的左外连接

转载 作者:行者123 更新时间:2023-12-03 05:13:54 25 4
gpt4 key购买 nike

谁能告诉我以下两个查询是左外连接还是右外连接的示例吗?

Table Part:
Name Null? Type
PART_ID NOT NULL VARCHAR2(4)
SUPPLIER_ID VARCHAR2(4)

PART_ID SUPPLIER_ID
P1 S1
P2 S2
P3
P4

Table Supplier:
Name Null? Type
SUPPLIER_ID NOT NULL VARCHAR2(4)
SUPPLIER_NAME NOT NULL VARCHAR2(20)

SUPPLIER_ID SUPPLIER_NAME
S1 Supplier#1
S2 Supplier#2
S3 Supplier#3

显示所有零件,无论供应商是否提供:

SELECT P.Part_Id, S.Supplier_NameFROM Part P, Supplier SWHERE P.Supplier_Id = S.Supplier_Id (+)SELECT P.Part_Id, S.Supplier_NameFROM Part P, Supplier SWHERE S.Supplier_Id (+) = P.Supplier_Id

最佳答案

TableA LEFT OUTER JOIN TableB 相当于 TableB RIGHT OUTER JOIN Table A

在 Oracle 中,(+) 表示 JOIN 中的“可选”表。因此,在您的第一个查询中,它是一个 P LEFT OUTER JOIN S。在第二个查询中,它是S RIGHT OUTER JOIN P它们在功能上是等效的。

在术语中,RIGHT 或 LEFT 指定连接的哪一侧始终有记录,另一侧可能为空。因此,在 P LEFT OUTER JOIN S 中,P 将始终有一条记录,因为它位于 LEFT,但 S > 可能为空。

参见this example from java2s.com以获得更多解释。

<小时/>

为了澄清,我想我是说术语并不重要,因为它只是为了帮助可视化。重要的是您了解其工作原理的概念。

<小时/>

右与左

对于在隐式连接语法中确定 RIGHT 与 LEFT 的重要性,我发现了一些困惑。

左外连接

SELECT *
FROM A, B
WHERE A.column = B.column(+)

右外连接

SELECT *
FROM A, B
WHERE B.column(+) = A.column

我所做的只是交换了 WHERE 子句中术语的两边,但它们在功能上仍然是等效的。 (有关更多信息,请参阅我的答案中的较高部分。)(+) 的位置决定右或左。 (具体来说,如果 (+) 在右侧,则为 LEFT JOIN。如果 (+) 在左侧,则为 RIGHT JOIN。)

<小时/>

JOIN 类型

JOIN 的两种样式是隐式 JOIN显式 JOIN。它们是不同的 JOIN 编写风格,但它们在功能上是等效的。

参见this SO question .

隐式联接只是将所有表列出在一起。连接条件在 WHERE 子句中指定。

隐式 JOIN

SELECT *
FROM A, B
WHERE A.column = B.column(+)

显式联接将联接条件与特定表的包含项相关联,而不是在 WHERE 子句中。

显式 JOIN

SELECT *
FROM A
LEFT OUTER JOIN B ON A.column = B.column

这些隐式联接可能更难以阅读和理解,并且它们也有一些限制,因为联接条件混合在其他 WHERE 条件中。因此,通常不建议使用隐式 JOIN,而建议使用显式语法。

关于sql - Oracle 11g 中使用 + 符号的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com