簡體   English   中英

一個奇怪的Oracle SQL,帶有3個表,但只在where子句中保留了2個聯接?

[英]A strange Oracle SQL with from 3 tables but only left join 2 in where clause?

我經常看到“ from” 2個表和“ join” 2個表的示例。 這就是為什么當我看到以下Oracle SQL語句時感到奇怪:

select a.oid, m.acct, p.cdate
from a, p, m
where a.oid = p.oid(+) and a.uid = m.uid
  1. 它在DBMS中實際上發生了什么?
  2. MySQL的等效語法是什么?
  3. JOIN只是在where子句中表達某些條件的另一種方式嗎? 例如,a.id = b.id上的左連接b實際上只是在where子句中表達a.id = b.id或a.id不在(從b選擇b.id)的另一種方式

這等效於:

select a.oid, m.acct, p.cdate
from a left outer join p on (a.oid = p.oid)
inner join m on (a.uid = m.uid)

您發布的查詢是用舊語法編寫的,但與上面的選擇完全相同。 有一個簡單的例子:

select * from a, b where a.id = b.id;

也等於:

select * from a inner join b on (a.id = b.id);

兩個查詢應由優化器以相同方式處理。 連接順序也由優化程序確定。 因此,回到原始示例優化器將定義是否先應用inner join ,然后再應用left join或相反聯接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM