黑马程序员c语言教程:Oracle指令(4)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“黑马程序员c语言教程”。
--什么时候用外连接呢?比如领导向你要所有学生的列表,顺便把所属的班级也列出来,就需要外连接
--在Where语句中使用子查询
-----雇员中最高薪水的人员名称--1,先求出最高薪水
--2,再求雇员中最高薪水的人员名称
select ename from emp where sal=(select max(sal)from emp)
--有哪些人的薪水是在整个雇员的平均薪水之上的select ename,sal from emp where sal >(select avg(sal)from emp)
-----雇员中哪些人是经理人
--1,首先查询mgr中有哪些号码--2,再看有哪些人员的号码在此出现
select distinct mgr from emp where mgr is not null order by mgr
select ename from emp where empno in(select distinct mgr from emp where mgr is not null)--where in 中不让写orderby select ename from emp where empno in(select distinct mgr from emp where mgr is not null order by mgr)
-----在From子句中使用子查询
----
--部门平均薪水的等级
--1,首先将每个部门的平均薪水求出来
--2,然后把结果当成一张表,再用这张结果表和salgrade表做连接,以此求得薪水等级
select deptno,avg(sal)from emp group by deptno select * from(select deptno,avg(sal)avg_sal from emp group by deptno)t join salgrade on avg_sal between losal and hisal;
-----每个部门最高薪水的人员名称
--1,首先将每个部门的最高薪水求出来
--2,然后把结果当成一张表,再用emp和这张结果表做连接,以此求得每个部门最高薪水的人员名称
select deptno,max(sal)from emp where deptno is not null group by deptno
select ename from emp e join(select deptno,max(sal)max_sal from emp where deptno is not null group by deptno)t on sal = max_sal and e.deptno = t.deptno
-----哪些人的薪水在部门的平均薪水之上--1,首先将每个部门的平均薪水求出来
--2,然后把结果当成一张表,再用emp和这张结果表做连接,以此求得哪些人的薪水在部门的平均薪水之上
select deptno,avg(sal)avg_sal from emp group by deptno
select * from emp join(select deptno,avg(sal)avg_sal from emp group by deptno)t on(sal>avg_sal and emp.deptno=t.deptno)-----求部门中(所有人的)平均的薪水等级,形式如:--deptno avg_grade--10 3.67--20 2.8--30 2.5--1,先求每个人的薪水等级--2,再按照部门分组,求平均数
select deptno,sal,grade from emp join salgrade on sal between losal and hisal select deptno,avg(grade)from(select deptno,sal,grade from emp join salgrade on sal between losal and hisal)t group by deptno
------------------------------使用伪字段:rownum,----------------------------------------------------用来标识每条记录的行号,行号从1开始,每次递增1
select rownum,emp.* from emp;--oracle下rownum只能使用 >= 等比较操作符,select rownum,emp.* from emp where rownum
--(错误的写法)例如,当我们要求薪水最高的前5个人时,最直接的想法可以这样写: select * from emp where rownum
select * from(select * from emp order by sal desc)t where rownum
--sql structured query language --DML--Data Manipulation Language--数据操作语言 query information (SELECT), add new rows (INSERT), modify existing rows (UPDATE)......
------------------------- --order by的用法--员工信息按照姓名正序排列select * from emp order by ename asc; --员工信息按照倒叙排列select * from emp order by ename......
------------------------- --不准用组函数(即MAX()),求薪水的最高值(面试题) --第一种解决办法: --1,先把所有薪水按照倒序排列 --2,再取第一行 select * from (select sal......
--总结一下select语法 select from where group by having order by ------------------------- -- 执行顺序very important! -- 首先执行where语句将原有记录过滤; -- 第二......
------------------------------ --为什么in的后面不能order by ?- --求部门经理人中平均薪水最低的部门名称 (思考题) 第一步,求部门经理的雇员编号select distinct mgr fro......