暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的SQL语句 - 数据操作语句(13)- 子查询(1)

数据库杂货铺 2021-04-12
243
子查询
 
子查询是另一个语句中的 SELECT 语句。
 
MySQL 支持 SQL 标准要求的所有子查询形式和操作,以及一些 MySQL 特有的功能。
 
下面是子查询的示例:
 
    SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
    复制
     
    在本例中,SELECT * FROM t1 ... 是外部查询(或外部语句),(SELECT column1 FROM t2) 是子查询。我们说子查询嵌套在外部查询中,事实上,可以在其他子查询中嵌套子查询,进行多层嵌套。子查询必须始终出现在括号内。
     
    子查询的主要优点是:
     
    ● 允许结构化查询,这样就可以隔离语句的每个部分。
     
    ● 提供了执行操作的替代方法,否则将需要复杂的连接和联合。
     
    ● 许多人觉得子查询比复杂的连接或联合更易读。事实上,正是子查询的创新让人们称早期 SQL 为 “结构化查询语言”
     
    下面是一个示例语句,它显示了 SQL 标准指定的、MySQL支持的子查询语法的要点:
     
      DELETE FROM t1
      WHERE s11 > ANY
      (SELECT COUNT(*) /* no hint */ FROM t2
      WHERE NOT EXISTS
      (SELECT * FROM t3
      WHERE ROW(5*t2.s1,77)=
      (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
      (SELECT * FROM t5) AS t5)));
      复制
       
      子查询可以返回标量(单个值)、单行、单列或表(一列或多列的一行或多行)。这些分别被称为标量、列、行和表子查询。返回特定类型结果的子查询通常只能在特定的上下文中使用,如下节所述。
       
      对可以使用子查询的语句类型几乎没有限制。子查询可以包含常规 SELECT 语句可以包含的许多关键字或子句:DISTINCTGROUP BYORDER BYLIMIT、联接、索引提示、UNION 结果、注释、函数等。
       
      从 MySQL 8.0.19 开始,可以在子查询中使用 TABLE VALUES 语句。使用 VALUES 的子查询通常是子查询的啰嗦写法,可以使用集合表示法或 SELECT TABLE 语法更紧凑地重写这些子查询;假设表 ts 是使用 CREATE TABLE ts VALUES ROW(2), ROW(4), ROW(6) 语句创建的,下面显示的语句都是等效的:
       
        SELECT * FROM tt
        WHERE b > ANY (VALUES ROW(2), ROW(4), ROW(6));


        SELECT * FROM tt
        WHERE b > ANY (2, 4, 6);


        SELECT * FROM tt
        WHERE b > ANY (SELECT * FROM ts);


        SELECT * FROM tt
        WHERE b > ANY (TABLE ts);
        复制
         
        TABLE 子查询的示例将在后面介绍。
         
        子查询的外部语句可以是:SELECT、INSERTUPDATEDELETESET DO
         
         
         
         
        官方网址:
        https://dev.mysql.com/doc/refman/8.0/en/subqueries.html
         

        文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论