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的子查询相关知识,少但是精的更多相关文章

  1. 聊聊MySQL的子查询

    1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...

  2. mysql in 子查询 效率慢 优化(转)

    mysql in 子查询 效率慢 优化(转) 现在的CMS系统.博客系统.BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下.但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久! ...

  3. MySQL 行子查询(转)

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  4. MySQL FROM 子查询

    FROM 子句中的子查询 MySQL FROM 子查询是指 FROM 的子句作为子查询语句,主查询再到子查询结果中获取需要的数据.FROM 子查询语法如下: SELECT ... FROM (subq ...

  5. MySQL 表子查询

    MySQL 表子查询 表子查询是指子查询返回的结果集是 N 行 N 列的一个表数据. MySQL 表子查询实例 下面是用于例子的两张原始数据表: article 表: aid title conten ...

  6. MySQL 行子查询

    MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...

  7. Mysql in子查询中加limit报错

    Mysql in子查询中加limit报错 select id from aa where id in ( select id from bb limit 10 ); 改写成 SELECT id FRO ...

  8. Mysql常用sql语句(20)- 子查询重点知识

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 子查询语句可以嵌套在 sql 语句中任何表达式出现的位 ...

  9. MySQL(五) —— 子查询

    子查询(SubQuery)是指出现在其他SQL语句内的SELECT语句. 如: SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2); 其中 SELE ...

随机推荐

  1. EntityFramework Core笔记:保存数据(4)

    1. 基本保存 每个DBContext实例都有一个ChangeTracker,负责跟踪需要写入数据库的更改.当实例发生更改时,更改会被记录在ChangeTracker中,在调用 SaveChanges ...

  2. Mac打开Terminal报错-bash : : command not found

    问题描述: Mac系统在打开Terminal的时候,报错-bash : : command not found. 问题分析: 报错并不影响Terminal的使用,于是忽略不计.但是在修改.bash_p ...

  3. 简单的连接数据库的java程序模板

    简单的连接数据库的java程序,方便临时使用: import java.sql.*; import java.io.*; import java.sql.DriverManager; import j ...

  4. [洛谷P1006] 传纸条

    双线程DP的常识:DP的阶段问题:多阶段决策问题 传送门:$>here<$ 题意 n*m的矩阵里,从左上角走到右下角(只能往右或往下),再从右下角走回左上角(只能往左或往上).其中不能重复 ...

  5. Intel格式与Motorola格式的区别

      Intel低字节在前 Motorola高字节在前    在进行CAN总线通信设计或者测试过程中,经常看到CAN总线信号的编码格式有两种定义:Intel格式与Motorola格式.究竟两种编码格式有 ...

  6. flink部署操作-flink standalone集群安装部署

    flink集群安装部署 standalone集群模式 必须依赖 必须的软件 JAVA_HOME配置 flink安装 配置flink 启动flink 添加Jobmanager/taskmanager 实 ...

  7. 微信小程序之:wepy(二)

    一大堆实例:人家的博客园 代码规范: 1.尽量使用驼峰命名,避免使用$开头,框架内建属性都已$开头,可以使用this直接调用. 2.入口文件.页面.组件后缀都为.wpy. 3.使用ES6语法开发. 4 ...

  8. jsp:include动作功能

    jsp:plugin动作:连接客户端的Applet或Bean插件 jsp:useBean动作:应用javaBean组件 jsp:setProperty动作:设置javaBean属性 jsp:getPr ...

  9. static_assert与assert

    C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言. 其语法:static_assert(常量表达式,提示字符串). 如果第一个参数常量表达式的值为fals ...

  10. 第六周java学习总结

    学号 20175206 <Java程序设计>第六周学习总结 教材学习内容总结 第七章: 主要内容 内部类 匿名类 异常类 断言 重点和难点 重点:内部类和异常类的理解 难点:异常类的使用 ...