演示示例
說明:以下示例中,表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表連接查詢(inner join、full join、left join、right join)
記得幫我點贊哦!
精心整理了計算機各個方向的從入門、進階、實戰的視頻課程和電子書,按照目錄合理分類,總能找到你需要的學習資料,還在等什么?快去關注下載吧!!!
念念不忘,必有回響,小伙伴們幫我點個贊吧,非常感謝。
我是職場亮哥,YY高級軟件工程師、四年工作經驗,拒絕咸魚爭當龍頭的斜杠程序員。
聽我說,進步多,程序人生一把梭
如果有幸能幫到你,請幫我點個【贊】,給個關注,如果能順帶評論給個鼓勵,將不勝感激。
職場亮哥文章列表:更多文章
本人所有文章、回答都與版權保護平台有合作,著作權歸職場亮哥所有,未經授權,轉載必究!