Mysql的子查询相关知识,少但是精
Mysql子查询
概念分析:
根据相关性分:
(1)不相关子查询:一条Sql语句中含有多条SELECT语句,先执行子查询,再执行外查询,子查询可对立运行
关键字:(1)先子查询,再外查询
(2)可以对立运行,即可以单独运行子查询,对外查询不干扰
(2)相关子查询:子查询不能独立运行,并且先运行外查询,再运行子查询
关键字:(1)先外查询,再子查询
(2)子查询不能独立运行
例如:
(1)不相关子查询
--查询【和CLARK同一部门且比他工资低的】雇员名字和工资。
-- 第一步:先查询CLARK部门和和CLARK工资
select deptno from emp where ename='CLARK'
select sal from emp where ename ='CLARK'
-- 第三步:分别查询,部门和CLARK一样的,工资比他少的
select ename ,sal,deptno from emp
where deptno = (select deptno from emp where ename='CLARK')
and sal < (select sal from emp where ename ='CLARK')
这上面查询过程中:子查询可以独立运行,并且是先于外查询的,
(2)相关子查询
--查询[工资高于其所在部门20的平均工资的]那些员工
select * from emp e1 where e1.deptno = 20 and sal >(select avg(sal) from emp e2 where e2.deptno = 10)
在这条语句中,子查询内部的WHERE关键字后的条件中外查询的条件参与,不能单独运行
二:根据查询结果
(1)单行子查询:子查询结果只有一条数据
(2)多行子查询:子查询结果有多条记录,此时之间不能用= < >,要借助 ANY ALL IN 来实现
例如:
(1)单行子查询:
--查得所有【比“CLARK”工资高的】员工的信息
select * from emp
select sal from emp where ename ='CLARK' --
select * from emp where sal > 2450.00
子查询结果只有一条
select * from emp where sal > (select sal from emp where ename ='CLARK')
(2)多行子查询
--查询工资低于任何一个“CLERK”的工资的雇员信息。
select * from emp where sal< (select max(sal) from emp where job ='CLERK')
select sal from emp where job ='CLERK' --1300 1100 950 800 select * from emp where sal< any(select sal from emp where job ='CLERK') --查询[工资比所有的“SALESMAN”都高的]雇员的编号、名字和工资。
--ALL >ALL
select empno,ename,sal from emp where sal >(select max(sal) from emp where job ='SALESMAN') select empno,ename,sal from emp where sal > ALL(select sal from emp where job ='SALESMAN') select max(sal) from emp where job ='SALESMAN' --查询部门20中职务同部门10的雇员一样的雇员信息。
select job from emp where deptno = 20 --CLERK ANALYST
select job from emp where deptno = 10 --MANAGER PRESIDENT CLERK ---- CLERK MANAGER
-- IN 等于其中任何一个
select * from emp where deptno = 20 and job in (select job from emp where deptno = 10)
Mysql的子查询相关知识,少但是精的更多相关文章
- 聊聊MySQL的子查询
1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...
- mysql in 子查询 效率慢 优化(转)
mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...
- MySQL 行子查询(转)
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- MySQL FROM 子查询
FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subq ...
- MySQL 表子查询
MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title conten ...
- MySQL 行子查询
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- Mysql in子查询中加limit报错
Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...
- Mysql常用sql语句(20)- 子查询重点知识
测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 子查询语句可以嵌套在 sql 语句中任何表达式出现的位 ...
- MySQL(五) —— 子查询
子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句. 如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中 SELE ...
随机推荐
- fuser:command not found
yum 安装fuser命令 yum install -y psmisc
- MySQL中怎么对varchar类型排序问题(转)
在mysql默认order by 只对数字与日期类型可以排序,但对于varchar字符型类型排序好像没有用了,下面我来给各位同学介绍varchar类型排序问题如何解决. 今天在对国家电话号码表进行 ...
- Spark2.2 saveAsTable 函数使用 overWrite 设置 Partition 会造成全覆盖的问题
在使用 CDH 6.0.X 的版本还是自带的是 Spark2.2 的版本,2.2 版本的 Spark 使用 saveAsTable 如果使用overWrite PartitionBy 的功能会有和 h ...
- ArrayList如何扩容?
1.调用ArrayList的参构造方法,此时集合内部是一个空数组 transient Object[] elementData; private static final Object[] DEFAU ...
- docker 镜像备份magento 2.2.3
打包百度网盘: 链接:https://pan.baidu.com/s/1i_lSLt48RlxPonVA7qG5kg 密码:h1de 还原:docker load < (filename).t ...
- [wikichip]zen架构图
https://en.wikichip.org/wiki/amd/microarchitectures/zen https://en.wikichip.org/wiki/amd/microarchit ...
- (转)学习HTML5 Canvas这一篇文章就够了
作者:做人要厚道2013 原文:https://blog.csdn.net/u012468376/article/details/73350998
- python全栈开发中级班全程笔记(第二模块)第 二 部分:函数基础(重点)
python学习笔记第二模块 第二部分 : 函数(重点) 一.函数的作用.定义 以及语法 1.函数的作用 2.函数的语法和定义 函数:来源于数学,但是在编程中,函数这个概念 ...
- DML、DDL、DCL的分别是什么
DML.DDL.DCL的分别是什么 一直以来,分不清这三者的简称代表什么,甚至在面试中遇到可能会张冠李戴.今天特意记录一下. 一.DML(data manipulation language) 数据操 ...
- python计算斐波那契数列
斐波那契数列就是黄金分割数列 第一项加第二项等于第三项,以此类推 第二项加第三项等于第四项 代码如下 这一段代码实现fib(n)函数返回第n项,PrintFN(m,n,i)函数实现输出第i项斐波那契数 ...