Oracle資料庫
1.基礎測試
選擇在部門 30 中員工的所有資訊
Select * from emp where deptno=30;
列出職位為(MANAGER)的員工的編號,姓名
Select empno,ename from emp where job = ?Manager ?;
找出獎金高於工資的員工
Select * from emp where comm>sal;
找出每個員工獎金和工資的總和
Select sal+comm,ename from emp;
找出部門 10 中的經理(MANAGER)和部門 20 中的普通員工(CLERK)
Select * from emp where (deptno=10 and job=?MANAGER?) or (deptno=20 and job=?CLERK?);
找出部門 10 中既不是經理也不是普通員工,而且工資大於等於 2000 的`員工 Select * from emp where deptno=10 and job not in(?MANAGER?,?CLERK) ? and sal>=2000;
找出有獎金的員工的不同工作
Select distinct job from emp where comm is not null and comm>0
找出沒有獎金或者獎金低於 500 的員工
Select * from emp where comm<500 or comm is null;
顯示僱員姓名,根據其服務年限,將最老的僱員排在最前面
select ename from emp order by hiredate ;
2.函式測試
找出每個月倒數第三天受僱的員工(如:2009-5-29)
select * from emp where last_day(hiredate)-2=hiredate;
找出 25 年前僱的員工
select * from emp where hiredate<=add_months(sysdate,-25*12);< p="">
所有員工名字前加上 Dear ,並且名字首字母大寫
select Dear || initcap(ename) from emp;
找出姓名為 5 個字母的員工
select * from emp where length(ename)=5;
找出姓名中不帶 R 這個字母的員工
select * from emp where ename not like %R%;
顯示所有員工的姓名的第一個字
select substr(ename,0,1) from emp;
顯示所有員工,按名字降序排列,若相同,則按工資升序排序
假設一個月為 30 天,找出所有員工的日薪,不計小數
找到 2 月份受僱的員工
select * from emp where to_hiredate,fmmm)=2;
3.分組函式
分組統計各部門下工資>500 的員工的平均工資、
Select avg(sal) from emp where sal>500 group by deptno ;
統計各部門下平均工資大於 500 的部門
select deptno,avg(sal) from emp group by deptno having avg(sal)>500 ; 算出部門 30 中得到最多獎金的員工獎金
Select max(comm) from emp where deptno = 30 ;
算出部門 30 中得到最多獎金的員工姓名
select ename from emp where comm = (select max(comm) from emp where deptno=30);
算出每個職位的員工數和最低工資
Select job,min(sal),count(*) from emp group by job;
列出員工表中每個部門的員工數,和部門 no
Select count(*),deptno from emp group by deptno;
得到工資大於自己部門平均工資的員工資訊
select * from emp e1,(select deptno,avg(sal) as avgsal from emp group by deptno) e2
where no=no and > al;
分組統計每個部門下,每種職位的平均獎金(也要算沒獎金的人)和總工資(包括獎金) select deptno,job,avg(nvl(comm,0)),sum(sal+nvl(comm,0)) from emp group by deptno,job;
4.多表聯查
列出員工表中每個部門的員工數,和部門 no
select deptno,count(*) from emp group by deptno;
列出員工表中每個部門的員工數(員工數必須大於 3) ,和部門名稱
select d.* , from dept d,(select deptno,count(*) cou from emp group by deptno having count(*)>3) ed where no=no;
找出工資比 jones 多的員工
select * from emp where sal>=(select sal from emp where
lower(ename)=jones);
列出所有員工的姓名和其上級的姓名
select e as lower ,e as upper from emp e1,emp e2 where
= o;
select e as lower ,e as upper from emp e1,emp e2 where = o(+);
以職位分組,找出平均工資最高的兩種職位
Select * from ( select avg(sal) from emp order by job desc ) where rownum<3; 20="" select="" e="" from="" emp="" dept="" d="" where="" and="" ="">(select max(sal) from
emp where deptno=20) and no=no
得到平均工資大於 2000 的工作職種
select job from emp group by job having avg(sal) > 2000;
分部門得到工資大於 2000 的所有員工的平均工資,並且平均工資還要大於 2500 select deptno,avg(sal) from emp where sal>2000 group by deptno having avg(sal)>2500;
得到每個月工資總數最少的那個部門的部門編號,部門名稱,部門位置 select * from dept
where
deptno = (
select no from
(select deptno,sum(sal) from emp group by deptno order by sum(sal)) e
where rownum=1
);