因为答案都是小编自己写的,解法可能有多种,如果您觉得我的解法有误,希望您有时间给我留言。

一、习题

(1) 查询20部门的所有员工信息。
SELECT * FROM emp where deptno =20

(2) 查询所有工种为CLERK的员工的员工号、员工名和部门号。
SELECT * FROM emp where job='CLERK'

(3) 查询奖金(COMM)高于工资(SAL)的员工信息。
SELECT * FROM emp where comm>sal

(4) 查询奖金高于工资的20%的员工信息。
SELECT * FROM emp where comm >sal*0.2

(5) 查询10号部门中工种为MANAGER和20部门中工种为CLERK的员工的信息。
SELECT * FROM emp where deptno in(10,20) and job in('MANAGER','CLERK')

(6) 查询所有工种不是MANAGER和CLERK,
SELECT * FROM emp where job !='MANAGER' and job!='CLERK'

(7) 查询有奖金的员工的不同工种。
--SELECT * FROM emp where comm is not null
SELECT job,comm FROM emp where comm is not null

(8) 查询所有员工工资与奖金的和。
SELECT t2.empno,t2.ename,t2.job,t2.mgr,t2.hiredate,t2.deptno, t1.sals FROM emp t2 left join (
SELECT empno,sum(nvl(sal,0)+nvl(comm,0)) sals FROM emp group by empno) t1 on t2.empno= t1.empno

--SELECT sum(nvl(sal,0)+nvl(comm,0)) FROM emp;
--update emp set sal=sal+50 where sal<1000

(9) 查询没有奖金或奖金低于100的员工信息。
SELECT * FROM emp where comm is null or comm<100

(10) 查询各月倒数第3天(倒数第2天)入职的员工信息。
SELECT * FROM emp where hiredate=last_day(hiredate)-2;

(11) 查询工龄大于或等于25年的员工信息。
SELECT * FROM emp where to_char(sysdate,'yyyy')-to_char(hiredate,'yyyy')>=25

(12) 查询员工信息,要求以首字母大写的方式显示所有员工的姓名。
SELECT initcap(ename) FROM emp
--upper(字符串):转换为大写
--lower(字符串):转换为小写
--initcap(字符串):首字母大写
--replace(字符串1,字符串2,字符串3):将串1中所有的串2,替换成串3

(13) 查询员工名正好为6个字符的员工的信息。
--计算字符长度 length()
SELECT ename FROM emp where length(ename)=6

(14) 查询员工名字中不包含字母“S”的员工。
--SELECT ename FROM emp where ename like '%S%'
select * from emp where ename not like '%S%'

(15) 查询员工姓名的第二字母为“M”的员工信息。
select * from emp where ename like '_M%'

(16) 查询所有员工姓名的前三个字符。
SELECT substr(ename,0,3) FROM emp;

(17) 查询所有员工的姓名,如果包含字母“S”,则用“s”替换。
SELECT replace(ename,'S','s') FROM emp

(18)查询员工的姓名和入职日期,并按入职日期从先到后进行排序。
SELECT ename,hiredate FROM emp ORDER BY hiredate

(19) 显示所有员工的姓名、工种、工资和奖金,按工种降序排序,
SELECT * FROM emp ORDER BY job desc

(20) 显示所有员工的姓名、入职的年份和月份,
--按入职日期所在的月份排序,若月份相同则按入职的年份排序。
SELECT ename,to_char(hiredate,'mm') 月,to_char(hiredate,'yyyy') 年 FROM emp order by 月,年

(21) 查询在2月份入职的所有员工信息。
SELECT * FROM emp where to_char(hiredate,'mm')=02

(22) 查询所有员工入职以来的工作期限,用“XX年XX月XX日”的形式表示。
select ename,floor((sysdate-hiredate)/365)||'年'||
floor(mod((sysdate-hiredate),365)/30)||'月'||
ceil(mod(mod((sysdate-hiredate),365),30))||'日' from emp ;

select t1.*, trunc(months_between(sysdate,hiredate)/12)||'年'||mod(trunc(months_between(sysdate,hiredate)),12)||'月'||
floor(sysdate-add_months(hiredate,trunc(months_between(sysdate,hiredate))))||'日' as 入职年限 from emp t1
(23.1) 查询至少有一个员工的部门信息。
SELECT distinct t2.* FROM emp t1 ,dept t2 where t1.deptno = t2.deptno

(23.2) 查询至少有两个员工的部门信息。
select * from dept where deptno in(
select deptno from emp group by deptno having count(*)>1);

(24) 查询工资比SMITH员工工资高的所有员工信息。
SELECT * FROM emp where sal>(SELECT sal FROM emp where ename='SMITH')

(25) 查询所有员工的姓名及其直接上级的姓名。
SELECT a.ename FROM emp a ,emp b where a.mgr=b.empno

(26) 查询入职日期早于其直接上级领导的所有员工信息。
SELECT a.* FROM emp a ,emp b where a.mgr=b.empno and a.hiredate>b.hiredate

(27) 查询所有部门及其员工信息,包括那些没有员工的部门。
SELECT * FROM dept t1 left join emp t2 on t1.deptno=t2.deptno

(28) 查询所有员工及其部门信息,包括那些还不属于任何部门的员工。
select * from emp left join dept on emp.deptno=dept.deptno order by dept.deptno ;

(29) 查询所有工种为CLERK的员工的姓名及其部门名称。
SELECT tt.ename,yy.* FROM emp tt,dept yy where tt.deptno=yy.deptno and tt.job= 'CLERK'

(30) 查询最低工资大于2500的各种工作。
SELECT * FROM (SELECT job,avg(sal)sals FROM emp group by job )where sals>2500

(31) 查询平均工资低于2000的部门及其员工信息。
SELECT * FROM emp where deptno in (SELECT deptno FROM (SELECT deptno,avg(sal) sals FROM emp group by deptno ) where sals<2000)

(32) 查询在SALES部门工作的员工的姓名信息。
SELECT * FROM emp where deptno in (SELECT deptno FROM dept where dname='SALES')

(33) 查询工资高于公司平均工资的所有员工信息。
SELECT * FROM emp where sal> (SELECT avg (sal) from emp)

(34) 查询出与SMITH员工从事相同工作的所有员工信息。
SELECT * FROM EMP WHERE JOB=(SELECT JOB FROM EMP WHERE ENAME= 'SMITH')(35) 列出工资等于30部门中某个员工的工资的所有员工的姓名和工资。

SELECT * FROM (
SELECT * FROM EMP WHERE DEPTNO= 30) WHERE ENAME='WARD'

(36) 查询工资高于30部门工作的所有员工的工资的员工姓名和工资。
SELECT * FROM emp where sal> (SELECT min(sal) FROM emp where deptno= 30)

(37) 查询每个部门中的员工数量、平均工资和平均工作年限。
SELECT DEPTNO,COUNT(JOB),AVG(SAL),AVG(to_char(SYSDATE,'yyyy')-to_char(HIREDATE,'yyyy')) FROM EMP group by DEPTNO
--SELECT AVG(to_char(SYSDATE,'yyyy')-to_char(HIREDATE,'yyyy')) FROM emp
(38) 查询从事同一种工作但不属于同一部门的员工信息。
SELECT a.ename,a.job,a.deptno,b.ename,b.job,b.deptno FROM emp a ,emp b where a.job=b.job and a.deptno != b.deptno

(39) 查询各个部门的详细信息以及部门人数、部门平均工资。
SELECT deptno,avg(sal),count(*) FROM emp group by deptno

(40) 查询各种工作的最低工资。
SELECT job,min(sal) FROM emp group by job;

(41) 查询各个部门中不同工种的最高工资。
--SELECT deptno FROM emp group by deptno
--distinct
--SELECT job,max(sal) FROM emp group by job
SELECT max(sal),deptno,job FROM emp group by deptno, job

(42) 查询10号部门员工及其领导的信息。
SELECT t1.* FROM emp t1,emp t2 where t1.empno=t2.mgr and t1.deptno=10

(43) 查询各个部门的人数及平均工资。
SELECT deptno, count(job),avg(sal) FROM emp group by deptno

(44) 查询工资为某个部门平均工资的员工的信息。
select * from emp where sal in
(select avg(sal) from emp group by deptno)

(45) 查询工资高于本部门平均工资的员工的信息。
SELECT tt.* FROM emp tt left join (SELECT deptno,avg(sal) sals FROM emp group by deptno) yy on tt.deptno=yy.deptno where tt.sal>yy.sals

(46) 查询工资高于本部门平均工资的员工的信息及其部门的平均工资。
SELECT * FROM emp tt left join (SELECT deptno,avg(sal) sals FROM emp group by deptno) yy on tt.deptno=yy.deptno where tt.sal>yy.sals

(47) 查询工资高于20号部门某个员工工资的员工的信息。
select * from emp where sal>(select min(sal) from emp where deptno=20)

(48)统计各个工种的员工人数与平均工资。
SELECT job,count(job),avg(sal) FROM emp group by job

(49) 统计每个部门中各工种的人数与平均工资。
--SELECT * FROM emp group by deptno
SELECT deptno,job, count(*),avg(sal) FROM emp group by job ,deptno

(50) 查询其他部门中工资、奖金与30号部门某员工工资、奖金都相同的员工信息
select * from emp where sal+comm in(select sal+comm from emp t1 where deptno=30)

(51) 查询部门人数大于5的部门的员工信息。
SELECT tt.* FROM emp tt where deptno =( SELECT t2.deptno FROM emp t2 group by t2.deptno having count(deptno)>5)

(52) 查询所有员工工资都大于1000的部门的信息。
SELECT t2.* FROM dept t2 left join (SELECT t1.deptno FROM emp t1 where sal>1000 ) t3 on t2.deptno=t3.deptno

(53) 查询所有员工工资都大于1000的部门的信息及其员工信息。
SELECT t1.*,t2.* FROM emp t1,dept t2 where t1.sal>1000 and t1.deptno=t2.deptno

(54) 查询所有员工工资都在900~3000之间的部门的信息。
SELECT distinct t2.* FROM emp t1,dept t2 where t1.deptno=t2.deptno or sal>900 and sal<3000

(55) 查询有工资在900~3000之间的员工所在部门的员工信息。
SELECT * FROM emp where sal>900 and sal<3000

(56) 查询每个员工的领导所在部门的信息。
SELECT t3.* FROM dept t3 left join (SELECT t1.* FROM emp t1,emp t2 where t1.empno=t2.mgr)t4 on t3.deptno=t4.deptno

(57) 查询人数最多的部门信息。
SELECT * FROM dept where deptno=(
SELECT deptno FROM (
SELECT t2.deptno ,count(t2.deptno) numbers FROM dept t1 left join emp t2 on t1.deptno=t2.deptno group by t2.deptno order by numbers desc
) where rownum= 1
)
(58) 查询30号部门中工资排序前3名的员工信息。
--SELECT * FROM EMP WHERE DEPTNO = 30 ORDER BY SAL DESC

with TT as (
SELECT rownum re,al.* FROM
(
SELECT * FROM EMP WHERE DEPTNO = 30 ORDER BY SAL DESC
) al
)
SELECT * FROM TT where re<=3 and re>0

(59) 查询所有员工中工资排序在5到10名之间的员工信息。
--SELECT * FROM EMP ORDER BY SAL
with TT as (
SELECT rownum re,al.* FROM
(
SELECT * FROM EMP ORDER BY SAL
) al
)
SELECT * FROM TT where re<=10 and re>5

(60) 查询指定年份之间入职的员工信息。(1980-1985)
SELECT * FROM EMP WHERE TO_CHAR(HIREDATE,'YYYY')>1980 AND TO_CHAR(HIREDATE,'YYYY')<1985

欢迎关注小编的公众号,更多学习视频、模板、工具(wind激活工具)!!!

ORACLE(emp)表习题与答案的更多相关文章

  1. ORACLE(student)表习题与答案

    因为答案都是小编自己写的,解法可能有多种,如果您觉得我的解法有误,希望您有时间给我留言. 题目:1. 查询student表中的所有记录的sname.ssex和class列. SELECT sname, ...

  2. oracle习题-emp表查询练习

    emp表查询练习 1 查询emp表的全部记录 Select * from emp; 2 查询出每个雇员的编号.姓名.基本工资 Select empno,ename,sal from emp; 3 查询 ...

  3. oracle之 手动创建 emp 表 与 dept 表

    说明: 有时候我们需要通用的实验数据,emp表 与 dept表  但是数据库中有没有. 这时,我们可以手动创建. -- 创建表与数据CREATE TABLE EMP(EMPNO NUMBER(4) N ...

  4. Oracle笔记(1)--emp表查询(1)

    (1)截取函数--TRUNC() 的用法 SELECT  TRUNC(789.652) 截取小数, TRUNC(789.652,2) 截取两位小数, TRUNC(789.652,-2) 取整 FROM ...

  5. Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence

    Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence 使用oracle11g插入数据时遇到这样一个问题: 1 --创建测试表-- 2 CREATE T ...

  6. oracle大表添加字段default经验分享

    当oracle单表数据量上亿时,对表进行alter table aa add column_1 varchar2(2) defalut 'Y';时,效率及安全性是必须考虑的因素. 本帖以2亿的数据表a ...

  7. 如何用分析函数找出EMP表中每个部门工资最高的员工

    EMP表是Oracle测试账户SCOTT中的一张雇员表,首先,我们来看看emp表的数据 SQL> select * from emp; EMPNO ENAME JOB MGR HIREDATE ...

  8. Oracle多表连接,提高效率,性能优化 (转)

    执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只要0.02秒,但是2张表联合统计就可能要几十表了. ...

  9. oracle 修改表的sql语句

    oracle 修改表的sql语句     1增加一个列:ALTER TABLE 表名 ADD(列名 数据类型);如:ALTER TABLE emp ADD(license varchar2(256)) ...

随机推荐

  1. Bit error testing and training in double data rate (ddr) memory system

    DDR PHY interface bit error testing and training is provided for Double Data Rate memory systems. An ...

  2. 树莓派的rc.local档(设置开机)

    为了树莓派执行命令或程序时启动.需要被添加到顺序rc.local档.这是为那些谁执行后,直接要权力树莓派没有配置.或者不希望每次都手动启动该程序很实用. 的方法是使用cron和crontab. EDI ...

  3. Swift过程控制和功能

    流量控制(Control Flow) For周期 for骑自行车和C语言,OC用法很相似,平时for()和 for in两种. 遍历可以使用下划线"_"略对值的訪问等. Switc ...

  4. 从Client应用场景介绍IdentityServer4(四)

    原文:从Client应用场景介绍IdentityServer4(四) 上节以对话形式,大概说了几种客户端授权模式的原理,这节重点介绍Hybrid模式在MVC下的使用.且为实现IdentityServe ...

  5. phpStudy2018安装完成之后,Apache刚启动就关闭(PHPStudy 从别的电脑迁移过来)

    原文:phpStudy2018安装完成之后,Apache刚启动就关闭 版权声明:本文为博主原创文章,未经博主允许不得转载.用于学习总结等. https://blog.csdn.net/pjz16102 ...

  6. 三星260亿美元的豪赌:想垄断DRAM和NAND闪存市场(规模经济让对手难以招架)

    腾讯科技讯 据外媒报道,经过50年的发展,半导体市场仍然显得非常活跃,它在今年有望增长20%.随着高增长而来的是供应短缺,这就是DRAM和闪存价格为什么今年会上涨的原因. 三星在DRAM和闪存市场占有 ...

  7. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 动作结果 前面的章节中,我们一直使用简单的 C# 类作为控制器. 虽 ...

  8. Qt Installer Framework 3.0.1 Released(功能比较强)

    We are happy to announce the release of Qt IFW 3.0.1. 3.0.1 is fully compatible with 2.0.5, which me ...

  9. WPF 寻找控件模板中的元素

    <Window x:Class="Wpf180706.Window10"        xmlns="http://schemas.microsoft.com/wi ...

  10. Prism框架在项目中使用

    本文大纲 1.Prism框架下载和说明 2.Prism项目预览及简单介绍. 3.Prism框架如何在项目中使用. Prism框架下载和说明 Prism框架是针对WPF和Silverlight的MVVM ...