子查询 & 联合查询
子查询
嵌套在其他语句内部的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包含重复项
子查询 & 联合查询的更多相关文章
- MySQL的查询,子查询,联结查询,联合查询
MySQL的查询,子查询,联结查询,联合查询 一.mysql查询的五种子句where(条件查询).having(筛选).group by(分组).order by(排序).limit(限制结果数) 二 ...
- MySQL数据库8 -子查询,联合查询
一 使用IN关键字的子查询 问题: 查询游戏类型是'棋牌类' 的游戏的分数信息 - 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以 ...
- MySQL数据库 —子查询,联合查询
一 使用IN关键字的子查询 1.查询游戏类型是'棋牌类' 的游戏的分数信息 游戏分数表中并未包含游戏类型信息 思路一:采用链接查询 思路二: 分两步进行,首先找到所以'棋牌类'游戏的编号,再以这一组编 ...
- 转:EntityFramework查询--联合查询(Join,GroupJoin)
首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...
- EntityFramework查询--联合查询(Join,GroupJoin)
首先我们先看一下Join public static IEnumerable<TResult> Join<TOuter, TInner, TKey, TResult>(this ...
- MySQL (六)--外键、联合查询、子查询
1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...
- mysql之连接查询、联合查询、子查询
本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...
- Mysql连接查询、子查询、联合查询 整理
连接查询 连接语法的基本形式 from 表1 [连接方式] join 表2 [on 连接条件]: 交叉连接 语法: from 表1 [cross] join 表2 ; //可 ...
- mysql学习之路_联合查询与子查询
联合查询 联合查询:将多次查询(多条select语句)在记录上进行拼接(字段不会增加). 语法:多条select语句构成,每条select语句获取的字段必须严格一致(但是字段类型无关). Select ...
随机推荐
- gitlab与git命令
gitlab安装目录 /etc/gitlab#配置文件目录 /run/gitlab#运行pid目录 /opt/gitlab#安装目录 /var/opt/gitlab#数据目录 /var/log/git ...
- PHP - 设计模式 - 观察者模式
<?php//观察者模式//抽象通知者abstract class Subject { protected $observer = array() ; //添加观察者 public abstra ...
- opencv官宣
opencv官方文档地址 https://docs.opencv.org/master/ 安装opencv(cv2)官方地址 https://pypi.org/project/opencv-pytho ...
- shell加密为二进制可执行文件
1.下载shc工具 http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9.tgz或者到http://www.datsi.fi.upm.es/~fro ...
- AT4996-[AGC034F]RNG and XOR【FWT,生成函数】
正题 题目链接:https://www.luogu.com.cn/problem/AT4996 题目大意 给出一个\(0\sim 2^n-1\)下标的数组\(p\),\(p_i\)表示有\(p_i\) ...
- 学习使用Wpf开源的文本编辑器—smithhtmleditor
前言 本文主要介绍使用Wpf文本编辑器--smithhtmleditor. 编辑器使用 首先新建一个项目WpfEditor. 然后到Codeplex下载smithhtmleditor. 下载地址:ht ...
- ToString()字符串转换你用正确了吗?
前言 在开发中,ToString()这个方法太方便了,以致于误解大家转换时都是直接Object.ToString()直接转换, 其实不然, 一般都是转之前先判断是否为null后再进行转换,否则会直接报 ...
- 【HMS Core 6.0全球上线】华为钥匙环服务,打造跨应用跨形态无缝登录体验
华为钥匙环服务(Keyring),是HMS Core在安全领域开放的全新服务,为全球开发者提供用户认证凭据(以下简称"凭据")本地存储和跨应用.跨形态共享能力,帮助您在安卓应用.快 ...
- SharkCTF2021 Classic_Crypto_king2
crypto类题. 题面如下: 前面的代码给出了原理:后面的字符串第一行是print出的key,第二行是密文. 加密原理是,首先对table进行乱序处理,然后将明文flag按照(顺序table--&g ...
- Less-(38~41) 堆叠注入
首先申明,Less-(38~41)可以采取和Less-(1~4)相同的解法:(一一对应) 然而,他们的漏洞其实更大,我们可以做更多具有破坏性的事情. 代码审计: Less-(38~41): 41的$s ...