一、子查询简单介绍

1、什么是子查询?

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

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

2、子查询语法:

select <select_list>

from 表名

where 条件(s) 操作符

​ (select <select_list> from 表名);

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

3、子查询例子:

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

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

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

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

二、子查询的分类

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

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

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

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

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

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

  • in 相当于 = any

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

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

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

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

    1. # 查询出每个部门的编号、名称、部门人数、平均工资
    2. select t.deptno, d.dname, t.count_empno, t.avg_sal
    3. from dept d left join
    4. (select e.deptno, count(e.empno) count_empno, avg(e.sal) avg_sal from emp e group by deptno) t
    5. 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实现

    1. #全连接查询员工的编号、名称、部门名称
    2. select e.deptno,e.ename,d.dname from emp e left join dept d on e.deptno = d.deptno
    3. union
    4. 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】270. Closest Binary Search Tree Value 解题报告(C++)

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

  2. 【LeetCode】459. Repeated Substring Pattern 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历子串 日期 [LeetCode] 题目地址:ht ...

  3. 【Java笔记】Java分包问题

    这个图讲的很清晰,转自-http://www.bubuko.com/infodetail-2219664.html

  4. 【Java例题】3.3 正整数分解

    3.将一个正整数分解为连续多个正整数之和. 例如: 15=1+2+3+4+5 15=4+5+6 15=7+8 package chapter3; import java.util.*; public ...

  5. [android]打印C++的输出信息在安卓logcat上调试

    #include <android/log.h> //宏定义全局函数:C++打印log到android-debug模式下帮助调试(勿删) //调用方式:slogd("test n ...

  6. Spring企业级程序设计 • 【第7章 Spring框架整合】

    全部章节   >>>> 本章目录 7.1 模型数据解析及控制器返回值 7.1.1 SSM框架环境搭建 7.1.1 ModelAndView多种用法 7.1.2 整合MyBati ...

  7. Debug解决问题方法论

    发现问题怎么办,如何处理, 所谓的Debug的一般流程是什么, 下面是我对此的一些思考总结, 后面还会继续完善补充. 1.处理思路总纲 发现问题 查看日志 没有日志,去找日志 找不到日志,继续找,有些 ...

  8. mongdb分片

    实验环境 主机              IP                虚拟通道 centos1       192.168.3.10         vmnet8 centos2       ...

  9. 1.HTML基本结构、头部、注释

    基本结构 1.HTML基本结构 <html>     <head>            <meta charset="utf-8">      ...

  10. Star Way To Heaven

    题目描述 小 x伤心的走上了 Star way to heaven. 到天堂的道路是一个笛卡尔坐标系上一个 n*m的长方形通道 顶点在0,0 和 . 小 n,m 从最左边任意一点进入,从右边任意一点走 ...