/*SQL-进阶7-子查询


含义:出现在其他语句中的select 语句,称为子查询或内查询
外部的查询语句,称为主查询 或者 外查询
分类1:按子查询出现的位置———— select 后面:仅仅支持标量子查询(仅能支持一行一列,下面有栗子) from 后面:支持表 子查询
将子查询的结果充当成一张表,要求必须起别名,不然会引起冲突! where 或 having 后面: [重点]
标量子查询 √
列子查询 √ [还一般搭配着多行操作符使用,in/ any/some/ all ]
[ in(not in):等于列表中的任意一个
弃用 #### any/some : (和子查询返回的某一个值比较)
弃用 ##### all : 和子查询返回的所有值比较
]
行子查询
{共同特点:
①子查询放在小括号里
②子查询放在条件的右侧
③标量子查询,一般搭配着单行操作符使用
} exists后面(相关子查询)
exists后面的子查询 #结果返回1或者0;先执行主查询,再执行子查询 分类2:按结果集的行列数不同:(用的很少)
标量子查询(结果集)
....... */ #联系: 多表查询 ,查询部门名为SAL 或IT的员工的所有信息
SELECT e.*,d.`department_name`
FROM employees e,departments d
WHERE e.`department_id`=d.`department_id` AND d.department_name IN ('SAL','IT'); #where 或 having 后面: [重点]
#1.单行子查询(标量子查询)
#案例1:谁的工资比ABel的高
SELECT e.*
FROM employees e
WHERE e.`salary` >(
SELECT salary
FROM employees
WHERE last_name ='Abel'
); #案例2:返回job_id 与 141号员工 相同,salary 比143号员工多的员工姓名, 显示 job_id和工资
SELECT last_name,job_id,salary
FROM employees
WHERE `job_id` =(
SELECT job_id
FROM employees
WHERE employee_id =141
AND salary >(
SELECT salary
FROM employees
WHERE employee_id =143
)
); #案例3: 返回公司工资最低的员工的last_name ,job_id 和 salary
SELECT *
FROM employees
WHERE salary =(
SELECT MIN(salary)
FROM employees
); #二: select 后面的子查询 #案例:查询每个部门的员工个数
SELECT d.*,(
SELECT COUNT(*)
FROM employees e
WHERE d.department_id=e.department_id
) 个数
FROM departments d;
##也可以用连接查询???? :employees 右外连接 departments
SELECT d.*,COUNT(*)
FROM employees e
RIGHT OUTER JOIN departments d
ON e.department_id=d.department_id
GROUP BY department_id;
#查询员工号=102的部门号
SELECT (
SELECT d.department_name
FROM departments d,employees e
WHERE d.department_id = e.department_id
AND e.employee_id = 102
) 部门名; #三: from后面
#案例:查询每个部门的平均工资的工资等级
#1.查询每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id;
#2.查询工资等级
SELECT * FROM job_grades;
#3.进行组合 , 连接1的两个结果集和job_grades表,筛选条件平均工资 between low and high
SELECT ag_dep.* ,g.grade_level
FROM (
SELECT AVG(salary) ag,department_id #查询后生成的表
FROM employees
GROUP BY department_id
) ag_dep
INNER JOIN job_grades g
ON ag_dep.ag BETWEEN g.lowest_sal AND g.highest_sal; #四: exists后面的(相关子查询) #结果返回1或者0;先执行主查询,再执行子查询 #案例1:查询有员工名的部门名
SELECT department_name
FROM departments d
WHERE EXISTS(
SELECT *
FROM employees e
WHERE d.department_id = e.`department_id`
); #----------------栗子练习--------------
#一:查询各部门中工资比本部门平均工资高的员工的员工号,姓名和工资
#①本部门平均工资
SELECT AVG(e.`salary`) ag,department_id
FROM employees e
GROUP BY e.`department_id`;
#(2) 与1进行连接
SELECT e.`department_id`,e.`employee_id`,e.`last_name`,e.`salary`,ag 平均工资
FROM employees e
INNER JOIN(
SELECT AVG(e.`salary`) ag,department_id
FROM employees e
GROUP BY e.`department_id`
)ag_dep
ON e.`department_id`=ag_dep.department_id ##内连接的连接条件!
WHERE salary > ag_dep.ag; ###加上筛选条件

MySQL-进阶7-子查询 - select后/where后/from后/ []where后/having后] / exists后面 的相关子查询的更多相关文章

  1. Mysql相关子查询&&MySQL获取分组后的TOP N记录

    小燕子,哈哈哈哈~~~~~~~~~~ 相关子查询是指引用了外部查询列的子查询,即子查询会对外部查询的每行进行一次计算. 举个例子 root:test> show create table tes ...

  2. sql之独立子查询和相关子查询总结

    1.独立子查询:顾名思义:就是子查询和外层查询不存在任何联系,是独立于外层查询的: 下面就看一个例子: 有一张订单表 Sales.Order 和一张 客户表 Sales.Customer 下面的sql ...

  3. T-SQL的进阶:超越基本级别3:构建相关子查询——701小组

    T-SQL的进阶:超越基本级别3:构建相关子查询 格雷戈里·拉森,2014/03/05 原文链接: http://www.sqlservercentral.com/articles/Stairway+ ...

  4. SQL相关子查询是什么?和嵌套子查询有什么区别?

    目录 两者的各种叫法 相关子查询MySQL解释 相关子查询Wikipedia解释 相关子查询执行步骤拆解 相关子查询和嵌套查询的区别 参考资料 两者的各种叫法 相关子查询叫做:Correlated S ...

  5. ylb:子查询(嵌套子查询)和子查询(相关子查询)

    ylbtech-SQL Server:SQL Server-子查询(嵌套子查询)和子查询(相关子查询) SQL Server 子查询(嵌套子查询)和子查询(相关子查询). 1,ylb:1,子查询(嵌套 ...

  6. [SQL SERVER系列]之嵌套子查询和相关子查询

    子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...

  7. 相关子查询和嵌套子查询 [SQL Server]

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号  图书名         出版社               价格-------------- ...

  8. SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...

  9. SQLServer学习笔记<>相关子查询及复杂查询

    二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,coun ...

随机推荐

  1. java基本思想

    面向对象 众所周知,面向对象编程思想是java的基本思想.java的整个体系和技术实现都是以这个思想为基础.(这个通过类和接口能看出来,后面提到) 对这个事情的认知度甚至变成了很多公司的面试标准.比如 ...

  2. Windows删除某服务

    win+R然后cmd进入命令窗口 sc delete 服务名

  3. python 列表推导式 - python基础入门(16)

    截止到目前为止,python基础内容已经学习了50%左右,在学习编程过程中,我们不仅要学习python语法,同时也需要学习如何把自己代码写的更美观,效率更高. 一.什么是推导式 推导式是从一个或者多个 ...

  4. redis事务、并发及应用场景

    目录 事务概念 事务命令 乐观锁 悲观锁 并发控制及过期时间 队列 队列防丢失 阻塞队列 时间区间控制 持久化 RDB AOF 命令追加 文件写入.同步 RDB.AOF优缺点 RDB优缺 AOF优缺 ...

  5. go 数组的定义和赋值

    package main import "fmt" func main() {     //字符数组定义     var str [2]string     str[0] = &q ...

  6. S04_CH01_搭建工程移植LINUX/测试EMMC/VGA

    S04_CH01_搭建工程移植LINUX/测试EMMC/VGA 1.1概述: 本章内容是在已经提供安装了VIVADO2015.4 的ubuntu系统下,进行.大家可以下周我们已经提供的虚拟机镜像,我们 ...

  7. 使用Duilib开发Windows软件(5)——使用VLC做视频播放

    需求:调用PC上的摄像头拍照. 实现思路:接入视频流,截屏获取照片. 早期的vlc安装包(Windows)是附带sdk包的,现在的安装后已经没有了,原因如下: VLC SDK下载连接:https:// ...

  8. 三种redis数据导出导入方式

    推荐博客链接:https://www.cnblogs.com/hjfeng1988/p/7146009.html https://blog.csdn.net/qq_14945847/article/d ...

  9. 怎样在数组处理方法中使用this

    回调函数中的this不做处理的话, this仍然会指向window, 解决方法有两种. 第一种: 使用另一个变量固定this, 适用于在对象方法中使用的情况. var obj = { arr: [1, ...

  10. 将自定义dockerfile生成的image推送到仓库中

    本文为以阿里云的案例方法,其他方法未尝试 1.注册阿里云账号 2.设置密码并通过docker登录 3.创建命名空间 4.创建镜像仓库 创建仓库时,需要选择代码源的仓库储存的方式,这里我用的是gitHu ...