子查询 & 联合查询
子查询
嵌套在其他语句内部的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 ...
随机推荐
- vue 熟悉项目结构 创建第一个自己的组件
* vue开发环境搭建 * 项目入口文件 ./src/main.js // The Vue build version to load with the `import` command // (ru ...
- 停止:service jenkins stop,提示:Failed to stop jenkins.service: Unit jenkins.service not loaded.
uni@uni-virtual-machine:~$ service jenkins stop Failed to stop jenkins.service: Unit jenkins.service ...
- 接口Mock测试
什么是Mock测试? Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDB ...
- Linux文件(夹)属性与权限
文件属性与权限,文件权限设置 参考资料:鸟哥的Linux私房菜 用户与用户组 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...
- python3.7发送邮件带附件
代码: 1 # -*- coding: utf-8 -*- 2 3 import smtplib, ssl 4 from email.mime.text import MIMEText 5 from ...
- 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念 | 百篇博客分析OpenHarmony源码 | v25.01
百篇博客系列篇.本篇为: v25.xx 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念 | 51.c.h .o 任务管理相关篇为: v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度 ...
- Keras函数——mode.fit_generator()
1 model.fit_generator(self,generator, steps_per_epoch, epochs=1, verbose=1, callbacks=None, validati ...
- vue项目中的element-ui地区级联选择器加详细地址push到对象中不显示的问题
想要实现级联选择器el-cascader和输入框el-input共同组成的详细地址,添加数据时弹出el-drawer嵌套el-form弹窗,然后在el-form添加数据提交后push到el-table ...
- Golang通脉之结构体
Go语言中的基础数据类型可以表示一些事物的基本属性,但是要表达一个事物的全部或部分属性时,这时候再用单一的基本数据类型明显就无法满足需求了,Go语言提供了一种自定义数据类型,可以封装多个基本数据类型, ...
- leetcode347 —— n中topK && PriorityQueue(Heap) && Map遍历
题目要求:求前K个最频繁出现的数字. 1.很容易想到,使用HashMap<Integer,Integer>来存储<number,frequency>键值对 1 int n = ...