Oracle資料庫操作例題
select *from dept;
select *from salgrade;
--1.列出至少有一個員工的所有部門
--第1種
select deptno,count(*)
from emp e
group by e.deptno;
--第2種
select distinct deptno from emp;
--第3種
select dname,count(empno) from emp,dept where emp.deptno = dept.deptno group by dname;
--2列出薪金比SMITH多的所有員工
select emp.ename,emp.sal
from emp
where sal > (select sal from emp where ename = 'SMITH')
order by emp.sal; --3.列出所有員工的姓名及其直接上級的姓名
select e.ename,d.ename
from emp e,
emp d
where e.mgr = d.empno(+);
--4.列出受僱日期早於其它直接上級的所有員工
select e.ename
from emp e
where e.hiredate < (select d.hiredate from emp d where e.mgr = d.empno);
--5.列出部門名稱和這些部門的員工資訊,同時列出那些沒有員工的部門
select a.*,b.dname
from emp a,
dept b
where a.deptno(+) = b.deptno;
--6.列出所有CLERK(辦事員)的姓名及其部門名稱
select a.ename,b.dname
from emp a,
dept b
where a.job = 'CLERK' and a.deptno = b.deptno;
--7.列出最低薪金大於1500的各種工作
select emp.job,min(sal)
from emp
group by emp.job
having min(sal) >1500;
--8.列出在部門SALES(銷售部)工作的員工的姓名,假定不知道銷售部的部門變號
select emp.ename
from emp ,
dept
where emp.deptno = dept.deptno and dept.dname = 'SALES';
--9.列出薪金高於公司平均薪金的所以員工
select ename,sal
from emp
where sal > (select avg(sal) from emp); --10.列出與SCOTT從事相同工作的所有員工
--第1種.
select ename
from emp
where job = 'ANALYST';
--第2種.
select ename
from emp
where job = (select job from emp where ename = 'SCOTT' );
--11.列出薪金等於部門30中員工的薪金的所有員工的姓名和薪金
select ename,sal
from emp
where sal = any(select sal from emp where deptno = 30); --12.列出薪金大於在部門30中員工的薪金的所有員工的姓名和薪金
--第1種
select ename,sal
from emp
where sal > all(select sal from emp where deptno = 30);
--第二種
select ename,sal from emp where sal > (select max(sal) from emp where emp.deptno = 30);
--13.列出在每個部門工作的員工數量、平均工資和平均服務期限
select deptno,count(1),avg(sal),avg((sysdate - hiredate)/365)
from emp
group by deptno; --14.列出所有員工的姓名、部門名稱和工作
select emp.ename,dept.dname,emp.sal
from emp,
dept
where emp.deptno = dept.deptno; --15.列出所有部門的詳細資訊和部門人數
select dept.deptno,dept.dname,dept.loc,count(emp.ename)
from emp ,dept
where emp.deptno(+) = dept.deptno
group by dept.deptno,dept.dname,dept.loc;
--16.列出各種工作的最低工資
select emp.job,min(sal)
from emp
group by emp.job;
--17.列出各個部門的MANAGER(經理)的最低薪資
select dept.deptno,min(sal)
from emp,dept
where job = 'MANAGER'
group by dept.deptno ; --18.列出所有員工的年工資,按年薪從低到高排序
select emp.ename,emp.sal*12
from emp
order by emp.sal,emp.ename; --19.列出工資最高的員工資訊
select emp.ename,emp.sal
from emp
where sal = (select max(sal) from emp); --20.l列出每個工作崗位的最低工資和最高工資和平均工資且平均工資大於2000的
select emp.job, min(sal),max(sal),round(avg(sal),2)
from emp
group by job
having avg(sal) > 2000; --21.列出工資大於同部門平均工資的所以員工資訊
--第1種
select e1.*
from emp e1
where sal > (select avg(sal) from emp e2 where e1.job = e2.job
group by job); --第2種
select e1.*
from emp e1,(select job,avg(sal) as avg1 from emp
group by job)e2
where e1.job = e2.job and e1.sal > e2.avg1; --22.找出各月倒數第二天受僱的員工
SELECT e.ename
FROM emp e
WHERE e.hiredate = (LAST_DAY( e.hiredate)-2);
select *from emp; --ANY、ALL子查詢 --1.查詢出 Emp 表中比任意一個銷售員(“SALESMAN” )工資低的員工姓名、工作、工資。
SELECT e.ename,e.job,e.sal
FROM emp e
WHERE sal < any(SELECT sal FROM emp WHERE job = 'SALESMAN'); --2.查詢出銷售部( SALES)下面的員工姓名,工作,工資。
select emp.ename,emp.job,emp.sal ,a.deptno
FROM emp ,(SELECT deptno FROM dept WHERE dname = 'SALES' ) a
WHERE emp.deptno = a.deptno; --3.查詢出比所有銷售員的工資都高的員工姓名,工作,工資。
SELECT e.ename,e.job,e.sal
FROM emp e
WHERE sal > ALL(SELECT sal FROM emp WHERE job = 'SALESMAN'); --ROWID:表中的每一行在資料檔案中都有一個實體地址, ROWID 偽列返回的就是該行的實體地址。
select last_day(hiredate)-2 from emp;
SELECT *FROM EMP;