子查询

嵌套在其他语句内部的select语句称为子查询或内查询,外层的语句可以是insert、update、delete、select等,一般select作为外层语句较多。外面如果为select语句,则此语句称为外查询或主查询

【说明】:

  • 子查询 ( 内查询) 在主查询之前执行完成。
  • 子查询的结果被主查询( 外查询)使用 。
  • 多行子查询和单行子查询操作不能混用

分类

分类 说明
标量子查询(单行子查询) 结果集为一行一列
列子查询(多行子查询) 结果集为多行一列
行子查询 结果集为多行多列
表子查询 结果集为多行多列

使用

按出现位置

  • select后面:

    仅仅支持标量子查询(一行一列)

  • from后面:

      表子查询(将子查询结果充当一张表),要求必须起别名
  • where或having后面:

    标量子查询

    列子查询

    行子查询

  • exists后面:

    标量子查询

    列子查询

    行子查询

    表子查询

注意:

  • 单行子查询操作符::= > >= < <= <>(不等)
  • 多行子查询操作符:IN/NOT IN ANY|SOME ALL
  • 能用exists的地方都能用in
#查询有员工的部门名
use myemployees
SELECT department_id
FROM departments d
WHERE EXISTS(
SELECT *
FROM employees e
WHERE d.department_id = e.department_id
)
#in写法
SELECT department_id
FROM departments
WHERE department_id in (
SELECT department_id
FROM employees e
)

综合案例

#查询工资最低的员工信息
#1、查询最低工资
SELECT MIN(salary)
FROM employees;
#2、salary = 1
SELECT last_name,salary
FROM employees
WHERE salary = (
SELECT MIN(salary)
FROM employees
); #查询平均工资最低的部门信息
#1、查询每个部门的平均工资
SELECT AVG(salary),department_id
FROM employees
GROUP BY department_id
#2、
SELECT ag,d.*
FROM departments d
INNER JOIN (
SELECT AVG(salary) ag,department_id
FROM employees
GROUP BY department_id
ORDER BY ag
LIMIT 1
) d_avg
ON d_avg.department_id = d.department_id #查询平均工资最高的job信息
#1、查询平均工资最高的job_id
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 1
#2、
SELECT *
FROM jobs
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
ORDER BY AVG(salary) DESC
LIMIT 1
)

联合查询

常用于查询多个表,且多表之间没有直接的连接关系

查询语句1
union
查询语句2
union
查询语句3
...;

作用:

  • 可将一条比较复杂的查询语句拆分成多条语句
  • 可将无关联的表合并在一起,连接查询需要两表中有关联的属性联合查询不需要

注意:

  • union关键字会去重,想要保留重复数据,则要使用union all
  • 只在最后一个查询语句后加分号结束符;
  • 要求多条查询语句的查询列数必须一致
  • 要求多条查询语句的查询的各列类型、顺序一致,若不一致则按第一条的顺 序排列
  • union 会去重,union all包含重复项

子查询 & 联合查询的更多相关文章

  1. MySQL的查询,子查询,联结查询,联合查询

    MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...

  2. MySQL数据库8 -子查询,联合查询

    一 使用IN关键字的子查询 问题: 查询游戏类型是'棋牌类' 的游戏的分数信息 - 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以 ...

  3. MySQL数据库 —子查询,联合查询

    一 使用IN关键字的子查询 1.查询游戏类型是'棋牌类' 的游戏的分数信息 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以这一组编 ...

  4. 转:EntityFramework查询--联合查询(Join,GroupJoin)

    首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...

  5. EntityFramework查询--联合查询(Join,GroupJoin)

    首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...

  6. MySQL (六)--外键、联合查询、子查询

    1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...

  7. mysql之连接查询、联合查询、子查询

    本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...

  8. Mysql连接查询、子查询、联合查询 整理

    连接查询 连接语法的基本形式 from 表1  [连接方式]  join 表2  [on 连接条件]: 交叉连接 语法: from  表1  [cross]  join  表2  ;      //可 ...

  9. mysql学习之路_联合查询与子查询

    联合查询 联合查询:将多次查询(多条select语句)在记录上进行拼接(字段不会增加). 语法:多条select语句构成,每条select语句获取的字段必须严格一致(但是字段类型无关). Select ...

随机推荐

  1. gitlab与git命令

    gitlab安装目录 /etc/gitlab#配置文件目录 /run/gitlab#运行pid目录 /opt/gitlab#安装目录 /var/opt/gitlab#数据目录 /var/log/git ...

  2. PHP - 设计模式 - 观察者模式

    <?php//观察者模式//抽象通知者abstract class Subject { protected $observer = array() ; //添加观察者 public abstra ...

  3. opencv官宣

    opencv官方文档地址 https://docs.opencv.org/master/ 安装opencv(cv2)官方地址 https://pypi.org/project/opencv-pytho ...

  4. shell加密为二进制可执行文件

    1.下载shc工具 http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz或者到http://www.datsi.fi.upm.es/~fro ...

  5. AT4996-[AGC034F]RNG and XOR【FWT,生成函数】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4996 题目大意 给出一个\(0\sim 2^n-1\)下标的数组\(p\),\(p_i\)表示有\(p_i\) ...

  6. 学习使用Wpf开源的文本编辑器—smithhtmleditor

    前言 本文主要介绍使用Wpf文本编辑器--smithhtmleditor. 编辑器使用 首先新建一个项目WpfEditor. 然后到Codeplex下载smithhtmleditor. 下载地址:ht ...

  7. ToString()字符串转换你用正确了吗?

    前言 在开发中,ToString()这个方法太方便了,以致于误解大家转换时都是直接Object.ToString()直接转换, 其实不然, 一般都是转之前先判断是否为null后再进行转换,否则会直接报 ...

  8. 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验

    华为钥匙环服务(Keyring),是HMS Core在安全领域开放的全新服务,为全球开发者提供用户认证凭据(以下简称"凭据")本地存储和跨应用.跨形态共享能力,帮助您在安卓应用.快 ...

  9. SharkCTF2021 Classic_Crypto_king2

    crypto类题. 题面如下: 前面的代码给出了原理:后面的字符串第一行是print出的key,第二行是密文. 加密原理是,首先对table进行乱序处理,然后将明文flag按照(顺序table--&g ...

  10. Less-(38~41) 堆叠注入

    首先申明,Less-(38~41)可以采取和Less-(1~4)相同的解法:(一一对应) 然而,他们的漏洞其实更大,我们可以做更多具有破坏性的事情. 代码审计: Less-(38~41): 41的$s ...