oracle學習筆記(十一) 高階查詢

one發表於2019-05-19

高階查詢

分組查詢

select * from student
[where ]
[having ] --二次限定
[order by] --asc升序 desc降序 預設升序

檢視EMPLOYEE表中,員工在同一部門做相同工作且總工資大於5000,平均工資小於1500的薪水情況和人數?

select  deptno,job,count(*) from employee
group by  deptno,job
having avg(sal)<1500 and sum(sal) >5000
order by deptno;

分組查詢注意事項:
如果在查詢結果中的某些欄位上沒有使用分組函式,那麼這些欄位就必須出現在group by子句中。這是一個分組查詢的強制性規則。

--查詢每個部門的人數以及部門的總工資
--兩個列都是使用了分組函式,所以group by 語句中可以省略不寫
--但deptno沒有使用分組函式,所以要group by語句中要出現deptno
select deptno,count(empno),sum(sal) from employee
group by deptno

非等值連線

簡單地來說,連線條件就是某些值滿足在某個範圍之內

--salgrade表中三個屬性,losal-hisal是工資範圍,grade則是該範圍對應的等級
select ename,salgrade from employee,salgrade
where sal between losal and hisal;

內連線inner join(等值連線)

多用於表之間有關聯關係,如主外來鍵關係的表

select * from employee e
    join department d  --這裡相當於inner join,inner可以省略
        on e.deptno = d.deptno;
--等值連線
select * frjom employee e,department d
where e.deptno = d.deptno;

左外連線left outer join

多用於表之間有關聯關係,如主外來鍵關係的表,不過以左邊資料為標準,未匹配的以空行出現
一般outer可以省略不寫

select * from employee e
    left join depaterment d on e.deptno = d.deptno;

右外連線

與左外連線相反,以右邊資料為標準,未匹配的以空行出現,好像不常用

子查詢

單行子查詢可以出現在以下位置:

  • select語句
  • from語句
  • join子句中
  • HAVING子句中

多行子查詢:

  1. ANY(值列表): 與子查詢結果列表中的任何一個值比較。
  2. ALL(值列表):與子查詢結果列表中的所有值比較。
  3. IN(值列表): 等於列表中的任何一個值。
select * 
from employee
where sal<any(select distinct sal from employee where job='SALESMAN')

相關文章