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 ...
随机推荐
- 域名购买、SSL证书申请使用和本地服务映射外网
万网购买域名 1.在如下网址购买,价格不是很贵,几块钱一年的都有:https://wanwang.aliyun.com/domain/?spm=5176.100251.111252.24.4ddd4f ...
- (2) laravel App目录结构说明
应用的核心代码位于 app 目录下,默认情况下,该目录位于命名空间 App 下, 并且被 Composer 通过 PSR-4自动载入标准 自动加载. app 目录下包含多个子目录,如Console.H ...
- 工作总结 CTO(张王岩) File构造器
import java.io.File; /** * 构建File对象 * @author Allen17805272076 * */ public class FileDemo2 { public ...
- wordPress设计网页实践
我希望能设计出世界上最美的画面! 首先进入你自己建立的网站http://localhost:8079/Frank,如上图所示.注意,编辑页面时,要可以上外网,否则wordPress的插件会下载出错! ...
- java.lang.reflect.InvocationTargetException at shade.com.datastax.spark.connector.google.common.base.Throwables.propagate(Throwables.java160)
org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 29.1 failed 4 tim ...
- Java基础---Java 开发工具IntelliJ IDEA 快捷操作
IDE中快捷编写函数的方法 public static void main(String[] args) ===> psvm System.out.println(); ====> sou ...
- C++基础--函数重载
函数重载定义: 在相同的作用域中具有相同的函数名而函数形参列表(参数类型.参数个数.参数顺序)不同的两个函数,称之为函数重载.注意:函数返回值类型并不是重载的条件. 函数重载优点: 可以使用相同的函数 ...
- mysql 中表与表之间的关系
如何找出两张表的对应关系 分析步骤: 1.先找出左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段 (通常是id) 2.再站 ...
- T100——错误信息提示传入参数显示
LET l_str1 = l_xccc.xccc901LET l_str2 = l_inat015LET l_str = l_str1.trim(),'|',l_str2.trim() CALL cl ...
- JS 07 Dom
DOM(Document Object Model): 结点的概念:整个文档就是由层次不同的多个节点组成,可以说结点代表了全部内容. 结点类型 1.元素结点 2.属性结点 3.文本结点 结点的注意 ...