最近本人整理了一些Oracle sql,现分享给大家,后续还会更新。如果有错误的地方,请指正,共同学习。贴上去的sql都是我测试过的,大家可以粘贴在自己的电脑上试试。

1.查询部门的名称,及最低收入雇员姓名,要进行表关联

select e.deptno,min(e.sal) from emp e group by e.deptno;

select ee.ename, d.dname,ee.sal from emp ee ,dept d where ee.deptno = d.deptno and ee.sal=(select min(sal) from emp);

  

2.列出最低薪金大于1500的各种工作及从事此工作的全部雇员人数

<1>按工作分组,分组条件最低工资大于1500
SELECT job,MIN(sal) FROM emp GROUP BY job HAVING MIN(sal)>1500;
<2>根据求出来的工作来求员工数
SELECT e.job,COUNT(e.empno) FROM emp e WHERE e.job IN(SELECT job FROM emp GROUP BY job HAVING MIN(sal) > 1500) GROUP BY e.job;

3. 列出薪金高于公司平均薪金的所有员工,所在部门,上级领导,公司的工资等级

<1>查询出公司的平均工资
select avg(sal) from emp; 2073.21428571429
<2>
select e.ename,e.empno,e.deptno,m.ename as leader from emp e,emp m where e.sal>(select avg(sal)from emp) and e.mgr = m.empno
<3>
select t.sal,t.ename,d.dname,t.leader,s.grade
from (select e.sal,e.ename,e.empno,e.deptno,m.ename as leader from emp e,emp m where e.sal>(select avg(sal)from emp) and e.mgr = m.empno(+)) t,dept d,salgrade s
where t.deptno = d.deptno and t.sal between s.losal and s.hisal; 网上的答案:
SELECT e.empno,e.ename,s.grade,m.empno leaderNo,m.ename as leaderName,d.deptno,d.dname,d.loc
FROM emp e,dept d,emp m,salgrade s
WHERE e.sal>(SELECT AVG(sal) FROM emp) AND e.deptno=d.deptno AND e.mgr=m.empno(+) AND e.sal BETWEEN s.losal AND s.hisal;

Oracle 经典SQL

1.    查询平均工资最低的部门及工资

步骤:查询平均工资及其部门编号
select deptno, avg(sal) from emp group by deptno select e.deptno, avg(sal) avgsal from emp e,dept d where e.deptno = d.deptno group by e.deptno order by avgsal select a.deptno,a.avgsal from (select e.deptno, avg(sal) avgsal from emp e,dept d where e.deptno = d.deptno group by e.deptno order by avgsal) a where rownum = 1

2.    查询大于本部门平均工资的员工

方法一:
select deptno, avg(sal) avgsal from emp group by deptno; select e.*,t.avgsal from emp e ,(select deptno, avg(sal) avgsal from emp group by deptno) t
where e.deptno = t.deptno and e.sal > t.avgsal
方法二:
select * from emp e where e.sal>(select avg(sal) from emp where e.deptno = deptno)

3.    查询各部门管理者的分布情况

select count(distinct(mgr)), deptno from emp where mgr is not null group by deptno

4.    查询表中的重复记录

create table emp1 as select * from emp;

insert into emp1 select * from emp;
commit; select a.rowid,a.* from emp1 a
where a.rowid >
(select min(b.rowid) from emp1 b --注意这里是组函数。如果写成了b.rowid 的话,就会报“ORA-01427单行子查询返回多个行”。
where
a.empno = b.empno
and a.ename = b.ename
and a.job = b.job
and nvl(a.mgr,1) = nvl(b.mgr,1)
and a.hiredate = b.hiredate
and a.sal = b.sal
and nvl(a.comm,1) = nvl(b.comm,1)
and a.deptno = b.deptno
)

5.    删除表中的重复记录(删除和上面的查询差不多)

delete from emp1 a
where a.rowid >
(select min(b.rowid) from emp1 b
where
a.empno = b.empno
and a.ename = b.ename
and a.job = b.job
and nvl(a.mgr,1) = nvl(b.mgr,1)
and a.hiredate = b.hiredate
and a.sal = b.sal
and nvl(a.comm,1) = nvl(b.comm,1)
and a.deptno = b.deptno
)

6.    查询emp表的工资排名前十的员工信息

方法一:
select * from (select * from emp e order by sal desc)
where rownum < 11 方法二:(百度)
select * from (select a.*,row_number() over(order by sal desc) rn from emp a )where rn < 11

7.    查询每个部门工资最高的2人

注意:这道题是求每个部门的,一想到的可能就是按部门编号分组(group by deptno )这样一来的话,后面的将会非常难写,反正我是没有写出来。
方法一:(使用ROW_NUMBER()进行排位分组 按照deptno分组)
select * from (select e.*, row_number() over(partition by deptno order by sal desc)rn from emp e) where rn <=2 方法二:(这里的emp表要经过order by sal desc 先排序,直接写emp查询的数据将是错误的。这个方法可以针对empno不相等的情况)
select * from emp a
where
a.empno in
(select b.empno from (select * from emp order by sal desc) b
where b.deptno = a.deptno and rownum <=2
)
方法三:(这个方法可以针对empno不相等的情况)
select * from emp a where 2>(select count(*) from emp b where b.deptno = a.deptno and b.sal>a.sal) 方法四:(通用查询:MySQL也适用)
SELECT *
FROM emp t1
WHERE (SELECT COUNT(1) FROM emp t2 WHERE t2.deptno=t1.deptno AND t2.sal >= t1.sal) <=2
ORDER BY deptno ASC,sal DESC

8.    查询工资比其他领导高的员工

select a.empno,a.ename,a.sal,b.empno 领导员工号,b.ename 领导姓名,b.sal 领导工资
from emp a ,emp b
where a.sal>b.sal and a.mgr = b.empno;

9.    工资由高到低拍名词

这个主要涉及了两个函数rank() 和dense_rank() 结合over(XXX) 开窗函数
select e.ename,e.sal,rank() over(order by sal desc)rank_,dense_rank() over(order by sal desc)drank from emp e

10.    查询下属个数在两个以上的员工信息(即:至少有两个员工的领导)

select m.* from emp m where (select count(*) from emp where mgr = m.empno)>2
由此题可以提高一些难度如下

11.查询每个部门中下属个数在两个以上的员工信息(即:至少有两个员工的领导)

答案就是还是上面的答案喽。因为每个员工信息中包含了部门编号(deptno)顶多在根据deptno排序就可以了。

12.查询大于部门总平均工资的部门

select d.* ,sum_sal
from dept d,
(select sum(sal) sum_sal,deptno
from emp group by deptno
) e
where
d.deptno = e.deptno
and e.sum_sal > (select avg(sum(sal))
from emp group by deptno
)

13.1981年各月入职的员工数(此题未完)

方法一:
select extract(month from hiredate) month ,count(*) from emp
where extract(year from hiredate) = 1981 group by extract(month from hiredate) order by month;

14.统计每年的入职的员工数(此题未完)

方法一:
select extract(year from hiredate) year ,count(*) from emp group by extract(year from hiredate) order by year

15.列出至少有一个员工的所有部门

select dname from dept where deptno in(select deptno from emp group by deptno having count(deptno) >=1);
或者
select d.* from dept d, (select deptno ,count(deptno) cou from emp group by deptno)t where d.deptno = t.deptno and cou>=5

2016年6月3日17:36:48 未完待续......

Oracle经典SQL的更多相关文章

  1. Oracle 经典SQL 专为笔试准备

    相信把这99条sql搞定,Oracle基本笔试简直就像玩的一样(史上最全,最经典的入门级Oracle查询语句) 1. select * from emp; 2. select empno, ename ...

  2. 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)

    基于Oracle的SQL优化(社区万众期待数据库优化扛鼎巨著) 崔华 编   ISBN 978-7-121-21758-6 2014年1月出版 定价:128.00元 856页 16开 编辑推荐 本土O ...

  3. 经典SQL语句大全以及50个常用的sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  4. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  5. olcal数据库经典SQL语句大全

    基于olacle自带的表 第一篇 -----1.列出至少有一个员工的所有部门. oracle 一些经典sql第一篇 --------1.列出至少有一个员工的所有部门.---------  SQL> ...

  6. 经典sql语句

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  7. [转] - 经典SQL语句大全

    经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...

  8. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

  9. 【Oracle经典】132个oracle热门精品资料——下载目录

    电子书为网友wglzaj精心整理,这批资料下载量好评率都非常高,广受oracle学习者欢迎.文档共整理了12个精品专题和120个热门资料的下载地址,推荐给大家希望大家喜欢. 目录0豆下载地址:http ...

随机推荐

  1. php获取html纯文本,解决编辑器手动键入空格造成的无意义空白字符(空值问题)

    在项目中,我们常常需要用到一些验证,不管是前台还是后台的,上传的问题时,需要内容不为空,但可视化编辑器的介入让手动敲入空格跳出了常规的检测.空格是一种排版的手段,但毫无内容只有空格就显得没有意义了,今 ...

  2. 问题(the question)

    I want to know: 1. 软件开发最主要的目的 是什么? 2. 软件开发是否同样需要模,和架构? 3.软件开发与其他程序的需求分析是否相似,有什么不同之处? 4.软件开发最常用的计算机语言 ...

  3. MVC入口程序 | 简单调用及实例化

    入口程序: 现在大多采用单一入口机制,单一入口就是指在一个web应用程序中,所有的请求都指向一个脚本文件.通俗点说就是一幢大楼只有一个大门入口可以进去... 目录: 建立一个控制器/模型/视图调用函数 ...

  4. java 正则表达式

    1.首先是说明一些容易混淆的符号 \w    Matches any word character. \W    Matches any non-word character. 如果是在java中的话 ...

  5. 使用BigDecimal进行精确运算以及格式化输出数字

    一.引言    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 ...

  6. metasploit模块字典爆破tomcat

    祭出神器MSF 再用auxiliary/scanner/http/tomcat_mgr_login 这个辅助模块爆破下弱口令 这里就用模块自带的字典吧   然后简单配置下.RUN 需要自己定义字典的话 ...

  7. [不好分类]SD卡无法读取,显示RAW

    上周同事拿来了一个8G的SD卡,插入读卡器后显示“需要格式化”.无法读取.文件格式处显示“RAW”,磁盘大小显示0字节. 处理步骤如下: 1.按照提示,格式化,选择“快速格式化”. 2.采用数据恢复软 ...

  8. javascript 数字进制转换

    //十进制转其他 var x=110; alert(x); alert(x.toString(8)); alert(x.toString(32)); alert(x.toString(16)); // ...

  9. python学习道路(day12note)(mysql操作,python链接mysql,redis)

    1,针对mysql操作 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 设置密码 update user set password ...

  10. java中类继承,到底继承了什么?

    继承的最大好处就是为了实现代码的复用.那么,子类到底从父类得到的什么呢? 实例成员 父类的private成员不会被子类继承,子类不能访问.但是子类对象的确包含父类的私有成员. 父类的 包访问成员 继承 ...