PS:所有的表来源于Oracle自带的SCOTT用户下的表,初学者应该都知道的。emp表的SMITH被我删除了没有rollback,所以可能结果有点小出入。

1.选择部门30中的所有员工:
 SELECT * FROM emp WHERE deptno=30;

2.列出所有办事员(CLERK)的姓名,编号和部门编号:
 SELECT ename,empno,deptno FROM emp WHERE UPPER(job)='CLERK';

3.列出佣金(comm)高于薪金(sal)的员工:
 SELECT * FROM emp WHERE comm>sal;

4.找出佣金(comm)高于薪金百分60的员工
 SELECT * FROM emp WHERE comm>(sal*0.6);

5.找出部门10中所有经理(MANAGER) 和部门20中所有办事员(CLERK)的详细资料
 SELECT * FROM emp WHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK');

6.找出部门10中所有经理,部门20中所有的办事员,既不是经理又不是办事员,但是薪金大于或等于2000的所有员工的资料:
 SELECT * FROM emp WHERE
 (deptno=10 AND job='MANAGER') OR
 (deptno=20 AND job='CLERK') OR
 (job NOT IN('MANAGER','CLERK') AND sal>=2000);

7.找出收取佣金(comm)的员工的不同工作:[DISTINCT->消除重复的关键字]
 SELECT DISTINCT job  FROM emp WHERE comm IS NOT NULL;

8.找出不收取佣金或者佣金小于100的员工:
 SELECT * FROM emp WHERE comm IS NULL OR comm<100;

9.找个各月倒数第三天受雇的所有员工:
·使用LAST_DAY()函数
 SELECT * FROM emp WHERE (LAST_DAY(hiredate)-2)=hiredate;

10.找出早于12年前受雇的员工:
·注意使用MONTHS_BETWEEN(今天,雇佣日期)
 SELECT * FROM emp WHERE MONTHS_BETWEEN(SYSDATE,hiredate)/12>12;

11.按照首字母大写的方式显示员工姓名
 SELECT INITCAP(ename) FROM emp;

12.显示正好为5个字符的员工的姓名
 SELECT ename FROM emp WHERE LENGTH(ename)=5;

13.显示不带有"R"的员工姓名:
 SELECT ename FROM emp WHERE ename NOT LIKE '%R%';

14.显示所有员工姓名的前3个字符:
 SELECT SUBSTR(ename,0,3) FROM emp;

15.显示所有员工的姓名,并且用“x” 替换替换所有的 “A”;
 SELECT REPLACE(ename,'A','x') FROM emp;

16.显示满十年服务年限的员工的姓名和受雇日期:
 SELECT ename,hiredate FROM emp WHERE MONTHS_BETWEEN(sysdate,hiredate)/12 >10;

17.显示员工的详细资料,按姓名排序:
 SELECT * FROM emp ORDER BY ename;

18.显示员工的姓名和受雇日期,并根据其服务年限,把资料最老的员工排在第在前面:
 SELECT ename,hiredate FROM emp ORDER BY hiredate;

19.显示所有员工的姓名,工作和薪金,按工作的降序排序,若工作相同则按薪金排序:
 SELECT ename,job,sal FROM emp ORDER BY job DESC,sal;

20.显示所有员工的姓名,加入公司的年份和月份,按受雇日期所在的年排序,若年份相同则讲最早月份的员工排在最前面:
·使用TO_CHAR()函数
 SELECT ename,TO_CHAR(hiredate,'yyyy') year,TO_CHAR(hiredate,'MM') mon FROM emp ORDER BY year,mon;

21.显示在一个月为30天的情况所有员工的日薪金,并且忽略余数:
ROUND() 四舍五入
 SELECT ename,ROUND(sal/30) 日薪金 FROM emp;

22.找出在(任何年份)的2月受聘的所有员工:
 SELECT * FROM emp WHERE TO_CHAR(hiredate,'MM')=2;

23.对于每个员工,显示其加入公司的天数:
 SELECT ROUND(sysdate-hiredate)  FROM emp;

24.显示姓名字段的任何位置包含“A”的所有员工姓名:
 SELECT ename FROM emp WHERE ename LIKE '%A%';

25.以年月的方式显示所有员工的服务年限:
·年:求出总共的月/12 -> 产生小数,并不能四舍五入
·月:对12取余
 SELECT ename,
TRUNC(MONTHS_BETWEEN(sysdate,hiredate)/12) year,
TRUNC(MOD(MONTHS_BETWEEN(sysdate,hiredate),12)) mon
FROM emp;

/*-------------复杂查询,子查询,多表关联--------------*/

26.列出至少有三个员工的所有部门和部门信息。[!!]
SELECT d.*,ed.count FROM dept d,(
 SELECT deptno,COUNT(empno) count FROM emp GROUP BY deptno HAVING COUNT(empno)>3) ed
WHERE d.deptno=ed.deptno;

27.列出薪金比“ALLEN”多的所有员工
 SELECT sal FROM emp WHERE ename='ALLEN';  //子查询
SELECT * FROM emp
WHERE sal>(SELECT sal FROM emp WHERE ename='ALLEN');

28.列出所有员工的姓名及其上级的姓名:
 SELECT e.ename 员工,m.ename 上级
 FROM emp e,emp m
 WHERE e.mgr=m.empno(+);
由于KING并没有上级,所以添加一个(+)号表示左连接

29.列出受雇日期早于直接上级的所有员工的编号,姓名,部门名称
 SELECT e.ename,e.empno,d.dname
 FROM emp e,emp m,dept d
 WHERE e.mgr=m.empno AND e.deptno=d.deptno AND e.hiredate<m.hiredate
 ;

30.列出部门名称和这些部门员工的信息,同时列出那些没有员工的部门。
·左右关联的问题,即使没有员工也要显示
SELECT d.deptno,d.dname,e.empno,e.ename
FROM dept d,emp e
WHERE d.deptno=e.deptno(+);

31.列出“CLERK”的姓名和部门名称,部门人数:
·找出所有办事员的姓名和部门编号:
SELECT e.ename,d.dname,ed.cou
FROM emp e,dept d,(SELECT deptno,COUNT(empno) cou FROM emp GROUP BY deptno) ed
WHERE e.deptno=d.deptno AND job='CLERK' AND ed.deptno=d.deptno;

32.列出最低薪金大于1500的各种工作以及从事此工作的全部雇员人数
·按工作分组,分组条件是最低工资大于1500
SELECT job,MIN(sal) FROM emp
GROUP BY job HAVING MIN(sal)>1500;
·在按照
SELECT e.job,COUNT(empno)
FROM emp e
WHERE job IN(
 SELECT job FROM emp
 GROUP BY job HAVING MIN(sal)>1500
)
GROUP BY e.job;

33.列出在部门销售部工作的员工姓名,假设不知道销售部的部门编号
·根据DEPT表查询销售部的部门编号(子查询)
SELECT deptno
FROM dept
WHERE dname='SALES';
·上述为子查询
SELECT ename FROM emp
WHERE deptno=(
SELECT deptno
FROM dept
WHERE dname='SALES');

34.列出薪金高于工资平均薪金的所有员工,所在部门,上级领导,公司的工资等级。
·求出平均工资:
SELECT AVG(sal) FROM emp;
·列出薪金高于平均工资的所有雇员信息
SELECT * FROM emp WHERE sal>(
SELECT AVG(sal) FROM emp
);
·和部门表关联,查询所在部门的信息(注意KING 是没有上级的 注意右连接)
SELECT e.*,d.dname,d.loc,m.ename
FROM emp e,dept d,emp m
WHERE
e.mgr=m.empno(+) AND
e.deptno=d.deptno AND
e.sal>(
SELECT AVG(sal) FROM emp
);

·求出雇员的工资等级
SELECT e.*,d.dname,d.loc,m.ename,s.grade
FROM emp e,dept d,emp m,salgrade s
WHERE
e.mgr=m.empno(+) AND
e.deptno=d.deptno AND
e.sal>(SELECT AVG(sal) FROM emp)
AND e.sal BETWEEN s.losal AND s.hisal
;

35.列出和“SCOTT”从事相同工作的所有员工及部门名称:
·SCOTT从事的工作
SELECT job FROM emp WHERE ename='SCOTT';
·做子查询
SELECT e.*,d.dname FROM emp e,dept d
WHERE e.job=(SELECT job FROM emp WHERE ename='SCOTT')
AND e.deptno=d.deptno;
·以上的结果存在SCOTT,应该去掉
SELECT e.*,d.dname FROM emp e,dept d
WHERE e.job=(SELECT job FROM emp WHERE ename='SCOTT')
AND e.deptno=d.deptno
AND e.ename!='SCOTT';

36.列出薪金等于部门30中员工薪金的所有员工的姓名和薪金
·求出部门30中的员工薪金
SELECT sal FROM emp WHERE deptno=30;
·子查询
SELECT ename,sal FROM emp
WHERE sal IN (SELECT sal FROM emp WHERE deptno=30)
AND deptno!=30;

37.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称
·在之前的程序进行修改使用>ALL ,比最大还大
SELECT ename,sal FROM emp
WHERE sal >ALL(SELECT sal FROM emp WHERE deptno=30)
AND deptno!=30;
·再和dept关联,求出部门名称
SELECT e.ename,e.sal,d.dname
FROM emp e,dept d
WHERE e.sal >ALL(SELECT sal FROM emp WHERE deptno=30)
AND e.deptno!=30
AND e.deptno=d.deptno;

38.列出每个部门工作的员工数量、平均工资和平均服务期限
·每个部门工作的员工数量:
SELECT d.dname,COUNT(e.empno)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
·求出平均工资和服务年限
SELECT d.dname,COUNT(e.empno),AVG(sal),AVG(MONTHS_BETWEEN(sysdate,hiredate)/12) 年
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;

39.列出所有员工的姓名、部门和工资
SELECT e.ename,d.dname,e.sal FROM emp e,dept d WHERE e.deptno=d.deptno;

40.列出所有部门的相信信息和部门人数
·列出所有部门的人数
SELECT deptno dno,COUNT(empno) cou
FROM emp
GROUP BY deptno;
·把上表当成临时表:【由于40部门没有雇员,所以应该使用0表示】
SELECT d.*,NVL(ed.cou,0) FROM dept d,(SELECT deptno dno,COUNT(empno) cou
FROM emp
GROUP BY deptno) ed
WHERE  d.deptno=ed.dno(+);

41、列出各种工作的最低工资以及从事此工作的雇员姓名:
·按工作分组求出最低工资
SELECT MIN(sal) m FROM emp GROUP BY job;
·子查询
SELECT e.ename FROM emp e
WHERE e.sal IN(SELECT MIN(sal) m FROM emp GROUP BY job);

42、列出各个部门的MANAGER 的最低薪金:
·求出各个部门MANAGER的工资,按照部门分组
SELECT deptno,MIN(sal) FROM emp WHERE job='MANAGER' GROUP BY deptno;

43、列出所有员工的年工资,按照年薪从低到高排序:
·注意奖金,奖金要用NVL函数处理
SELECT ename,(sal+NVL(comm,0))*12 income FROM emp ORDER BY income

44、查询出某个员工的上级主管,并要求这些主管中的薪水超过3000
SELECT DISTINCT m.*
FROM emp e,emp m
WHERE e.mgr=m.empno AND m.sal>3000;

45、求出部门名称中带有’S‘字符的部门员工的工资合计,部门人数
·查询部门表中的部门名称,使用模糊查询,以确定部门编号
SELECT deptno FROM dept WHERE dname LIKE '%S%';

·再根据上面作为子查询,求出工资合计和部门人数
SELECT SUM(sal),COUNT(empno)
FROM emp e
WHERE e.deptno IN (SELECT deptno FROM dept WHERE dname LIKE '%S%')
GROUP BY deptno;

46、给任职日期超过10年的人加薪10%;
UPDATE emp SET sal=sal*1.1 WHERE MONTHS_BETWEEN(sysdate,hiredate)/12>10;

Oracle的完整练习,纯手工打字,可能有一两点错误。。。的更多相关文章

  1. 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!

    前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明Fine ...

  2. JAVA+PHP+阿里云组件纯手工实现POP、SMTP、IMAP开发邮件服务器(二)

    java开发邮件服务器的接收模块 用java建立socket服务端,监听端口25,实现SMTP协议.即可完成邮件服务器的接收模块. 这里要注意的是,SMTP协议其实可以分为两种.一种是你用手机.PC等 ...

  3. [置顶] 纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!

    前言 FineUI控件库发展至今已经有 5 个年头,目前论坛注册的QQ会员 5000 多人,捐赠用户 500 多人(捐赠用户转化率达到10%以上,在国内开源领域相信这是一个梦幻数字!也足以证明Fine ...

  4. 纯手工编写的PE可执行程序

    [文章标题]: 纯手工编写的PE可执行程序[文章作者]: Kinney[下载地址]: 自己搜索下载[使用工具]: C32[操作平台]: win 7[作者声明]: 只是感兴趣,没有其他目的.失误之处敬请 ...

  5. HTML5+CSS3+Jquery实现纯手工的垂直时光轴【附源码】

    前言 由于工作中需要,系统中需要记录不同时间发生的事件,为了提升用户体验,决定用时光轴来实现.[据说这个东西挺火的,QQ空间和FB都在用...] 这个时光轴是在 三生石上 这位博主的时光轴基础上修改的 ...

  6. 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!

    前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...

  7. oracle违反完整约束条件

    oracle违反完整约束条件 Oracle ORA-02292: 违反完整约束条件 (UNITELE.TA_SUB_REFERENCE3) - 已找到子记录 A表被B表引用,删除A表的时候提示ORA- ...

  8. [置顶] 纯手工打造漂亮的瀑布流,五大插件一个都不少Bootstrap+jQuery+Masonry+imagesLoaded+Lightbox!

    前两天写的文章<纯手工打造漂亮的垂直时间轴,使用最简单的HTML+CSS+JQUERY完成100个版本更新记录的华丽转身!>受到很多网友的喜爱,今天特别推出姊妹篇<纯手工打造漂亮的瀑 ...

  9. 做一个完整的纯react-naitve安卓应用【从环境安装到应用发布】

    前提:从来没有写过android 跟 ios 应用,是一个小前端.前一段时间玩了一下 react-native 感觉还不错,应用代码还未开源. 环境: win7 成果:                 ...

随机推荐

  1. 关于” fatal error C1010: unexpected end of file while looking forprecompiled header directive”问题

    其中文意思是:致命错误C1010:意想不到的文件结束而寻找预编译头文件的指令错误执行cl exe. 经过多次的查找,终于解决这问题 方法一: 在头文件中加“#include "stdafx. ...

  2. #include <list>

    clear();删除向量中的所有对象 erase(iterator it);删除it所指向的容器对象 insert(iterator it,const T&);向it所指的向量位置前插入一个对 ...

  3. 济南最新公交线路一览(BRT)

    济南最新公交线路一览(BRT) 济南BRT1路 高速公交线路 黄岗路东5:30-21:30 全福立交桥西5:30-21:30 票价1元,刷卡9折,月票有效 高速公交公司 去程:黄岗路东(BRT) - ...

  4. HTML5新特性学习-2

    本文在于巩固基础 HTML5绘图基础 <canvas>画布元素的使用 <div> <canvas id="can" width="200px ...

  5. 向PHP语言进发

    在做了几个月的.NET技术之后,我决定转去做PHP开发!人家都说,一言通,多言通!努力吧!

  6. js 多媒体audio video

    本文主要简单的介绍一下audio 和 video两个标签的用法 <audio src="music.mp3"></audio> <video src= ...

  7. Ubuntu kylin 有可能成为未来中国的主流系统吗?

    编前语: 无意间开始研究起linux,因为目前互联网很多人,包括我都隐约感觉到,windows系统在中国乃至世界在今后的流行度会逐步降低,不为什么,其中最主要的是安全问题,Microsoft 微软公司 ...

  8. not valid for Running the scheme

    The run destination iPhone6 Plus is not valid for Running the scheme 'MyApp’. Phone6 Plus's iOS 8.0 ...

  9. C语言笔记——简介与编译过程初探

    序言 从今天起,详细说说C语言.这一年多,在大多数语言和技术之间转了一大圈,终于看清楚了事实,决心静下心来好好学学C语言.初学者会认为C语言是个入门用的东西,没有必要深入研究.但对计算机领域再稍加了解 ...

  10. sql server 2008 索引

    微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclustered index,也称非聚类索引.非簇集索引) 我们举例来 ...