sql語句中(+)的作用


演示示例

說明:以下示例中,表a是員工表,有a,b,c,d四個員工,性別都是男性m。表b是工資表,有a,b,d四個員工,工資對應的是1000,2000,4000。然后分別演示帶(+)符號的和不帶(+)符號的,結果如下。

SQL> select * from a;

NAME                 SEX
-------------------- -----
a                    m
b                    m
c                    m
d                    m

SQL> select * from b;

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
d                          4000

SQL> select a.name,b.money from a,b where a.name=b.name(+);

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
d                          4000
c

SQL> select a.name,b.money from a,b where a.name=b.name;

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
d                          4000

可見,帶(+)號時,a表中的所有人都在,即使工資為空。不帶(+)時,a表中的沒有出現工資為空的員工c。

對(+)號的解釋

(+) 表示外連接。條件關聯時,一般只列出表中滿足連接條件的數據。如果條件的一邊出現(+),則另一邊的表就是主表,主表中的所有記錄都會出現,即使附表中有的記錄為空

(+)的擴展:SQL表連接

SQL表連接分類

內連接,外連接,交叉連接,其中外連接包括左連接和右連接。

SQL表連接示例

內連接

SQL> select a.name,b.money from a,b where a.name=b.name;

SQL> select a.name,b.money from a inner join b on a.name=b.name;

左連接

SQL> select a.name,b.money from a,b where a.name=b.name(+);

SQL> select a.name,b.money from a left join b on a.name=b.name;

右連接

SQL> select a.name,b.money from a right join b on a.name=b.name;

SQL> select a.name,b.money from a,b where a.name(+)=b.name;

交叉連接

SQL> select a.name,b.money from a full join b on a.name=b.name;

NAME                      MONEY
-------------------- ----------
a                          1000
b                          2000
c
d                          4000

SQL> select a.name,b.money from a,b where a.name(+)=b.name(+);
select a.name,b.money from a,b where a.name(+)=b.name(+)
                                              *
第 1 行出現錯誤:
ORA-01468: 一個謂詞只能引用一個外部聯接的表

所以(+)只是表示外連接,並不表示交叉連接。

參考:

SQL Server 數據庫 (+) 這個是什么意思

SQL表連接查詢(inner join、full join、left join、right join)


記得幫我點贊哦!

精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你需要的學習資料,還在等什么?快去關注下載吧!!!

resource-introduce

念念不忘,必有回響,小伙伴們幫我點個贊吧,非常感謝。

我是職場亮哥,YY高級軟件工程師、四年工作經驗,拒絕咸魚爭當龍頭的斜杠程序員。

聽我說,進步多,程序人生一把梭

如果有幸能幫到你,請幫我點個【贊】,給個關注,如果能順帶評論給個鼓勵,將不勝感激。

職場亮哥文章列表:更多文章

wechat-platform-guide-attention

本人所有文章、回答都與版權保護平台有合作,著作權歸職場亮哥所有,未經授權,轉載必究!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM