子查询 订阅
子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。 展开全文
子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。
信息
外文名
Sub Query
命    令
WHERE子句中
中文名
子查询
语    言
SELECT-SQL
子查询定义概念
在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。当获得一个查询的答案需要多个步骤的操作,首先必须创建一个查询来确定用户不知道但包含在数据库中的值,将一个查询块嵌套在另一个查询块的WHERE字句或HAVING短语的条件中查询块称为子查询或内层查询。上层的查询块曾为父查询或外层查询。子查询的结果作为输入传递回“父查询”或“外部查询”。父查询将这个值结合到计算中,以便确定最后的输出。SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。以层层嵌套的方式来构造程序正是SQL中"结构化"的含义所在。 [1]  子查询是本质上就是一个完整 的SELECT 语句,它可以使一个 SELECT、SELECT...INTO 语句、INSERT...INTO 语句、DELETE 语句、或 UPDATE 语句或嵌套在另一子查询中。子查询的输出可以包括一个单独的值(单行子查询)、几行值(多行子查询)、或者多列数据(多列子查询)。
收起全文
精华内容
下载资源
问答
  • 子查询

    千次阅读 2019-05-19 10:46:40
    常见的子查询包括:WHERE子查询,FROM子查询,HAVING子查询,EXISTS子查询子查询必须使用小括号括起来。 WHERE子查询 案例 查询出低于平均工资的雇员信息(子查询返回的结果集是单行单列) SELECT * FROM emp ...

    子查询就是将一个查询的结果作为另一个查询的数据来源或判断条件的查询。
    常见的子查询包括:WHERE子查询,FROM子查询,HAVING子查询,EXISTS子查询,子查询必须使用小括号括起来。

    WHERE子查询

    案例
    查询出低于平均工资的雇员信息(子查询返回的结果集是单行单列)

    SELECT * FROM emp WHERE sal<(SELECT AVG(sal) FROM emp);
    

    在这里插入图片描述
    查询出公司最早入职的雇员信息

    SELECT * FROM emp WHERE hiredate=(SELECT MIN(hiredate) FROM emp);
    

    在这里插入图片描述
    查询出与SCOTT从事统一工作且工资相同的雇员信息
    若子查询中返回的是单行多列的结果集
    主查询中的条件判断字段的顺序要与子查询中需要查询的字段顺序保持一致

    SELECT * FROM emp WHERE (job,sal)=
    (SELECT job,sal FROM emp WHERE ename='SCOTT')
     AND ename<>'SCOTT'; 
    

    在这里插入图片描述
    查询出与经理职位工资相同的员工的工资
    子查询中返回的结果集是多行单列

    SELECT * FROM emp WHERE sal IN(SELECT sal FROM emp WHERE job='MANAGER')
    AND job<>'MANAGER';
    

    ANY 、ALL关键字
    ANY表示范围内任意一个,ALL表示范围内全部
    查询出薪资比经理的最高薪资低的员工信息(即小于任意一个经理的薪资)

    SELECT * FROM emp WHERE sal<ANY(SELECT sal FROM emp WHERE job='MANAGER');
    

    在这里插入图片描述
    查询出比经理的最低薪资低的员工信息(即小于所有的经理的薪资)

    SELECT * FROM emp WHERE sal<ALL(SELECT sal FROM emp WHERE job='MANAGER');
    

    在这里插入图片描述
    查询出薪资排名第三的雇员的信息

    SELECT * FROM emp
     WHERE sal=(SELECT MAX(sal) FROM emp WHERE sal<(SELECT max(sal) FROM emp WHERE sal<(SELECT MAX(sal) FROM emp)));
    

    在这里插入图片描述

    HAVING子查询

    HAVING子查询指的是分组过滤条件下的子查询,在HAVING子句中。
    案例
    查询出平均薪资高于所有员工平均薪资的职位的名称,以及职位的人数,以及这些职位的平均薪资

    SELECT job,COUNT(*),AVG(sal) FROM emp
    GROUP BY job HAVING AVG(sal)>
    (SELECT AVG(sal) FROM emp);
    

    在这里插入图片描述
    查询出平均薪资最高的职位的名称和该职位的平均薪资

    SELECT job,AVG(sal) FROM emp
    GROUP BY job HAVING AVG(sal) = 
    (SELECT MAX(AVG(sal)) FROM emp GROUP BY job);
    

    在这里插入图片描述

    FROM子查询

    FROM子查询的数据来源是另一个查询的结果相当于一张临时数据表,
    通常为子查询定义别名,如果要用子查询中的字段使用别名.字段名调用,
    返回的一般是多行多列的结果集
    案例
    查询平均工资高于2000的职位名称以及该职位的平均工资

    SELECT job,avgsal
     FROM (SELECT job,AVG(sal) AS avgsal FROM emp GROUP BY job)temp
     WHERE temp.avgsal>2000;
    

    在这里插入图片描述
    查询出有佣金并且薪资高于佣金的雇员的信息

    SELECT * FROM (SELECT * FROM emp WHERE comm IS NOT NULL)
    WHERE sal>comm;
    

    在这里插入图片描述
    查询各岗位的最高薪水、最低薪水,要求只统计薪水>1000的;

    SELECT job,MAX(sal),MIN(sal)
     FROM (SELECT * FROM emp WHERE sal>1000)
     GROUP BY job;
    

    查询各部门的平均薪水及部门编号,只统计薪水>2000的

    SELECT AVG(sal),deptno
     FROM (SELECT * FROM emp WHERE sal>2000)
      GROUP BY deptno;
    

    在这里插入图片描述
    查询各部门的平均薪水及部门编号,要求只有员工姓名包含’A’的才参与统计,只列出平均薪水>1500的,按照平均薪水降序排列

    SELECT AVG(sal) avgsal,deptno FROM
     (SELECT * FROM emp WHERE ename LIKE '%A%')
     GROUP BY deptno HAVING AVG(sal) > 1500 ORDER BY avgsal DESC;
    

    在这里插入图片描述
    查询最高薪水的员工信息

    SELECT * FROM emp WHERE sal=(SELECT MAX(sal) FROM emp);
    

    在这里插入图片描述
    查询薪水大于所在部门平均薪水的员工信息

    SELECT * FROM emp e,
     (SELECT deptno,AVG(sal) avgsal 
     FROM emp GROUP BY deptno)t     
     WHERE e.deptno=t.deptno AND sal>avgsal;
    

    在这里插入图片描述
    查询各部门最高薪水的员工信息

    SELECT * FROM emp e,
    (SELECT deptno,MAX(sal) maxsal FROM emp GROUP BY deptno) t 
     WHERE e.deptno=t.deptno AND e.sal=t.maxsal;
    

    在这里插入图片描述

    EXISTS子查询

    EXISTS子查询的特征:将主查询中的数据带到子查询中验证,若验证成功则返回TRUE,验证失败返回FALSE;当主查询接收到TRUE时,该数据显示,若接收到FALSE,该数据不显示。
    案例
    查询出有部门的雇员信息

    SELECT * FROM emp e WHERE EXISTS (SELECT * FROM dept d
     WHERE e.deptno=d.deptno);
    

    在这里插入图片描述
    查询出没有佣金的雇员的信息

    SELECT * FROM emp e WHERE EXISTS(
     SELECT * FROM emp p WHERE e.comm=p.comm);
    

    在这里插入图片描述

    展开全文
  • MySQL子查询 嵌套查询

    万次阅读 多人点赞 2018-09-27 20:18:58
    子查询:嵌套在其他查询中的查询。 有三张表分别如下: customers: 存储顾客信息 orderitems:只存储订单信息,无客户信息 orders:存储订单号和顾客id     注意:一般在子查询中,程序先运行在嵌套在最内...

    子查询:嵌套在其他查询中的查询。

    有三张表分别如下:

    1. customers: 存储顾客信息

    1. orderitems:只存储订单信息,无客户信息

    1. orders:存储订单号和顾客id

     

     

    注意:一般在子查询中,程序先运行在嵌套在最内层的语句,再运行外层。因此在写子查询语句时,可以先测试下内层的子查询语句是否输出了想要的内容,再一层层往外测试,增加子查询正确率。否则多层的嵌套使语句可读性很低。

     

    子查询训练

    训练1

    查询买了商品为’TNT2’的顾客信息

    子查询中涉及3张表的订单。因此分三步,1. 在orderitems里找出TNT2的订单号;2. 在orders里找出第一步找出的订单号对应的客户id;3. 在customers中找出第二步对应客户的所有信息。

    1. 在orderitems里找出TNT2的订单号

    SELECT order_num FROM orderitems

    WHERE prod_id='TNT2';

    2. 在orders里找出第一步找出的订单号对应的客户id

    SELECT cust_id FROM orders

    WHERE order_num

    IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');

    3. 在customers中找出第二步对应客户的所有信息       

    SELECT * FROM customers

    WHERE cust_id

    IN (SELECT cust_id FROM orders WHERE order_num IN

    (SELECT order_num FROM orderitems WHERE prod_id='TNT2'));

    这样就得到结果啦~

    子查询一般与IN操作符结合使用,也可用=><等。

     

    另外,子查询还可以用于计算字段。

    训练2

    如,想要查询每个客户的订单数

    分步思考:1. 查询某个客户的订单数;2. 某个客户改为所有客户。

    1. 查询某个客户的订单数

    SELECT COUNT(*) AS orders1 FROM orders WHERE cust_id =10001;

    2. 某个客户改为所有客户

    SELECT cust_name, cust_state,

    (SELECT COUNT(*) FROM orders WHERE orders.cust_id=customers.cust_id)

    AS orders1

    FROM customers

    ORDER BY cust_name;

    注意:当多个表都拥有同样的列名如cust_id时,一定要完全限定列名。

    展开全文
  • MySQL子查询(嵌套查询)

    万次阅读 多人点赞 2019-05-10 22:15:31
    一个查询语句嵌套在另一个查询语句内部的查询 常用操作符:ANY(SOME), ALL, IN, EXISTS ...1.带ANY(SOME)关键字的子查询 这里any和some是同义词,都是表示满足任一条件。 例:查询tb1中的所有数...

    一个查询语句嵌套在另一个查询语句内部的查询

    常用操作符:ANY(SOME), ALL, IN, EXISTS

    比较运算符:>, >=, <, <=, != 等

    创建两个表,表明分别是tb1,tb2,并向其各插入了数据。

            

     

    1.带ANY(SOME)关键字的子查询

    这里any和some是同义词,都是表示满足任一条件。

    例:查询tb1中的所有数据,只要大于tb2表中数据的任意值,既符合查询条件。

    select num1 from tb1 where num1>ANY(select num2 from tb2);

     

    2.带ALL关键字的子查询

    例:查询tb1中的所有数据,返回其中比tb2表中任何值都大的数据。

    select num1 from tb1 where num1>ALL(select num2 from tb2);

     

    3.带EXISTS关键字的子查询

    例1:查询fruits表中name字段下是否有apple,若有则查询fruits表中的记录,否则不查询。

    select * from fruits where EXISTS(select name from fruits where name='apple');

    例2:查询tb1表中是否存在num1=13的记录,若存在,则查询fruits表中price大于6.00的记录。

    select * from fruits where price>6.00 and EXISTS (select num1 from tb1 where num1=13);

    相反,可以使用 not exists 查询不存在的,用法相同。

     

    4.带IN关键字的子查询

    表示查询结果在后面子查询的范围之中

    例如:查询tb1表中的num1字段下的数据作为数据列,fruits表中id字段下的数据与其进行比较,返回符合条件的记录。

    select * from fruits where id IN (select num1 from tb1);

     

    5.带比较运算符的子查询

    select * from 表名 where 字段名 > (select ······);

     

     

     

    展开全文
  • 子查询-表子查询

    千次阅读 2017-11-14 22:55:10
    1:子查询(表子查询) 1:表子查询:子查询返回的结果是多行多列的二维表(子查询的返回的结果当做一个二维表来使用) 2:案例演示 需要:找出每个班最高的一个学生 1:确定数据源: 先将学生按照身高进行降序排序...
    1:子查询(表子查询)
    1:表子查询:子查询返回的结果是多行多列的二维表(子查询的返回的结果当做一个二维表来使用)
    2:案例演示
    需要:找出每个班最高的一个学生
    1:确定数据源: 先将学生按照身高进行降序排序
    select * from t_student order by height desc;
    2:从每个班中选出第一个学生
    select * from t_student group by c_id 每个班选出第一个学生
    表子查询: from子查询,得到的结果作为from数据源
    3:SQL语句
    1:查询班级表
    SELECT * FROM t_class;

    2:查询学生表
    SELECT * FROM t_student;

    3;SELECT * FROM (SELECT * FROM t_student ORDER BY height DESC) AS student GROUP BY c_id;


    展开全文
  • 1、查询部分分为主查询和子查询; 2、根据返回值的记录多少分为单行子查询和多行子查询;单行子查询用单行比较符=连接;多行子查询用多行比较符in连接; 3、子查询的内容可以放在FROM后面,也可以放在WHERE...
  • 子查询 什么是子查询 子查询概念 子查询:sub query   子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询子查询:指在一条select语句中...
  • MySQL嵌套查询详细笔记(子查询

    万次阅读 多人点赞 2017-11-06 18:08:36
    MySQL嵌套查询(子查询
  • --子查询(内查询)在主查询之前一次执行完成。 --子查询的结果被主查询(外查询)使用。 --注意事项 子查询要包含在括号内。 将子查询放在比较条件的右侧。 单行操作符对应单行子查询,多行操作符对应多行子查询。...
  • 1、查询部分分为主查询和子查询; 2、根据返回值的记录多少分为单行子查询和多行子查询;单行子查询用单行比较符=连接;多行子查询用多行比较符in连接; 3、子查询的内容可以放在FROM后面,也可以放在WHERE后面,...
  • Hive 子查询

    千次阅读 2018-01-04 11:33:30
    子查询
  • 子查询(exists子查询)

    千次阅读 2017-11-14 23:19:11
    MySQL子查询(exists子查询) 1:Exists子查询就是用来判断某些条件是否满足(跨表),Exists是接在where之后,Exists返回的结果只有0和1 2:返回结果的演示 SELECT EXISTS(SELECT * FROM t_student);3: SELECT ...
  • 1.连接基本语法select columns_list from table_1 innner join table_2on join_condition;eg:select e.empno,e.ename,d.dname from emp e...单行子查询 返回一行数据的子查询语句eg:在emp表中,查询出既不是最高工资...
  • Mysql子查询

    千次阅读 2020-01-09 19:20:08
    子查询 含义 出现在其他语句中的select语句,称为子查询或内查询 外部的查询语句,称为主查询 分类 位置 select后 标量子查询 from后 表子查询 where或having后 标量子查询(单行) 列子查询(多行)...
  • Oracle 普通子查询和关联子查询

    千次阅读 2017-09-02 21:22:20
    子查询(普通子查询和关联子查询子查询 = 简单查询 + 限定查询 + 多表查询 + 统计查询的综合体; 所谓子查询:指的就是在一个查询之中嵌套了其他的若干查询,嵌套子查询之后的查询SQL语句如下: SELECT [DISTINCT...
  • Oracle - 一般子查询+相关子查询

    千次阅读 2019-04-08 21:45:41
    一般子查询(select查询结果作为另一个查询的条件 => 不含有Exists的SQL查询语句) 相关子查询(含有Exists的SQL查询语句) Example-1: Example-2: 一:执行顺序与原理 ◼ ◼ 普通子查询的执行顺序是...
  • 【MySQL】多表联合查询、连接查询、子查询

    万次阅读 多人点赞 2019-06-03 17:08:20
    文章目录 【1】连接查询 内连接查询 外连接查询 左连接 右连接 【2】联合查询 【3】子查询 带in关键字的子查询 带比较运算符的子查询 带exists的子查询 带any关键字的子查询 带all关键字的子查询 【1】连接查询 连接...
  • SQL子查询、相关子查询

    千次阅读 2018-10-21 17:52:35
    子查询 子查询是嵌套在其他查询中的查询。子查询总是从内向外处理。 注意: 1、在使用子查询时尽量把子查询分解为多行并且适当进行缩进,能极大的简化子查询的使用。 2、不能嵌套太多的子查询,这样会降低性能。...
  • update子查询

    千次阅读 2019-03-27 19:14:38
    1, 关联子查询和非关联子查询 在非关联子查询中,内部查询只执行一次并返回它的值给外部查询,然后外部查询在它的处理中使用内部查询返回给它的值。而在关联子查询中,对于外部查询返回的每一行数据,内部查询都要...
  • Oracle子查询

    千次阅读 2018-11-25 17:52:59
    子查询类型4.单行子查询5.多行子查询6.多列子查询6.1单行多列子查询6.2多行多列子查询 当不能一步求解时,可以考虑使用子查询。 1.语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list ...
  • Oracle的子查询 何为子查询子查询时嵌入在其他SQL语句中的SELECT语句,也称嵌套查询 举例:查询和SMITH是同一个职位的员工 //这是在where子句中使用子查询 Select * From emp Where job = (select job ...
  • MySQL select 子查询的使用

    万次阅读 2020-09-22 18:35:02
    子查询 where 这个值是计算出来的 本质:在 where 语句中嵌套一个子查询语句 /*============== 子查询 ================ 什么是子查询? 在查询语句中的WHERE条件子句中,又嵌套了另一个查询语句 嵌套查询可由多...
  • 主查询 子查询 纲举目张——子查询的分类 WHERE语句后的 子查询
  • 【SQL】(不)相关子查询

    千次阅读 多人点赞 2020-04-09 17:15:08
    相关子查询特点执行规则示例 (不)相关查询在嵌套查询中应用,嵌套查询最能体现SQL结构化查询的特点 本篇内容,先看示例,食用更佳 1. 不相关子查询 特点 由子向父执行(子 -> 父),且父查询和子查询可以...
  • MySQL子查询

    千次阅读 2020-02-28 15:50:53
    多表关联或者表内字段关联时,或做相似功能判断时,往往会使用子查询来解决相应问题 1. 无关子查询: 内查询没有用到外查询的列,而且内查询可以单独运行. 2. 相关子查询: 内查询使用了外查询的列,而且内查询不能单独...
  • #IN 子查询#采用IN 子查询获得参加考试的在读学生名单SELECT student_no,student_name FROM student WHERE student_noIN(SELECT student_no FROM resultWHERE subject_no=(#获得参加Logic Java课程最近一次考试的...
  • 单行子查询 只返回一行数据的子查询的语句,使用单行比较操作符=,>,>=,<,<=,<>等 举例: 1显示与JAMES同部门的所有其他的员工姓名、工资、部门号 Select ename,sal,deptno From emp Where ...
  • 详解mysql子查询

    千次阅读 2018-12-08 13:17:11
    本文详解mysql中的子查询子查询分为where子查询和from子查询。 where子查询包括标量子查询、列子查询、行子查询、exists子查询 from子查询包括表子查询 1.标量子查询 概念:子查询得到结果是一个数据 (一行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 827,657
精华内容 331,062
关键字:

子查询