Oracle 小心議議內連線和外連線

2021-10-04 08:59:18 字數 2915 閱讀 3878

總目錄?震驚!史上最菜的oracle 11g教程(大佬勿進)

實際上對於兩張資料表進行多表查詢對於消除笛卡爾積來講主要是依靠的連線模式處理的,而對於表的連線模式在資料庫定義上有兩種:

※ 內連線:在之前都用了where子句消除了笛卡爾積,這就屬於內連線。

(可以看到實際上只差乙個40部門,為什麼,因為沒有任何乙個雇員屬於40部門,所以內連線的特點就是只有滿足條件的資料才會顯示,那如果要40部門出現,那是外連線了)

※ 外連線:分為三種,左外連線、右外連線、全外連線。

為了更好地觀察到連線的區別,現在已經在dept表中提供了乙個沒有雇員的部門即40部門,同時現在在emp表中增加乙個沒有部門的雇員。

insert into emp

(empno,ename,deptno)

values

(8989

,'hello'

,null)

;

現在的emp表的資料內容如下,hello是沒有部門的?:

觀察一:內連線實現效果

此時沒有部門的雇員以及沒有雇員的部門資訊都沒出現,因為null的判斷不滿足。

觀察二:使用左(外)連線,希望所有的雇員資訊都顯示出來,即便他沒有對應的部門

此時沒有部門的雇員出現了,也就是說左表的資料全部顯示了。。

觀察三:使用右(外)連線,將所有的部門資訊都顯示出來

內連線指的就是所有滿足關聯條件的資料出現,不滿足的不出現。外連線就是指定一張資料表中的全部內容都顯示,但是沒有對應的其他表資料,內容為null。

在oracle裡邊使用"(+)"來控制連線方式:

※ 左外連線:關聯欄位1=關聯欄位2(+)

※ 右外連線:關聯欄位1(+)=關聯欄位2

大部分情況下一般只會考慮內連線,但是當你發現歲所需要的資料不全的時候,就可以考慮外連線。

範例1:查詢每個雇員的編號、姓名、職位、領導姓名、領導職位

※ 確定需要的資料表:

※emp表(雇員資訊):編號、姓名、職位

※emp表(領導資訊):領導姓名、領導職位

※ 確定已知的關聯字段:

※ 雇員和領導:emp.mgr=memp.empno

第一步:查詢出每個雇員的編號、姓名、職位

第二步:加入領導資訊,需要引入自身關聯,而後消除笛卡爾積。

第三步:發現emp表(雇員資訊)資料不完整,因為不滿足於等值關聯判斷,所以要想讓雇員資訊顯示完整則必須使用外連線控制。

oracle內連線 外連線

表testa,testb,testc,各有a,b兩列 a b001 10a002 20a a b 001 10b 003 30b a b001 10c004 40c 連線分為兩種 內連線與外連線。a 內連線 內連線,即最常見的等值連線,例 select fromtesta,testb wherete...

Oracle 內連線,外連線

誰能詳細解釋一下oracle的內連線和外連線。一般的相等連線 select from a,b where a.id b.id 這個就屬於內連線。對於外連線 oracle中可以使用 來表示,9i可以使用left right full outer join left outer join 左外關聯 se...

oracle表內連線和外連線

表內連線和外連線 select from emp a,emp b where a.empno b.mgr order by a.empno 聯絡 查詢king手下是誰 內連線 select emp.empno,emp.ename,dept.dname from emp inner join dept...