MySQL-进阶7-子查询 - select后/where后/from后/ []where后/having后] / exists后面 的相关子查询
/*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后面 的相关子查询的更多相关文章
- Mysql相关子查询&&MySQL获取分组后的TOP N记录
小燕子,哈哈哈哈~~~~~~~~~~ 相关子查询是指引用了外部查询列的子查询,即子查询会对外部查询的每行进行一次计算. 举个例子 root:test> show create table tes ...
- sql之独立子查询和相关子查询总结
1.独立子查询:顾名思义:就是子查询和外层查询不存在任何联系,是独立于外层查询的: 下面就看一个例子: 有一张订单表 Sales.Order 和一张 客户表 Sales.Customer 下面的sql ...
- T-SQL的进阶:超越基本级别3:构建相关子查询——701小组
T-SQL的进阶:超越基本级别3:构建相关子查询 格雷戈里·拉森,2014/03/05 原文链接: http://www.sqlservercentral.com/articles/Stairway+ ...
- SQL相关子查询是什么?和嵌套子查询有什么区别?
目录 两者的各种叫法 相关子查询MySQL解释 相关子查询Wikipedia解释 相关子查询执行步骤拆解 相关子查询和嵌套查询的区别 参考资料 两者的各种叫法 相关子查询叫做:Correlated S ...
- ylb:子查询(嵌套子查询)和子查询(相关子查询)
ylbtech-SQL Server:SQL Server-子查询(嵌套子查询)和子查询(相关子查询) SQL Server 子查询(嵌套子查询)和子查询(相关子查询). 1,ylb:1,子查询(嵌套 ...
- [SQL SERVER系列]之嵌套子查询和相关子查询
子查询有两种类型,一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数:另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的 ...
- 相关子查询和嵌套子查询 [SQL Server]
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号 图书名 出版社 价格-------------- ...
- SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...
- SQLServer学习笔记<>相关子查询及复杂查询
二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,coun ...
随机推荐
- 三节课MINI计划第一周
第一部分 产品经理做什么以及需要的能力 (一)用户分析 用户群——行为分析——需求痛点——产品卖点——更多用户群 (二)功能分析 产品调研——产品结构——功能点——关键流程——下一轮产品调研 (三 ...
- 【计算机视觉】Selective Search for Object Recognition论文阅读1
Selective Search for Object Recognition 作者: J. R. R. Uijlings, K. E. A. van de Sande, T. Gevers, A. ...
- 网络编程(socket).WinSocket_recvfrom出错,GetLastError()为10054
1.在写 我的Qt598(vs2017)x64版本的 shadowsocks程序时遇到的. 具体问题情况 大概是这样:QUdpSocket(假设是sktA) connect接收函数,sktA侦听 端口 ...
- Windows服务操作帮助类
/// <summary> /// 打开系统服务 /// </summary> /// <param name="serviceName">系统 ...
- FromServices回来
FromServices回来 起因 这两天,我忽然有点怀念 Asp.NET MVC 5 之前的时代,原因是我看到项目里面有这么一段代码(其实不止一段,几乎每个 Controller 都是) [Rout ...
- 5、1 es 数据库和mysql 数据库同步 (Windows操作系统)
(1)在logstash-5.6.8安装目录下创建文件夹mysqletc (名称随意) (2)文件夹下创建mysql.conf (名称随意) ,内容如下: input { jdbc { #sc表 jd ...
- vue-cli开发-搭建项目(一)
前言 vue-cli是Vue官方提供的命令行工具,可用于快速搭建大型单页应用.集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.建议先熟悉 Vue 本身之后再研究 C ...
- 《Mysql - 索引(唯一索引和普通索引的选择)Change Buffer 》
一:概述 - 如果业务代码已经保证了不会写入重复的身份证号. - 从性能的角度考虑,你会为这个身份证号,选择唯一索引还是普通索引呢?选择的依据是什么呢? - 这就要从他们的执行过程看起. 二:唯一索引 ...
- LC 144. / 94. / 145. Binary Tree Preorder/ Inorder/ PostOrder Traversal
题目描述 144. Binary Tree Preorder Traversal 94. Binary Tree Inorder Traversal 145. Binary Tree Postorde ...
- python学习-50 pickle模块
pickle模块 与json方法是一样的 import pickle dic = {'} print(type(dic)) a = pickle.dumps(dic) print(type(a)) f ...