精华内容
下载资源
问答
  • 2021-02-07 19:27:07

    展开全部

    嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询不但能够出现在e69da5e6ba903231313335323631343130323136353331333365643662Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回。

    1、单行子查询 :单行子查询是指子查询的返回结果只有一行数据。当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, =, <=, <>)来进行比较。

    例:

    select ename,deptno,sal

    from emp

    where deptno=(select deptno from dept where loc='NEW YORK');

    2、多行子查询:多行子查询即是子查询的返回结果是多行数据。当主查询语句的条件语句中引用子查询结果时必须用多行比较符号(IN,ALL,ANY)来进行比较。其中,IN的含义是匹配子查询结果中的任一个值即可("IN" 操作符,能够测试某个值是否在一个列表中),ALL则必须要符合子查询的所有值才可,ANY要符合子查询结果的任何一个值即可。而且须注意ALL 和ANY 操作符不能单独使用,而只能与单行比较符(=、>、< 、>= 、<= 、<>)结合使用。

    例:

    1).多行子查询使用IN操作符号例子:查询选修了老师名叫Rona(假设唯一)的学生名字

    sql> select stName

    更多相关内容
  • sql 子查询 嵌套查询In the real world, there are times when we need a particular set of data but we don’t have the exact details for getting the data set. In such cases, we try to get the information ...

    sql 子查询 嵌套查询

    In the real world, there are times when we need a particular set of data but we don’t have the exact details for getting the data set. In such cases, we try to get the information from the available set of information that we have. To achieve such target we use SQL subquery.

    在现实世界中,有时候我们需要特定的数据集,但是我们没有获取数据集的确切细节。 在这种情况下,我们尝试从现有的可用信息集中获取信息。 为了实现这样的目标,我们使用SQL子查询。

    SQL子查询 (SQL Subquery)

    SQL subquery is a query nested inside another query. Most of the subqueries are used with WHERE clause of a query.

    SQL子查询是嵌套在另一个查询中的查询。 大多数子查询与查询的WHERE子句一起使用。

    SQL子查询规则 (SQL Subquery Rules)

    • A Subquery can be used with different SQL clauses like WHERE clause, HAVING clause and FROM clause.

      子查询可以与不同SQL子句(如WHERE子句,HAVING子句和FROM子句)一起使用。
    • Subqueries can be used with SELECT, UPDATE, INSERT and DELETE statements also.

      子查询也可以与SELECTUPDATEINSERTDELETE语句一起使用。
    • The order of execution starts from subquery first then the main query.

      执行顺序从子查询开始,然后是主查询。
    • The Subquery must be enclosed in parentheses.

      子查询必须用括号括起来。
    • An ORDER BY command cannot be used in a subquery, even though the main query can use an ORDER BY. The GROUP BY command can be used to perform the same function as the ORDER BY in a subquery.

      一个借命令命令不能在子查询中使用,即使主查询就可以使用ORDER BY。 GROUP BY命令可用于执行与子查询中的ORDER BY相同的功能。
    • When a subquery is used along with a comparison operator it should be on the right side of the comparison operator.

      当子查询与比较运算符一起使用时,它应位于比较运算符的右侧。

    SQL子查询语法 (SQL Subquery Syntax)

    SELECT column_name FROM table_name 
    WHERE column_name OPERATOR (SELECT column_name FROM table_name WHERE condition);

    The query inside the parenthesis after the OPERATOR is the subquery and the query outside the parenthesis is the main query.

    OPERATOR之后在圆括号内的查询是子查询,而在圆括号外的查询是主查询。

    SQL子查询示例 (SQL Subquery Example)

    Let us consider the following two tables in order to understand Subquery in a better way.

    让我们考虑以下两个表,以便更好地理解子查询。

    Student

    学生

    Roll NoNameAgeGender
    1Amit12M
    2John13M
    3Diana14F
    4Henry15M
    卷号 名称 年龄 性别
    1个 阿米特 12 中号
    2 约翰 13 中号
    3 戴安娜 14 F
    4 亨利 15 中号

    Class

    ClassSectionRoll No
    6A1
    7A2
    8A3
    9B4
    部分 卷号
    6 一个 1个
    7 一个 2
    8 一个 3
    9 4

    Please find below the MySQL queries to create the tables and insert the data.

    请在下面MySQL查询中查找以创建表并插入数据。

    CREATE TABLE `student` (
      `RollNo` INT NOT NULL,
      `Name` VARCHAR(45) NULL,
      `Age` INT NULL,
      `Gender` VARCHAR(45) NULL,
      PRIMARY KEY (`RollNo`));
      
      
      CREATE TABLE `class` (
      `ClassNo` INT NOT NULL,
      `Section` VARCHAR(45) NULL,
      `RollNo` INT NULL,
      PRIMARY KEY (`ClassNo`));
      
      
      INSERT INTO `student` (`RollNo`, `Name`, `Age`, `Gender`)
    VALUES
    	(1, 'Amit', 12, 'M'),
    	(2, 'John', 13, 'M'),
    	(3, 'Diana', 14, 'F'),
        (4,'Henry', 15,'M');
    	
    	 INSERT INTO `class` (`ClassNo`, `Section`, `RollNo`)
    VALUES
    	(6, 'A', 1),
    	(7, 'A', 2),
    	(8, 'A', 3),
        (9,'B', 4);

    Let us try to look into some examples using SQL subqueries.

    让我们尝试研究一些使用SQL子查询的示例。

    1. SQL subquery for getting all the student’s name with section ‘A’

      SQL子查询,用于获取“ A”部分的所有学生姓名
    2. SELECT Name FROM student 
      WHERE RollNo IN (SELECT RollNo FROM class WHERE section = 'A')
      Name
      Amit
      John
      Diana
      名称
      阿米特
      约翰
      戴安娜
      SQL nested query example

      SQL SubQuery with IN operator

      带IN运算符SQL SubQuery

    3. SQL subquery with class greater than 7

      类大于7SQL子查询
    4. SELECT * FROM student 
      WHERE RollNo IN (SELECT RollNo FROM class WHERE ClassNo>7)
      RollNoNameAgeGender
      3Diana14F
      4Henry15M
      卷号 名称 年龄 性别
      3 戴安娜 14 F
      4 亨利 15 中号
    SQL Subquery with where clause

    SQL subquery with Greater than operator

    具有大于运算符SQL子查询

    翻译自: https://www.journaldev.com/23945/sql-subquery-nested-query-sql

    sql 子查询 嵌套查询

    展开全文
  • SQL子查询和关联子查询

    千次阅读 2020-09-05 13:03:58
    SQL语句的复杂查询语句,包括标量子查询及关联子查询

    子查询:将用来定义视图的SELECT语句直接用于FROM子句中。

    SELECT <列名1>, <列名2>,FROM (<SELECT语句>) AS <视图名称>;
    /*
    内层的SELECT语句会先执行;
    Oracle的FROM子句中不能使用AS,直接删除即可;
    */
    

    上述代码等价于:

    CREATE VIEW 视图名称(<视图列名1>, <视图列名2>,)
    AS
    <SELECT语句>
    

    标量子查询

    返回单一值的子查询是标量子查询,即必须且只能返回1行1列的结果。能够使用常数或列名的地方,无论是SELECT子句、GROUP BY子句、HAVING子句,还是ORDER BY子句,几乎所有的地方都能使用(SELECT标量子查询)。

    例:在SELECT子句中使用标量子查询

    SELECT product_id, 
           product_name, 
           sale_price,
           (SELECT AVG(sale_price)
            FROM Product) AS avg_price
           -- 标量子查询
    FROM Product; 
    

    标量子查询不能返回多行结果:

    SELECT product_id, 
           product_name, 
           sale_price,
           (SELECT AVG(sale_price)
           	FROM Product
           	GROUP BY product_type) AS avg_price
           -- 该子查询返回了多行结果,产生错误
    FROM Product; 
    

    关联子查询

    在细分的组内进行比较时,需要使用关联子查询。

    例:关联子查询

    SELECT <列名1>, <列名2>,FROM <表名> AS <别名1>
    WHERE <列名2> > (SELECT <表达式>
                     FROM <表名> AS <别名2>
                     WHERE <别名1>.<列名1> = <别名2>.<列名1>);
                     -- 关联子查询可对集合根据<列名1>进行切分
    
    SELECT product_id, 
           product_name, 
           sale_price,
           (SELECT AVG(sale_price)
           	FROM Product AS P2
           	WHERE P1.product_type = P2.product_type
           	GROUP BY P1.product_type) AS avg_sale_price
           -- 该关联子查询可当作加了条件的标量子查询
    FROM Product AS P1;
    

    关联子查询中别名的作用范围为子查询内部。

    参考资料

    《SQL基础教程》(第2版)[日] MICK著;孙淼,罗勇译

    展开全文
  • 文章目录两者的各种叫法相关子查询MySQL解释相关子查询Wikipedia解释相关...相关子查询是一个子查询中引用了某张表且这张表也在子查询外部被使用到。比如: SELECT * FROM t1 WHERE column1 IN ( SELECT column1 FROM

    两者的各种叫法

    • 相关子查询叫做:Correlated Subqueries
    • 非相关子查询也叫普通子查询或嵌套子查询:Nested SubQueries

    相关子查询MySQL解释

    相关子查询是一个子查询中引用了某张表且这张表也在子查询外部被使用到。比如:

    SELECT * FROM t1
    WHERE column1 IN (
        SELECT column1 FROM t2
        WHERE t2.column2 = t1.column2);
    

    请注意子查询有一个t1表column2的引用,尽管子查询的from语句中没有涉及t1表,这时mysql执行子查询却发现t1表在外部查询中。

    假设表t1有一行数据(column1=5,column2=6),与此同时表t2有一行数据(column1=5,column2=7)。

    如果是简单的子查询:

    ... WHERE column1 = ANY (SELECT column1 FROM t2)
    

    结果将会是true,有数据返回。但是在这个例子中,where子句中的子查询会返回false,查不到任何数据,因为两张表的column2不匹配。

    相关子查询普通子查询(也叫非相关子查询)的差别就在于这子查询中是否有对外部查询中涉及到的表的引用。

    规则范围: MySQL从内到外执行执行。比如:

    SELECT column1 FROM t1 AS x
      WHERE x.column1 = (SELECT column1 FROM t2 AS x
        WHERE x.column1 = (SELECT column1 FROM t3
          WHERE x.column2 = t3.column1));
    

    在这条语句中,x.column2一定是表t2的列,因为查询SELECT column1 FROM t2 AS x ...别名是x,它不是表t1的列是因为SELECT column1 FROM t1 ...是一个外部查询。它俩中间还隔着一对圆括号。

    相关子查询Wikipedia解释

    相关子查询是使用外部查询中的值的子查询(嵌套在另一个查询中的查询)。因为子查询需为外部查询返回的每一行执行一次,所以它可能会很慢。

    SELECT employee_number, name
       FROM employees emp
       WHERE salary > (
         SELECT AVG(salary)
           FROM employees
           WHERE department = emp.department);
    

    在上面的查询中,外部查询为:

    SELECT employee_number, name
       FROM employees emp
       WHERE salary > ...
    

    内部查询(相关子查询)为:

    SELECT AVG(salary)
       FROM employees
       WHERE department = emp.department
    

    在上面的嵌套查询中,须为每个员工重新执行内部查询。

    相关子查询执行步骤拆解

    看完官方和Wiki的解释,对相关子查询的描述基本一样,用自己的话说就是:

    相关子查询被用来做逐行的处理,子查询会为外部查询出来的每一行执行内部SQL。(外部语句也可为update或delete语句)

    可拆分成下面三个步骤:

    • 外部查询拿到所有行
    • 内部查询使用外部查询出来的每一行来执行自己逻辑
    • 内部查询有结果返回则当前外部行被保留最终返回否则继续执行下一行

    相关子查询和嵌套查询的区别

    • 执行顺序:相关子查询是由外部查询驱动内部查询。 而正常的嵌套查询中,内部查询首先被立即执行,返回的值被外部查询使用并执行外部查询。
    • 依赖性:相关子查询内部查询依赖于外部查询进行处理,而在嵌套查询中外部查询依赖于内部查询。
    • 性能:使用相关子查询会使性能降低,因为它执行的次数远远大于嵌套查询的次数

    参考资料

    展开全文
  • sql语句的子查询

    千次阅读 2021-01-28 10:19:03
    概念:什么子查询子查询就是将一个查询语句嵌套另一个查询语句中,内层语句的查询结果,可以作为外层查询语句的条件。 使用条件:引发子查询的情况 1、使用【not】in 的子查询 2、使用比较运算符的子查询...
  • SQL——子查询

    万次阅读 多人点赞 2020-08-12 08:05:23
    可以嵌套另一个查询,即一个SELECT查询内在嵌入另一个SELECT查询 ,外层的SELECT语句较外部查询,内层的SELECT语句叫子查询子查询可以嵌套多层,但每层需要用“()”括起来,子查询可以用SELECT语句中,还...
  • SQL子查询优化

    千次阅读 2018-07-26 23:26:36
    此研究下SQL子查询的相关知识 ~ 以下内容主要参考《数据库查询优化器的艺术》一书 一、子查询介绍 概念:当一个查询是另一个查询的子部分时,称之为子查询(查询语句中嵌套有查询语句)。 子查询出现的位置...
  • SQL语句(五)子查询

    千次阅读 2021-08-03 10:16:54
    文章目录一、子查询含义二、子查询分类按子查询...出现其他语句中的select语句,称为子查询或内查询。 二、子查询分类 按子查询的位置分 位置 支持的查询 SELECT后面 支持标量子查询 FROM后面 支持表子查询
  • sql子查询超级慢-子查询酿的祸

    千次阅读 2019-04-17 10:45:10
    今天碰到一个问题,就是子查询导致查询效率特别低,到了31秒了。特此先记录一下,后期修改。 前提条件:sz_jsxxb这个表是教师表,大约有5万多条数据 select sys_guid(), (select count(zgh)as nanrs from...
  • 子查询sql怎么写

    千次阅读 2020-12-17 14:42:45
    子查询就是嵌套主查询中的查询。 子查询可以嵌套主查询中所有位置,包括SELECT、FROM、WHERE、ORDER BY。但并不是每个位置嵌套子查询都是有意义并实用的。 子查询必须“自身就是一个完整的查询”。即,它必须...
  • sql子查询不仅仅可以出现from 后面作为表结构,譬如: select t1.company_id,t1.company_name,t1.department_id,t2.department_name from company t1, (select * from department where department_name like '%...
  • sql 查询插入SQL INSERT Query also referred as SQL INSERT INTO is the command used for inserting data into database. SQL INSERT statement allows insertion of data into one table at a time. SQL INSERT...
  • SQL 子查询

    万次阅读 2018-04-21 14:52:19
     SQL还允许创建子查询(subquery),即嵌套其他查询中的查询。为什么要这样做呢?理解这个概念的最好方法是考察几个例子。利用子查询进行过滤 订单存储两个表中。每个订单包含订单编号、客户ID、订单日期,...
  • SQL教程——子查询

    万次阅读 2020-11-30 15:30:19
    摘要:本文主要介绍SQL子查询 目录 目录: 一、where或having后面 1、标量子查询 2、列子查询 3、行子查询 二、select后面 三、from后面 四、exists后面(相关子查询子查询 含义: 出现其它语句...
  • SQL中的子查询的使用

    万次阅读 多人点赞 2018-06-11 13:05:46
    什么子查询? 把一个查询的结果另一个查询中使用就叫做子查询 初始数据 有五个表:学生表,老师表,课程表,学院表,课程成绩表。 表结构 初始数据 学生表 老师表 课程表 学院表 课程...
  • SQL查询,子查询作为结果字段

    万次阅读 2019-08-23 10:30:16
    SQL查询,子查询作为结果字段, SELECT DISTINCT sp.comcode, sp.projectname, sp.projecttime, sp.busnature, sp.bustype, sl.concode, sl.conname, sl.contype, sl.conpartya, sl.contotal, sl....
  • 理解SQL Server的子查询

    千次阅读 2018-10-09 15:11:32
    子查询是一个嵌套select、insert、update或delete语句或其他子查询中的查询。任何允许使用表达式的地方都可以使用子查询。 1.1语法规则: 子查询的select查询总使用圆括号括起来 不能包括compute或for browse...
  • 如果一个select语句能够返回单个值或者一列值,且该select语句嵌套另一个SQL语句(例如select语句、insert语句、update语句或者delete语句)中,那么该select语句成为“子查询”(也叫内层查询),包含子查询SQL...
  • 第八关:子查询及联合查询
  • 执行顺序:先子查询然后在是主查询。 子查询的结果不会被显示,会将其传递给外部查,作为外部查询的条件来输出 例子:查询所有价格高于平均价格的商品信息。 mysql> select * from product where price > (select ...
  • SQL子查询中SOME、ANY、ALL关键字

    千次阅读 2019-09-20 22:41:12
    SQL中带SOME、ANY、ALL的子查询 准备两个表: –T1(2,3) –T2(1,2,3,4) 测试 “>ALL” : 父查询中的结果集大于子查询中每一个值(大于子查询结果集中的最大值),则为真; select * from T2 where n > ALL...
  • SQL --子查询与临时表

    万次阅读 2019-04-18 09:22:00
    子查询 --使用子查询提升count distinct的效率 数据库:38_6543 db_hyrhk --1.count distinct很有用,但太慢 ----Count distinct是SQL分析时的祸根所以拿它来做个例子 ----首先,让我们以我们一直使用的一个简单...
  • SQL语句基础-子查询

    万次阅读 多人点赞 2019-06-26 17:24:26
    如果一个select语句嵌套一个select,insert,update或delete语句中,则称之为子查询或者内存查询。包含子查询的语句则称为主查询或者外层查询 子查询语句一般出现where和having子句中 写where中的子句中的...
  • SQL子查询、相关子查询

    千次阅读 2018-10-21 17:52:35
    1、使用子查询时尽量把子查询分解为多行并且适当进行缩进,能极大的简化子查询的使用。 2、不能嵌套太多的子查询,这样会降低性能。 3、WHERE子句中使用子查询,应该保证SELECT语句具有与WHERE子句中相同数目...
  • SQL server 查询语句

    万次阅读 热门讨论 2021-07-01 21:44:52
    select * from test.dbo.users -- 普通条件查询 where id=1; 模糊查询 select * from test.dbo.users where username like '%li%'; 范围查询 select * from test.dbo.users -- id1~3之间的数据 where id...
  • SQL like子查询

    千次阅读 2017-05-14 16:07:10
    like子查询 字符匹配: % (百分号)任意字长度(可以为0)的字符 _(下横线)代表任意单个字符 eg:a%b表示以a开头,以b结尾的任意长度的字符。 三个常用的字符串截取函数: substr(column,1,n) left...
  • SQL相关子查询与非相关子查询

    万次阅读 多人点赞 2018-07-05 10:31:04
    SQL子查询可以分为相关子查询和非相关子查询两类。 假设Books表如下: 类编号 图书名 出版社 价格 2 c#高级应用 圣通出版 23.00 2 Jsp开发应用 机械出版社...
  • sql中group by 应用在子查询的情况

    万次阅读 2019-05-21 14:17:07
    查询出来的id 是51条数据,但是在子查询里面却是全量526 select count(*) from user_role where id in  (select id from user_role where app_source='xxx' group by user_id)  and app_source='xxx'; ...
  • SQL——相关子查询和不相关子查询

    千次阅读 2019-11-03 18:24:41
    在SQL中经常使用“FROM/WHERE”字句中包含一个形如“SELECT-FROM-WHERE”的查询块,这样的查询块称为子查询或嵌套查询,包含子查询的语句称为父查询或外部查询。 子查询分为相关子查询和不相关子查询 接下来将举例...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397,363
精华内容 158,945
关键字:

在sql子查询是什么