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


高級查詢

分組查詢

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')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM