高級查詢 分組查詢 查看EMPLOYEE表中,員工在同一部門做相同工作且總工資大於5000,平均工資小於1500的薪水情況和人數? 分組查詢註意事項: 如果在查詢結果中的某些欄位上沒有使用分組函數,那麼這些欄位就必須出現在group by子句中。這是一個分組查詢的強制性規則。 非等值連接 簡單地來說 ...
高級查詢
分組查詢
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子句中
多行子查詢:
- ANY(值列表): 與子查詢結果列表中的任何一個值比較。
- ALL(值列表):與子查詢結果列表中的所有值比較。
- IN(值列表): 等於列表中的任何一個值。
select *
from employee
where sal<any(select distinct sal from employee where job='SALESMAN')