天天看點

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

轉載于:https://www.cnblogs.com/kexing/p/10889316.html