数据库相关问题

select有那些字句
1.from2.where 3.group by 4.having 5.order by 6.limit
他们的执行顺序是什么?
from--where--select--group by--having--order by,
一、多表查询
SELECT 列名,列名...
FROM 表名 表的别名,表名 表的别名....
WHERE 条件
ORDER BY 排序字段。。。

1、笛卡尔积:是多张表记录的乘积。
SELECT *
FROM emp,dept
WHERE ename='SMITH';

SELECT * FROM emp;
SELECT * FROM dept;

SELECT ename,emp.deptno,dname
FROM emp,dept;

2、等值连接,两张表中存在含义相同,值相等的列的
SELECT *
FROM emp,dept
WHERE emp.deptno=dept.deptno;

SELECT a.deptno,ename,dname
FROM emp a,dept b
WHERE A.deptno=b.deptno
ORDER BY A.deptno;

3、不等值连接
SELECT * FROM salgrade;

SELECT *
FROM emp A,salgrade b
--WHERE a.sal >=b.losal and a.sal<=b.hisal;
WHERE sal between losal and hisal;

---查询员工的姓名,员工的部门名称,员工的工资等级
SELECT ename,dname,grade
FROM emp,dept,salgrade
WHERE emp.deptno=dept.deptno AND sal BETWEEN losal AND hisal;

4、自身连接:
SELECT * FROM emp;

SELECT *
FROM emp A,emp b
WHERE a.ename='SMITH' and a.mgr = b.empno;

SELECT *
FROM emp A,emp b
WHERE A.mgr = b.empno;

---查询员工的姓名,员工的部门名称,员工的工资等级,员工对应的领导姓名,领导的部门名称,领导的工资等级
SELECT e.ename 员工姓名,d.dname 员工的部门名称,s.grade 员工的工资等级,m.ename 领导的姓名,md.dname 领导的部门名称,ms.grade 领导的工资等级
FROM emp e,dept d,salgrade s,emp m,dept md,salgrade ms
WHERE e.deptno=d.deptno AND e.sal BETWEEN s.losal AND s.hisal AND e.mgr=m.empno AND m.deptno=md.deptno
and m.sal between ms.losal and ms.hisal;

5、外连接:
SELECT *
FROM emp,dept
WHERE emp.deptno(+)=dept.deptno;

SELECT *
FROM emp,dept
WHERE dept.deptno=emp.deptno(+);

6、SQL1999:
(01)CROSS JOIN:交叉连接,笛卡尔积
语法:table1 CROSS JOIN table2

SELECT *
FROM emp CROSS JOIN dept;
=
SELECT *
FROM emp,dept;

(02)NATURAL JOIN:自然连接
语法:table1 NATURAL JOIN table2

SELECT *
FROM emp NATURAL JOIN dept;

(03)JOIN...USING(公共列名)
语法:table1 JOIN table2 USING(公共列)

SELECT *
FROM emp JOIN dept USING(deptno);

(4)JOIN...ON 连接条件
语法:table1 join table2 on 连接条件;

SELECT *
FROM emp JOIN dept ON emp.deptno=dept.deptno;

(05)LEFT JOIN...ON 连接条件
语法:table1 LEFT JOIN table2 ON 连接条件

SELECT *
FROM dept left JOIN emp ON emp.deptno=dept.deptno;

(06)RIGHT JOIN...ON 连接条件
语法:table1 RIGHT JOIN table2 ON 连接条件

SELECT *
FROM emp RIGHT JOIN dept ON emp.deptno=dept.deptno;

(07) FULL JOIN...ON 连接条件
语法:table1 full JOIN table2 ON 连接条件

SELECT *
FROM emp e FULL JOIN emp m ON e.mgr = m.empno
ORDER BY e.empno;

二、分组查询
1、分组函数:又称为统计函数,聚合函数
sum():求和
avg():求平均值
MAX():求最大值
MIN():求最小值
count():求个数
*:统计的表的记录数
列名:统计该列不为null的个数

注意:统计时,不对Null值进行处理

SELECT sum(sal),avg(sal),MAX(sal),MIN(sal),count(empno)
FROM emp;

SELECT
FROM
WHERE
GROUP BY 分组字段,分组字段。。。
HAVING 组过滤条件
ORDER BY

---按照职务不同来分组统计工资总和,人数
SELECT job,sum(sal),count(empno)
FROM emp
GROUP BY job;

---查询emp表中不同的职务
SELECT DISTINCT JOB
FROM emp;

SELECT JOB
FROM emp
GROUP BY JOB;

---查询不同的领导工号的个数
SELECT count(distinct mgr)
FROM emp;

---统计各个部门不同职务的员工薪水的总和,平均工资
SELECT deptno,job,sum(sal),avg(sal)
FROM emp
GROUP BY deptno,JOB
ORDER BY deptno;

---统计各个部门不同职务的员工薪水的总和,平均工资,部门名称,职务
SELECT dname,JOB,sum(sal),avg(sal)
FROM emp,dept
WHERE emp.deptno=dept.deptno
GROUP BY dname,JOB
ORDER BY dname;

---统计各个部门不同职务的员工薪水的总和,平均工资,部门编号,部门名称,部门位置,职务
SELECT dept.deptno,dname,loc,JOB,sum(sal),avg(sal)
FROM emp,dept
WHERE emp.deptno=dept.deptno
GROUP BY dept.deptno,dname,loc,JOB
ORDER BY dname;

---统计不同工资等级的员工人数,工资总和,工资平均值
SELECT grade,sum(sal),round(avg(sal),2),count(empno)
FROM emp,salgrade
WHERE sal BETWEEN losal AND hisal
GROUP BY grade;

---统计不同工资等级的员工人数,工资总和,工资平均值,要求员工的 人数要大于2
SELECT grade,sum(sal),round(avg(sal),2),count(empno)
FROM emp,salgrade
WHERE sal BETWEEN losal AND hisal
GROUP BY grade
HAVING count(empno)>2;

---查询各个部门的平均工资大于2000的部门编号和平均工资
SELECT deptno,avg(sal)
FROM emp
GROUP BY deptno
HAVING avg(sal)>2000;

where与having的区别:
WHERE是在分组前进行过滤的,where的后面不能直接使用分组函数做比较
HAVING是在分组后进行过滤的。

3、分组函数的嵌套
---查询部门平均工资最高的平均工资
SELECT MAX(avg(sal))
FROM emp
GROUP BY deptno;

注意:当select后面的分组函数嵌套使用时,SELECT后面不能有任意列名,只能存在嵌套分组函数

第六章课后作业:
1.查询部门平均工资在2500元以上的部门名称及平均工资。
SELECT dname,avg(sal)
FROM emp,dept
WHERE emp.deptno=dept.deptno
GROUP BY dname
HAVING avg(sal)>2500;
2.查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。
SELECT JOB,avg(sal)
FROM emp
WHERE upper(JOB) NOT LIKE 'SA%'
GROUP BY JOB
HAVING avg(sal)>2500
ORDER BY 2 desc;
3.查询部门人数在2人以上的部门名称、最低工资、最高工资,并对求得的工资进行四舍五入到整数位。
SELECT dname,round(MIN(sal)),round(MAX(sal))
FROM emp,dept
WHERE emp.deptno=dept.deptno
GROUP BY dname
HAVING count(empno)>2;
4.查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。
SELECT JOB,sum(sal)
FROM emp
WHERE upper(JOB)!='SALESMAN'
GROUP BY JOB
HAVING sum(sal)>=2500;
5.显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序。
SELECT m.empno,m.ename,min(e.sal)
FROM emp e,emp m
WHERE e.mgr=m.empno(+)
GROUP BY m.empno,m.ename
HAVING MIN(e.sal)>=3000
ORDER BY min(e.sal) desc;
6.写一个查询,显示每个部门最高工资和最低工资的差额
SELECT deptno,MAX(sal)-MIN(sal)
FROM emp
GROUP BY deptno;

4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点,薪资等级
select ename,dname,loc ,grade
FROM emp JOIN dept ON emp.deptno =dept.deptno
JOIN salgrade ON sal BETWEEN losal AND hisal
WHERE dept.loc='CHICAGO';

三、子查询
子查询一般用()括起来
子查询出现的位置:select,FROM,WHERE,HAVING
嵌套子查询:一个查询语句中嵌套了另一个查询语句,子查询的语句可以直接运行

单列子查询:子查询的返回结果是单行单列的,经常用在where,HAVING
多行子查询:子查询的返回结果是单列多行的,经常用在where
多列子查询:子查询的返回结果是多行多列的,经常用在from,where

1、单列子查询
---查询与smith相同职务的其它员工信息
SELECT JOB FROM emp WHERE lower(ename)='smith';

SELECT *
FROM emp
WHERE job=(SELECT JOB FROM emp WHERE lower(ename)='smith') and lower(ename)!='smith';

------查询部门平均工资最高的平均工资和部门名称
SELECT MAX(avg(sal))
FROM emp
GROUP BY deptno;

SELECT dname,round(avg(sal),2)
FROM emp JOIN dept ON emp.deptno=dept.deptno
GROUP BY dname
HAVING avg(sal)=(SELECT MAX(avg(sal))
FROM emp
GROUP BY deptno);

2、多行子查询:
集合运算:in
---查询与30部门职务相同的其它部门的员工信息
SELECT distinct JOB FROM emp WHERE deptno=30;

SELECT *
FROM emp
WHERE job in(SELECT distinct JOB FROM emp WHERE deptno=30) and deptno!=30;

ANY:
=ANY:相当于in
SELECT *
FROM emp
WHERE job=any(SELECT distinct JOB FROM emp WHERE deptno=30) and deptno!=30;

ANY:比子查询返回结果的最小值要大
---查询比10部门的最低工资要高的其它部门员工信息
SELECT *
FROM emp
WHERE sal>ANY(SELECT sal
FROM emp
WHERE deptno=10) and deptno!=10;

<ANY:比子查询返回结果的最大值要小
---查询比20部门的最高工资要低的其它部门的员工信息
SELECT *
FROM emp
WHERE sal<ANY(SELECT sal
FROM emp
WHERE deptno=20) and deptno!=20;

ALL:
=ALL:不存在现象

ALL:比子查询的返回结果的最大值要大
---查询比20部门所有人薪水都高的员工信息
SELECT *
FROM emp
WHERE sal>all(SELECT sal FROM emp WHERE deptno=20);

<ALL:比子查询的返回结果的最小值要小
---查询比10部门所有人薪水都低的员工信息
SELECT *
FROM emp
WHERE sal<all(SELECT sal FROM emp WHERE deptno=10);

3、多列子查询:
---查询与SCOTT用户工资和职务都匹配的其它员工的信息
SELECT *
FROM emp
WHERE sal=(SELECT sal FROM emp WHERE upper(ename)='SCOTT')
AND JOB=(SELECT JOB FROM emp WHERE upper(ename)='SCOTT')
and upper(ename)!='SCOTT';

SELECT *
FROM emp
WHERE (sal,job) in(SELECT sal,JOB FROM emp WHERE upper(ename)='SCOTT') and upper(ename)!='SCOTT';

---查询部门的名称,部门人数,部门最高工资,部门的最低工资,部门最低工资的员工姓名
SELECT deptno,count(empno),max(sal),min(sal)
FROM emp
GROUP BY deptno;

SELECT dname,t.c,t.ma,t.mi,ename
FROM dept,emp,(SELECT deptno,count(empno) c,max(sal) ma,min(sal) mi
FROM emp
GROUP BY deptno) t
WHERE dept.deptno=emp.deptno and emp.deptno=t.deptno and sal=t.mi;

1.查询比自己职位平均工资高的员工姓名、职位,部门名称,职位平均工资
SELECT JOB,avg(sal)
FROM emp
GROUP BY JOB;

SELECT ename,emp.JOB,dname,sal,t.a
FROM emp,dept,(SELECT JOB,avg(sal) a
FROM emp
GROUP BY JOB) t
WHERE emp.deptno=dept.deptno and emp.job=t.job and sal>t.a;

2.查询职位和经理同员工SCOTT或BLAKE完全相同的员工姓名、职位,不包括SCOOT和BLAKE本人。
SELECT ename,job
FROM emp
WHERE (JOB,mgr) IN (SELECT JOB,mgr FROM emp WHERE upper(ename) IN('SCOTT','BLAKE')) AND upper(ename) NOT IN('SCOTT','BLAKE');

3.查询不是经理的员工姓名
SELECT ename
FROM emp
WHERE empno not in(SELECT distinct mgr FROM emp where mgr is not null);

四、分页查询
1、rownum:伪列:从1开始递增
---查询emp表中的前5行记录
SELECT *
FROM emp
WHERE rownum<=5;

rownum在做比较运算时,只能使用<,<=,不能使用>,>=

----查询emp表中5~10条记录
SELECT rownum r,emp.* FROM emp;

SELECT rownum,t.*
FROM (SELECT ROWNUM r,emp.* FROM emp) t
WHERE t.r between 5 and 10;

---查询emp表中的最后5条记录
SELECT rownum,t.*
FROM (SELECT ROWNUM r,emp.* FROM emp) t
WHERE t.r>(select count(empno) from emp)-5;

---每页显示3条记录,查询第3页的员工信息
SELECT rownum,t.*
FROM (SELECT ROWNUM r,emp.* FROM emp) t
WHERE t.r>(3-1)3 and t.r<=33;

---每页显示3条记录,查询第3页和第5页的员工信息
SELECT rownum,t.*
FROM (SELECT ROWNUM r,emp.* FROM emp) t
WHERE t.r>(3-1)3 and t.r<=33 or t.r>(5-1)3 and t.r<=53;

2、TOPN
---查询工资最高的员工信息
SELECT * FROM EMP ORDER BY sal desc;

SELECT *
FROM (SELECT * FROM EMP ORDER BY sal DESC) t
WHERE rownum<=1;

---查询工资最高的前5位的员工信息
SELECT *
FROM (SELECT * FROM EMP ORDER BY sal DESC) t
WHERE rownum<=5;

作业:

--第五章
--练习一
---1.写一个查询,显示所有员工姓名,部门编号,部门名称。
select a.ename,a.deptno,b.dname
from emp a,dept b
where a.deptno=b.deptno
---2.写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金
select e.ename,d.loc,e.comm
from emp e,dept d
where e.deptno=d.deptno and nvl(comm,0)>0 and loc='CHICAGO'
---3.写一个查询,显示所有姓名中含有A字符的员工姓名,工作地点。
select e.ename,d.loc
from emp e,dept d
where e.deptno=d.deptno and e.ename like '%A%'
--练习2
---1.查询每个员工的编号,姓名,工资,工资等级,所在工作城市,按照工资等级进行升序排序
select e.empno,e.ename,e.sal,s.grade,d.loc
from emp e,dept d,salgrade s
where e.deptno=d.deptno
and e.sal between s.losal and s.hisal
order by s.grade
--练习3
---1.查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。
select a.ename,a.empno,b.ename,b.empno
from emp a,emp b,dept d
where a.mgr=b.empno and a.deptno=d.deptno
and d.loc in('NEW YORK','CHICAGO')
---2.第上一题的基础上,添加没有经理的员工King,并按照员工编号排序。
select a.ename,a.empno,b.ename,b.empno
from emp a left JOIN emp b ON a.mgr=b.empno,dept d
where a.deptno=d.deptno
and d.loc in('NEW YORK','CHICAGO')
---3.查询所有员工编号,姓名,部门名称,包括没有部门的员工也要显示出来。
select empno,ename,dname
from dept right JOIN emp ON emp.deptno=dept.deptno

--练习4
---使用SQL-99写法,完成如下练习
---1.创建一个员工表和部门表的交叉连接。
select *
from emp CROSS JOIN dept;
---2.使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期
select ename,dname,hiredate
from emp NATURAL JOIN dept
where hiredate>'1-5月-1980';
---3.使用USING子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点
select ename,dname,loc
from emp JOIN dept USING(deptno)
where loc='CHICAGO';
---4.使用ON子句,显示工作在CHICAGO的员工姓名,部门名称,工作地点,薪资等级
select ename,dname,loc,grade
from emp JOIN dept ON emp.deptno=dept.deptno,
emp join salgrade on sal between losal and hisal
where loc='CHICAGO'
---5.使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
select a.ename,b.ename Manager
from emp a left JOIN emp b ON a.mgr=b.empno
---6.使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。
select a.ename Manager,b.ename
from emp b right JOIN emp a ON a.mgr=b.empno
--第六章
--练习1
---1.查询部门20的员工,每个月的工资总和及平均工资。
select to_char(hiredate,'mm') "month",sum(sal),avg(sal)
from emp
where deptno=20
group by to_char(hiredate,'mm');
---2.查询工作在CHICAGO的员工人数,最高工资及最低工资。
select count(empno),max(sal),min(sal)
from emp,dept
where loc='CHICAGO' and emp.deptno=dept.deptno
---3.查询员工表中一共有几种岗位类型。
select count(distinct job)
from emp
--练习2
---1.查询每个部门的部门编号,部门名称,部门人数,最高工资,最低工资,工资总和,平均工资。
select emp.deptno,dept.dname,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp,dept
where emp.deptno=dept.deptno
group by emp.deptno,dname
---2.查询每个部门,每个岗位的部门编号,部门名称,岗位名称,部门人数,最高工资,最低工资,工资总和,平均工资。
select emp.deptno,dept.dname,job,count(empno),max(sal),min(sal),sum(sal),avg(sal)
from emp,dept
where emp.deptno=dept.deptno
group by emp.deptno,dname,job
order by emp.deptno
---3.查询每个经理所管理的人数,经理编号,经理姓名,要求包括没有经理的人员信息。
select m.empno,m.ename,count(e.empno)
from emp e,emp m
where e.mgr=m.empno(+)
group by m.empno,m.ename
--练习3
---1.查询部门人数大于2的部门编号,部门名称,部门人数。
select dept.deptno,dname,count(empno)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dname
having count(empno)>2
---2.查询部门平均工资大于2000,且人数大于2的部门编号,部门名称,部门人数,部门平均工资,并按照部门人数升序排序。
select dept.deptno,dname,count(empno),avg(sal)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dname
having avg(sal)>=2 and avg(sal)>2000
order by count(empno)

--第七章
--练习1
---1.查询入职日期最早的员工姓名,入职日期
select ename,hiredate
from emp
where hiredate=(select min(hiredate) from emp)
---2.查询工资比SMITH工资高并且工作地点在CHICAGO的员工姓名,工资,部门名称
select ename,sal,dname
from emp,dept
where sal>(select sal from emp where ename='SMITH')
and loc='CHICAGO' and emp.deptno=dept.deptno
---3.查询入职日期比20部门入职日期最早的员工还要早的员工姓名,入职日期
select ename,hiredate
from emp
where hiredate<(select min(hiredate) from emp where deptno=20)
---4.查询部门人数大于所有部门平均人数的的部门编号,部门名称,部门人数
select dept.deptno,dname,count(empno)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dname
having count(empno)>(select avg(count(empno)) from emp group by deptno)
--练习2
---1.查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工
select ename,hiredate
from emp
where hiredate>any(select hiredate from emp where deptno=10)
and deptno<>10
---2.查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工
select ename,hiredate
from emp
where hiredate>all(select hiredate from emp where deptno=10)
---3.查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员工
select ename,job
from emp
where job=any(select distinct(job) from emp where deptno=10)
and deptno<>10
--练习3
---1.查询职位及经理和10部门任意一个员工职位及经理相同的员工姓名,职位,不包括10部门员工
select ename,emp.job
from emp,(select job,mgr from emp where deptno=10) t
where emp.mgr=t.mgr and emp.job=t.job and deptno<>10
---2.查询职位及经理和10部门任意一个员工职位或经理相同的员工姓名,职位,不包括10部门员工
select ename,emp.job
from emp,(select job,mgr from emp where deptno=10) t
where (emp.mgr=t.mgr or emp.job=t.job) and deptno<>10
--练习4
---1.查询比自己职位平均工资高的员工姓名、职位,部门名称,职位平均工资
select ename,emp.job,dname,sal,avgsal
from emp,dept,(select job, avg(sal) avgsal from emp group by job) t
where emp.deptno=dept.deptno and emp.job=t.job and sal>avgsal
---2.查询职位和经理同员工SCOTT或BLAKE完全相同的员工姓名、职位,不包括SCOOT和BLAKE本人。
select ename,t.job
from emp,(select job,mgr from emp
where ename in('SCOTT','BLAKE')) t
where emp.ename not in('SCOTT','BLAKE') and emp.mgr=t.mgr
---3.查询不是经理的员工姓名。
select ename
from emp
where empno not in(select distinct mgr from emp where mgr is not null)
--练习5
---1.查询入职日期最早的前5名员工姓名,入职日期。
select ename,emp.hiredate
from emp,(select rownum r, hiredate from emp order by hiredate) t
where r<=5 and emp.hiredate=t.hiredate
---2.查询工作在CHICAGO并且入职日期最早的前2名员工姓名,入职日期。
select ename,hiredate
from (select ename, hiredate from emp,dept where emp.deptno=dept.deptno and loc='CHICAGO' order by hiredate) t
where rownum<=2

--练习6
---1.按照每页显示5条记录,分别查询第1页,第2页,第3页信息,要求显示员工姓名、入职日期、部门名称。
select rownum,t.r,ename,hiredate,deptno
from(select rownum r,emp.* from emp) t
where t.r>(1-1)5 and t.r<=15 or t.r>(2-1)5 and t.r<=25 or t.r>(3-1)5 and t.r<=35;
--练习7
---1.按照每页显示5条记录,分别查询工资最高的第1页,第2页,第3页信息,要求显示员工姓名、入职日期、部门名称、工资。
select rownum ,ename,hiredate,deptno,sal
from(select emp.* from emp order by sal desc) t
where rownum>(1-1)5 and rownum<=15 or rownum>(2-1)5 and rownum<=25 or rownum>(3-1)5 and rownum<=35;
--课后作业
---1.查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。
select empno,ename,sal,job
from emp
where sal>(select sal from emp where empno=7782) and job=(select job from emp where empno=7369)
---2.查询工资最高的员工姓名和工资。
select ename,sal
from emp
where sal=(select max(sal) from emp)
---3.查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。
select dept.deptno,dname,min(sal)
from emp,dept
where emp.deptno=dept.deptno
group by dept.deptno,dname
having min(sal)>(select min(sal) from emp where deptno=10)

---4.查询员工工资为其部门最低工资的员工的编号和姓名及工资。
select empno,ename,sal
from emp
where (deptno,sal) in(select deptno, min(sal) from emp group by deptno)
---5.显示经理是KING的员工姓名,工资。
select ename,sal
from emp
where mgr=(select empno from emp where ename='KING')
---6.显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。
select ename,sal,hiredate
from emp
where hiredate>(select hiredate from emp where ename='SMITH')
---7.使用子查询的方式查询哪些职员在NEW YORK工作。
select *
from emp
where deptno=(select deptno from dept where loc='NEW YORK')
---8.写一个查询显示和员工SMITH工作在同一个部门的员工姓名,雇用日期,查询结果中排除SMITH。
select ename,hiredate
from emp
where deptno=(select deptno from emp where ename='SMITH')
and ename<>'SMITH'
---9.写一个查询显示其工资比全体职员平均工资高的员工编号、姓名。
select empno,ename
from emp
where sal>(select avg(sal) from emp)
---10.写一个查询显示其上级领导是King的员工姓名、工资。
select ename,sal
from emp
where mgr=(select empno from emp where initcap(ename)='King')
---11.显示所有工作在RESEARCH部门的员工姓名,职位。
select ename,job
from emp
where deptno=(select deptno from dept where dname='RESEARCH')
---12.查询每个部门的部门编号、平均工资,要求部门的平均工资高于部门20的平均工资。
select deptno,avg(sal)
from emp
group by deptno
having avg(sal)>(select avg(sal) from emp where deptno=20)
---13.查询大于自己部门平均工资的员工姓名,工资,所在部门平均工资,高于部门平均工资的额度。
select ename,sal,t.a,sal-t.a,t.deptno
from emp,(select deptno,avg(sal) a from emp group by deptno) t
where sal >t.a and emp.deptno=t.deptno
---14. 列出至少有一个雇员的所有部门
select deptno
from emp
group by deptno
having count(empno)>0
---15. 列出薪金比"SMITH"多的所有雇员
select *
from emp
where sal>(select sal from emp where ename='SMITH')
---16. 列出入职日期早于其直接上级的所有雇员
select *
from emp e,emp m
where e.hiredate<m.hiredate
and e.mgr=m.empno
---17. 找员工姓名和直接上级的名字
select e.ename,m.ename
from emp e,emp m
where e.mgr=m.empno
---18. 显示部门名称和人数
select dname ,count (empno)
from dept,emp
where dept.deptno=emp.deptno(+)
group by dname
---19. 显示每个部门的最高工资的员工
select *
from emp
where (deptno,sal) in(select deptno, max(sal)
from emp
group by deptno)
---20. 显示出和员工号7369部门相同的员工姓名,工资
select ename,sal
from emp
where deptno=(select deptno from emp where empno=7369)
---21. 显示出和姓名中包含"W"的员工相同部门的员工姓名
select ename
from emp
where deptno in(select deptno from emp where ename like '%W%')
---22. 显示出工资大于平均工资的员工姓名,工资
select ename,sal
from emp
where sal>(select avg(sal) from emp )
---23. 显示出工资大于本部门平均工资的员工姓名,工资
select ename,sal
from emp,(select deptno,avg(sal) a from emp group by deptno) t
where sal >t.a and emp.deptno=t.deptno
---24. 显示每位经理管理员工的最低工资,及最低工资者的姓名
select ename,sal
from emp,(select mgr, min(sal) m from emp group by mgr) t
where sal =t.m and t.mgr=emp.mgr

select ename,sal
from emp
where (sal,mgr) in (select min(sal),mgr from emp group by mgr)
---25. 显示比工资最高的员工参加工作时间晚的员工姓名,参加工作时间
select ename,hiredate
from emp
where hiredate>(select hiredate from emp where sal=(select max(sal) from emp ))
---26. 显示出平均工资最高的的部门平均工资及部门名称
select dname,avg(sal)
from emp,dept
where emp.deptno=dept.deptno
group by dname
having avg(sal)=(select max(avg(sal))
from emp
group by deptno)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 5.多表查询 多表查询 目的:从多张表获取数据 前提:进行连接的多张表中有共同的列 等连接 通过两个表具有相同意义...
    乔震阅读 1,194评论 0 0
  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,881评论 0 4
  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,699评论 0 2
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,277评论 0 3
  • 平起.新韵,助兴花屋主人萧寒《咏庐阳第一怪》诗 饱肠衣暖生活美, 笑眼迷离体态肥。 勺子当家油水厚, 逍遥快意媚情...
    原始生命阅读 972评论 47 103