前面寫了一些高階查詢中的基礎部分。在這裡寫寫多表查詢的一些方法。這裡的sql語句的字段講得不太細,因為時間問題,大家只要看思維意思即可。
但這個「笛卡稱集」表是乙個無效表,只是乙個兩表的組合。兩表關聯,列數相加,行數相乘,得到了6列6行,我們需要用where條件語句去把兩表關聯的字段值提取出來,這才是我們所要的關聯表。
示例:查詢員工的資訊,要求顯示:員工號,姓名,月薪,部門名稱(所謂等值連線,就是條件中用=號來判斷的連線)從表中可以看出,這兩表關聯欄位為deptno
select e.empno,e.ename,e.sal,d.dname from emp e, dept d where e.deptno = d.deptno
這裡查詢的是工資的範圍。s表中有兩個字段,這是取的是大於s.lo下限,小於s.hi上限
select e.empno,e.ename,e.ename,e.sal,s.grade from emp e, salgrade s where e.sal between s.lo and s.hi
外連線就是把對於連線條件不成立的記錄,也包含在最後的結果當中,如果我們用的只是等值連線的話,而要查詢的是各部門的人數,如果有乙個部門沒有人,在等值
連線那邊,就不會顯示出來,但我們要的是顯示所有部門的人數,就算部門沒人也要顯示。這就要用到外連線了。可以以哪乙個為主表,主表中的所有字段值都會顯示
出來,而子表中字段值只會在與主表相同的情況下的字段值才會顯示,不同的,將會去除。這講的有點抽象,那把外連線分為兩部分,這就要看你要以哪個表為主了。
左外連線:當連線條件不成立的時候,等號左邊的表仍然被包含;
where e.deptno = d.deptno(+)
右外連線,當連線條件不成立的時候,等號右邊的表仍然被包含;
where e.deptno(+) = d.deptno
自連線是針對一張表當成兩表連線,通過別名,將同一張表視為兩張表,以下語法是在同一張表中查詢員工所對應的上級領導的名字,
另外要注意的是,自連線不適合操作大表,也就是字段值很多的表。我們前面有談到「笛卡稱集」,只要是多表連線,就會產生「笛卡稱集」 。也就是說,自連線如果只是
當成兩表連線的話,如果有3個字段值,那他產生的「笛卡稱集」數就是3的平方,也就是9個count(*)、如果你表很大。這樣產生的「笛卡稱集」就太龐大了。但也可以使
用「層次查詢」解決上面的問題
select e.ename 員工姓名,b.ename 老闆姓名 from emp e, emp b where e.mgr = b.empno
Oracle資料庫 高階子查詢
子查詢是巢狀在sql與劇中的另乙個select語句 子查詢 內查詢 在主查詢執行之前執行 主查詢 外查詢 使用子查詢的結果 查詢工資大於149號員工工資的員工的資訊 主查詢與子查詢返回的多個列進行比較 多列子查詢中的比較分為兩種 查詢與141號或174號員工的manager id和departmen...
oracle資料庫(三) 高階查詢
根據員工的上級編號進行層級關聯 select level empno,ename,mgr from emp connect by prior empno mgr start with mgr is null order bylevel translate expr,from string,to st...
資料庫 高階查詢
巢狀查詢也叫子查詢,是把內層的查詢結果作為外層的查詢條件 語法格式 select 欄位名列表 from 表名 where 欄位名 運算子 select 欄位名 from 表名 where 條件 注意 外層的where的條件必須和內層的select查詢的欄位名一樣,個數也一樣 如 把攻擊值小於平均攻擊...