赞
踩
子查询返回的是单行单列的数据,就是一个值
主要用在WHERE子句中
需要用到一些运算符 大于>、小于<、等于=、不等于<>、!=
子查询的书写方式
①从外往内写
②从内往外写
查询出基本工资比ALLEN低的全部员工信息
从外往内写
- -- 查询出全部员工信息
- SELECT * FROM emp;
- -- ALLEN的工资
- SELECT sal FROM emp WHERE ename='ALLEN';
- -- 查询出([基本工资比ALLEN低的]全部员工信息)
- SELECT * FROM emp WHERE sal<(SELECT sal FROM emp WHERE ename='ALLEN');
查询基本工资高于公司平均工资的全部员工信息
- -- 查询公司平均工资
- SELECT AVG(sal) FROM emp;/*1988.3333*/
- -- 查询基本工资高于公司平均工资的全部员工信息
- SELECT * FROM emp WHERE sal>1988.3333;
- -- 查询[基本工资高于(公司平均工资)的全部员工信息]
- SELECT * FROM emp WHERE sal>(SELECT AVG(sal) FROM emp);
从内往外写
MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询
查询出与ALLEN从事同一工作,并且基本工资高于员工编号为7521的全部员工信息
- -- 查询出与ALLEN从事同一工作
- SELECT * FROM emp
- WHERE job=(SELECT job FROM emp WHERE ename='ALLEN')
- -- 并且基本工资高于员工编号为7521的全部员工信息
- AND sal>(SELECT sal FROM emp WHERE empno=7521)
- -- 把 ALLEN 从查询结果中剔除
- AND ename<>'ALLEN';
可以发现查询结果中包含 ALLEN,需要把 ALLEN 从查询结果中剔除
子查询返回的是单行多列的数据,就是一条记录
查询与SCOTT从事同一工作且工资相同的员工信息
- -- 查询与SCOTT从事同一工作且工资相同的员工信息
- SELECT * FROM emp
- WHERE job=(SELECT job FROM emp WHERE ename='SCOTT')
- AND sal=(SELECT sal FROM emp WHERE ename='SCOTT')
- AND ename<>'SCOTT';
使用标量子查询
使用单行子查询
- -- 查询SCOTT的员工信息
- SELECT job,sal FROM emp WHERE ename='SCOTT';
- -- 查询与SCOTT从事同一工作且工资相同的员工信息
- SELECT * FROM emp WHERE (job,sal)=(SELECT job,sal FROM emp WHERE ename='SCOTT');
查询与员工编号为7566从事同一工作且领导相同的全部员工信息
- -- 查询与员工编号为7566从事同一工作且领导相同的全部员工信息
- SELECT * FROM emp WHERE
- (job,mgr)=(SELECT job,mgr FROM emp WHERE empno=7566);
查询与ALLEN从事同一工作且在同一年雇佣的全部员工信息(包含ALLEN)
列数相同、数据类型相同可以直接进行比较
MySQL --- 常用函数 - 数值函数、时间日期函数、条件判断函数、其他函数
- -- 查询与ALLEN从事同一工作且在同一年雇佣的全部员工信息(包含ALLEN)
- SELECT * FROM emp WHERE
- (job,DATE_FORMAT(hiredate,'%Y'))=
- (SELECT job,DATE_FORMAT(hiredate,'%Y') FROM emp WHERE ename='ALLEN');
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。