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

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

数据库杂货铺 2021-04-12
470
子查询作为标量操作数
 
在最简单的形式中,子查询是返回单个值的标量子查询。标量子查询是一个简单的操作数,几乎可以在单个列值或文本合法的任何地方使用它,并且可以期望它具有所有操作数都具有的特性:数据类型、长度、可以指定为 NULL 等等。例如:
 
    CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL);
    INSERT INTO t1 VALUES(100, 'abcde');
    SELECT (SELECT s2 FROM t1);
     
    此 SELECT 中的子查询返回单个值 ('abcde'),该值的数据类型为 CHAR,长度为5,字符集和排序规则使用创建表时有效的默认值,并指示列中的值可以为 NULL。标量子查询的值是否可以是空并非继承自所选择的值,因为如果子查询结果为空,则结果为 NULL。对于刚刚显示的子查询,如果 t1 为空,则结果将为 NULL,即使 s2 NOT NULL
     
    在一些上下文中不能使用标量子查询。如果语句只允许字面量,则不能使用子查询。例如,LIMIT 需要字面量整型参数,而 LOAD DATA 需要字面量字符串文件名。不能使用子查询来提供这些值。
     
    当在下面的部分中看到包含相当简单的结构 (SELECT column1 FROM t1) 的示例时,想象一下自己的代码包含了更加多样化和复杂的结构。
     
    假设我们创建了两个表:
     
      CREATE TABLE t1 (s1 INT);
      INSERT INTO t1 VALUES (1);
      CREATE TABLE t2 (s1 INT);
      INSERT INTO t2 VALUES (2);
       
      然后执行 SELECT 语句:
       
        SELECT (SELECT s1 FROM t2) FROM t1;
         
        结果是2,因为 t2 中有一行包含值为 2 的列 s1
         
        在 MySQL 8.0.19 及更高版本中,前面的查询也可以这样写,使用 TABLE
         
          SELECT (TABLE t2) FROM t1;
           
          标量子查询可以是表达式的一部分,即使子查询是为函数提供参数的操作数,也请记住使用括号。例如:
           
            SELECT UPPER((SELECT s1 FROM t1)) FROM t2;
             
            在 MySQL 8.0.19 和更高版本中,使用 SELECT UPPER((TABLE t1)) FROM t2 语句可以得到相同的结果。
             
             
             
            官方网址:
            https://dev.mysql.com/doc/refman/8.0/en/scalar-subqueries.html

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

            评论