SQL语句之高级查询
来源:互联网 发布:华为云计算大会 编辑:程序博客网 时间:2024/05/18 02:14
--高级查询
--子查询在where子句中
--需求:查看和king同部门的员工?
--1.先知道king所在的部门
select ename,deptno from emp where ename='KING';
--2.根据King所在的部门去查询该部门的其他员工
select ename,sal,deptno from emp where deptno=10;
select ename,sal,deptno from emp where deptno=(
select deptno
from emp
where ename='KING');
--子查询:嵌入到SQL语句中的查询语句
--目的:通常是为了外层SQL语句提供数据的支持
--子查询不仅可以用在查询语句中,还可以用在DDL,DML中
--子查询在DDL中
--创建一个表emp10,保存10号部门的所有员工
create table emp10 AS select * from emp where deptno=10;
select * from emp10;
--子查询在DML中
--删除KING所在部门的所有员工
delete from emp where deptno=(
select deptno
from emp
where ename='KING'
);
rollback;
select * from emp;
update emp set sal=sal*1.2 where deptno=(
select deptno
from emp
where ename='KING'
);
--查看和Manager相同部门的员工
select ename ,job,deptno
from emp
where deptno IN (SELECT DEPTNO FROM EMP WHERE JOB='MANAGER');
--如果子查询返回的是多行,主查询中要使用多行比较操作符
--多行比较操作符有:IN,ANY,ALL,其中ANY和ALL不能单独使用,需要配合>,>=,<,<=
--子查询根据查询结果的字段数量与记录数分为:
--单行单列子查询
--多行单列子查询
--单行多列子查询
--多行多行子查询
--单列子查询常用于where中作为过滤条件
--多列常当作一张表来看待,常出现在from子句中作一张表来看待
--查找薪水比整个机构高的员工
SELECT EMPNO,ENAME,sal FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);
--查找与SALSMAN同部门的其他职位的员工
SELECT ENAME,EMPNO FROM EMP WHERE DEPTNO IN (select deptno from emp where job='SALESMAN') AND JOB!='SALESMAN';
--查看比所有SALESMAN和CLEERK工资都高的员工信息
select ENAME,EMPNO from emp where sal >ALL(select SAL from emp where job='SALESMAN' or job='CLEERK');
--EXISTS:该关键字后跟一个子查询,只要该子查询能查询出一条数据,就返回true
--在子查询中需要引用主查询的字段数据,使用exists关键字
--需求,查看有员工的部门
select DEPTNO,DNAME
from dept d
where exists (select * from emp e where e.deptno=deptno);
--HAVING 子句
--需求:列出最低薪水高于部门30的部门信息
select MIN(sal),DEPTNO from emp
GROUP BY deptno
having MIN(sal)>( select MAX(SAL) from emp where DEPTNO=30);
--需求:查看平均薪水高于名叫clerk的平均薪水的职位
select AVG(SAL),job from emp
group by job HAVING AVG(SAL)>(SELECT AVG(SAL) FROM EMP WHERE JOB='CLERK');
--from子句 (多列子查询常被看做一张表,用在from子句中)
--需求:查看比自己所在部门的平均工资高的员工信息
select AVG(sal) avg_sal,deptno from emp
group by deptno;
select empno,ename,avg_sal,sal from emp e join (select AVG(sal) avg_sal,deptno from emp group by deptno) t
on e.deptno =t.deptno
where e.sal>t.avg_sal;
--select子句
--子查询出现在select子句,通常实现外连接效果
select ename,sal,dname
from emp e,dept t
where e.deptno=t.deptno;
select e.ename,e.sal,(select dname from dept d where e.deptno=d.deptno )
from emp e;
--子查询在where子句中
--需求:查看和king同部门的员工?
--1.先知道king所在的部门
select ename,deptno from emp where ename='KING';
--2.根据King所在的部门去查询该部门的其他员工
select ename,sal,deptno from emp where deptno=10;
select ename,sal,deptno from emp where deptno=(
select deptno
from emp
where ename='KING');
--子查询:嵌入到SQL语句中的查询语句
--目的:通常是为了外层SQL语句提供数据的支持
--子查询不仅可以用在查询语句中,还可以用在DDL,DML中
--子查询在DDL中
--创建一个表emp10,保存10号部门的所有员工
create table emp10 AS select * from emp where deptno=10;
select * from emp10;
--子查询在DML中
--删除KING所在部门的所有员工
delete from emp where deptno=(
select deptno
from emp
where ename='KING'
);
rollback;
select * from emp;
update emp set sal=sal*1.2 where deptno=(
select deptno
from emp
where ename='KING'
);
--查看和Manager相同部门的员工
select ename ,job,deptno
from emp
where deptno IN (SELECT DEPTNO FROM EMP WHERE JOB='MANAGER');
--如果子查询返回的是多行,主查询中要使用多行比较操作符
--多行比较操作符有:IN,ANY,ALL,其中ANY和ALL不能单独使用,需要配合>,>=,<,<=
--子查询根据查询结果的字段数量与记录数分为:
--单行单列子查询
--多行单列子查询
--单行多列子查询
--多行多行子查询
--单列子查询常用于where中作为过滤条件
--多列常当作一张表来看待,常出现在from子句中作一张表来看待
--查找薪水比整个机构高的员工
SELECT EMPNO,ENAME,sal FROM EMP WHERE SAL>(SELECT AVG(SAL) FROM EMP);
--查找与SALSMAN同部门的其他职位的员工
SELECT ENAME,EMPNO FROM EMP WHERE DEPTNO IN (select deptno from emp where job='SALESMAN') AND JOB!='SALESMAN';
--查看比所有SALESMAN和CLEERK工资都高的员工信息
select ENAME,EMPNO from emp where sal >ALL(select SAL from emp where job='SALESMAN' or job='CLEERK');
--EXISTS:该关键字后跟一个子查询,只要该子查询能查询出一条数据,就返回true
--在子查询中需要引用主查询的字段数据,使用exists关键字
--需求,查看有员工的部门
select DEPTNO,DNAME
from dept d
where exists (select * from emp e where e.deptno=deptno);
--HAVING 子句
--需求:列出最低薪水高于部门30的部门信息
select MIN(sal),DEPTNO from emp
GROUP BY deptno
having MIN(sal)>( select MAX(SAL) from emp where DEPTNO=30);
--需求:查看平均薪水高于名叫clerk的平均薪水的职位
select AVG(SAL),job from emp
group by job HAVING AVG(SAL)>(SELECT AVG(SAL) FROM EMP WHERE JOB='CLERK');
--from子句 (多列子查询常被看做一张表,用在from子句中)
--需求:查看比自己所在部门的平均工资高的员工信息
select AVG(sal) avg_sal,deptno from emp
group by deptno;
select empno,ename,avg_sal,sal from emp e join (select AVG(sal) avg_sal,deptno from emp group by deptno) t
on e.deptno =t.deptno
where e.sal>t.avg_sal;
--select子句
--子查询出现在select子句,通常实现外连接效果
select ename,sal,dname
from emp e,dept t
where e.deptno=t.deptno;
select e.ename,e.sal,(select dname from dept d where e.deptno=d.deptno )
from emp e;
阅读全文
0 0
- Sql语句之高级查询
- SQL语句之高级查询
- sql高级语句查询
- SQL高级查询语句
- sql高级查询语句
- sql 高级查询语句
- SQL语句高级查询
- sql 高级查询语句总结
- sql 高级查询语句总结
- LINQ to SQL语句之动态查询高级特性
- SQL之高级查询
- SQL Server SQL高级查询语句小结
- SQL Server SQL高级查询语句小结
- SQL Server SQL高级查询语句小结
- SQL Server SQL高级查询语句小结
- SQL语句之查询
- SQL语法之高级查询
- SQL语法之高级查询
- Java泛型
- SQL语句之查询基础(二)
- TensorFlow入门
- Java中Arrays类的两个方法:deepEquals和equals
- quartz集群分布式(并发)部署解决方案-Spring
- SQL语句之高级查询
- 网易2018校园招聘编程题真题集合
- SpringBoot注解大全
- 二项式反演
- C语言中关于 LINK : fatal error LNK1561: 必须定义入口点 的解决方法
- 递归-放苹果问题
- hdu1950二分法的LISS
- 苹果Face ID到底安不安全?苹果白皮书给出解释!
- SQL语句之约束