一、子查询简单介绍

1、什么是子查询?

一个查询之中嵌套了其他的若干查询。

  • 在使用select 语句查询时,有时候where的查询条件中的限制条件不是一个确定的值,而是一个来自于另一个查询的结果。
  • 子查询一般出现在fromwhere 子句中。

2、子查询语法:

select <select_list>

from 表名

where 条件(s) 操作符

​ (select <select_list> from 表名);

  • 子查询在主查询前执行,然后主查询再使用子查询的结果。

3、子查询例子:

# 查询大于公司平均工资的员工姓名
select ename, sal from emp where sal > (select avg(sal) from emp);

4、子查询经典案例---Oracle的分页查询

5、子查询的使用注意事项:

  • 子查询需要用括号括起来
  • 将子查询放在比较运算符的右边【增强可读性】
  • 对单行子查询使用单行运算符
  • 对多行子查询使用多行运算符

二、子查询的分类

1、子查询的分类【根据子查询的结果集来划分】

(1)单行单列子查询:子查询返回一行一列记录,好比就是一个值

  • 返回一条记录---比较运算符(针对一个值的运算符): = > < >= < !=

    # 查询大于公司平均工资的员工姓名
    select ename, sal from emp where sal > (select avg(sal) from emp);

(2) 多行单列子查询:子查询返回单列多行记录,好比是多个值

  • 返回多条记录---比较运算符(多个值的运算符): in any all

  • in 相当于 = any

  • any:与子查询返回的任意一个值做比较; all:与子查询返回的每一个值做比较

    # 查询工资等于部门经理的员工信息
    select * from emp where sal in (select sal from emp where job = 'manager');
    select * from emp where sal = any (select sal from emp where job = 'manager');
    # 查询工资大于任意部门经理的员工信息
    select * from emp where sal > any (select sal from emp where job = 'manager');
    # 查询工资小于任意部门经理的员工信息
    select * from emp where sal < any (select sal from emp where job = 'manager');

(3)多行多列子查询:子查询返回多列一行/多行记录,好比是一张表 【其实就是多表连接查询

  • 一般把查询结果含多个列的当做临时表必须给临时表起个别名】,接着在临时表上继续查询或者连接查询;

    # 查询出每个部门的编号、名称、部门人数、平均工资
    select t.deptno, d.dname, t.count_empno, t.avg_sal
    from dept d left join
    (select e.deptno, count(e.empno) count_empno, avg(e.sal) avg_sal from emp e group by deptno) t
    on d.deptno = t.deptno;

2、union/union all

  • join 是横向连接,union/union all 是纵向连接(一般用于作为临时表)
  • 注意:
    • union 内部的select 语句必须是拥有相同数量的列
    • 列也必须拥有兼容的数据类型
    • 每条select语句中的列的顺序必须相同
    • union 结果集的列名总是等于union中第一个select语句的列名
    • union操作符选去不同的值,若允许值重复-使用union all 性能更高
  • 语法:

    select <select_list> from 表名1

    union | union all

    select <select_list> from 表名2

  • 全连接--mysql不止全连接,不过可以使用左右连接+union实现

    #全连接查询员工的编号、名称、部门名称
    select e.deptno,e.ename,d.dname from emp e left join dept d on e.deptno = d.deptno
    union
    select e.deptno,e.ename,d.dname from emp e right join dept d on e.deptno = d.deptno;

mysql加强(6)~子查询简单介绍、子查询分类的更多相关文章

  1. [MySQL] 高可用架构MMM简单介绍

    一.来源及原理: 众所周知,MySQL自身提供了AB复制(主从复制),然后可以很轻松实现master-master双向复制,同时再为其中一个Master节点搭建一个Slave库. 这样就实现了MySQ ...

  2. MySQL - 数据查询 - 简单查询

    1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...

  3. (转)简单介绍java Enumeration

    简单介绍java Enumeration 分类: java技术备份 java数据结构objectstringclass存储 Enumeration接口  Enumeration接口本身不是一个数据结构 ...

  4. elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)

    一.查询建议介绍 1. 查询建议是什么? 查询建议,为用户提供良好的使用体验.主要包括: 拼写检查: 自动建议查询词(自动补全) 拼写检查如图: 自动建议查询词(自动补全): 2. ES中查询建议的A ...

  5. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  6. MySql基本查询、连接查询、子查询、正则表达查询解说

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 查询数据指从数据库中获取所须要的数据.查询数据是数据库操作中最经常使用,也是最重要的操作.用户 ...

  7. mysql查询操作之单表查询、多表查询、子查询

    一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...

  8. 在MySQL中使用子查询和标量子查询的基本用法

    一.MySQL 子查询 子查询是将一个 SELECT 语句的查询结果作为中间结果,供另一个 SQL 语句调用.MySQL 支持 SQL 标准要求的所有子查询格式和操作,也扩展了特有的几种特性.子查询没 ...

  9. Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解

    查询数据指从数据库中获取所需要的数据.查询数据是数据库操作中最常用,也是最重要的操作.用户可以根据自己对数据的需求,使用不同的查询方式.通过不同的查询方式,可以获得不同的数据.MySQL中是使用SEL ...

随机推荐

  1. 【LeetCode】Swap Nodes in Pairs 解题报告

    Swap Nodes in Pairs [LeetCode] https://leetcode.com/problems/swap-nodes-in-pairs/ Total Accepted: 95 ...

  2. 【剑指Offer】合并两个排序的链表 解题报告(Python)

    [剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...

  3. 【LeetCode】859. Buddy Strings 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcod ...

  4. 【JAVA今法修真】 第七章 洞天风云起,索引混乱平

    您好,我是南橘,万法仙门的掌门,刚刚从九州世界穿越到地球,因为时空乱流的影响导致我的法力全失,现在不得不通过这个平台向广大修真天才们借去力量.你们的每一个点赞,每一个关注都是让我回到九州世界的助力,兄 ...

  5. Masked Gradient-Based Causal Structure Learning

    目录 概 主要内容 最终的目标 代码 Ng I., Fang Z., Zhu S., Chen Z. and Wang J. Masked Gradient-Based Causal Structur ...

  6. 【入门到精通】❤️「Java工程师全栈知识路线」

    持续更新中- Vue前端开发 章节 内容 实践练习 Vue.js高效前端开发 • (实践练习) 第1章 Vue.js高效前端开发 • [ 一.初识Vue.js ] 第2章 Vue.js高效前端开发 • ...

  7. 编写Java程序,模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员。教练员包括乒乓球教练和篮球教练。为了方便出国交流,根乒乓球相关的人员都需要学习英语。

    需求说明: 模拟教练员和运动员出国比赛场景,其中运动员包括乒乓球运动员和篮球运动员.教练员包括乒乓球教练和篮球教练.为了方便出国交流,根乒乓球相关的人员都需要学习英语.具体分析如下: (1)共同的属性 ...

  8. windows环境下elasticsearch安装教程(超详细)

    一.安装jdk ElasticSearch是基于lucence开发的,也就是运行需要java jdk支持.所以要先安装JAVA环境. 由于ElasticSearch 5.x 往后依赖于JDK 1.8的 ...

  9. Identity Server 4到今年年底就停止支持了,试一下使用Orchard Core 作为认证服务

    Identity Server 4到今年年底就停止支持了,新的版本需要收费(好像目前是按企业规模,不过将来说不准).我们需要为这种情况做一些技术准备,至少需要为用户多准备一些可选方案.从目前成熟的开源 ...

  10. linux 之 DolphinScheduler 安装步骤

    下载安装包 直接进官网下载 https://dolphinscheduler.apache.org/zh-cn/download/download.html 参考官方文档 https://dolphi ...