Oracle多表查詢

2021-09-18 01:24:09 字數 2375 閱讀 7284

多表查詢就是將多個表通過指定的字段連線起來。當連線成功後這幾張表中的資料就合成一張表,並形成了復合的結果集。基本的連線方式有五種,分別是內連線(inner)、外連線(outer)、自然連線(natural)、交叉連線(cross)和自連線。

內連線也叫連線,還可以稱為普通連線,是最基本的一種連線。關鍵字是inner join,一般簡寫為join。連線還分為兩類,等值連線與不等連線。

employees表和departments表

等值連線:在連線條件中使用等於號(=)運算子比較被連線列的列值,其查詢結果中列出被連線表中的所有列,包括其中的重複列。

這兩種連線的寫法都是等值連線,雖然寫法不同,但是查詢出來的結果是一樣的,查詢結果中列出被連線表中的所有列,包括重複的列。可以在select後面加上distince去掉重複的列。

job_grades表

不等連線:在連線條件使用除等於運算子以外的其它比較運算子比較被連線的列的列值。這些運算子包括》、>=、。此外還有特殊的,例如between...and...和in。

這裡的不等連線是通過between...and...來實現的,用salary來比較lowest_sal和highest_sal從而查詢出該工資所處的等級。

外連線分為三種:左外連線(left outer join),右外連線(right outer join),全外連線(full outer join)。outer這個關鍵字可以省略不寫。在左右外連線時都會以一張表為基表,而全外連線就是以全部表為基表,基表的內容會全部顯示,再加上兩張表的查詢結果。如果基表的資料在另一張表沒有匹配的資料時,就會在結果集中顯示為空值。

這裡用的是右外連線,即把departments表中沒有關聯上employees表的資料也一併顯示出來。左外連線和全外連線的寫法與這個類似,只是把關鍵字right改為left或者full即可。

自然連線會以兩個表中具有相同名字的列為條件來進行等值連線,並去掉重複的屬性列。如果只是列名相同而資料型別不同,則會產生錯誤。

為什麼上面的查詢結果是32條而不是106條(除去乙個沒有部門的員工)。其實自然連線在不加條件的情況下是會根據兩個表之間所有的相同列來進行查詢的,這裡的employees表和departments表除了都有department_id以外還有另乙個是manager_id,所以這裡的自然連線是根據這兩個列來進行查詢匹配的。

在natural join子句建立等值連線時,可以使用using子句指定等值連線中需要用到的列,可以在有多個列滿足條件時進行選擇使用指定的列建立等值連線。使用using子句需要把natural join簡寫成join。

交叉連線又稱笛卡爾積,交叉連線不帶where子句,也就是沒有條件。它返回的結果是被連線的兩個表所有資料行的笛卡爾積,條數為第乙個表的總條數乘以第二個表的總條數。關鍵字是cross join。

employees表中有107條資料,departments表中有27條資料。

在不加條件的情況下用cross join把employees表與departments表進行連線,得到的結果集是107×27=2889。下面**執行的結果與上面**的結果是一樣的,也是笛卡爾積。所以在連線兩個表時不加連線條件或者連線條件無效時得到的結果也是笛卡爾積。

自連線就是將一張表當成多張表來進行連線。employees表中的每個員工都有自己的manager_id(經理id),並且每個經理自身又是公司的員工,自身也有經理。當我們需要將每個員工自己的名字和經理的名字都找出來時就需要用到自連線。

Oracle 多表查詢

sql 外連線 sql 按部門統計員工人數 部門號 部門名稱 人數 sql select d.deptno,d.dname,count e.empno 2 from dept d,emp e 3 where d.deptno e.deptno 4 group by d.deptno,d.dname ...

Oracle 多表查詢

等值和不等值連線查詢 為了避免笛卡爾集,可以在 where 加入有效的連線條件。oracle 連線多表查詢 在 where 子句中寫入連線條件。在表中有相同列時,在列名之前加上表名字首 select table1.column,table2.column from table1,table2 whe...

oracle 多表查詢

多表查詢 多表查詢,又稱表聯合查詢,即一條sql語句涉及到的表有多張,資料通過特定的連線進行聯合顯示.笛卡爾積 在數學中,兩個集合x和y的笛卡尓積 cartesian product 又稱直積,表示為x y.假設集合a 集合b 則兩個集合的笛卡爾積為。在資料庫中,如果直接查詢倆張表,那麼其查詢結果就...