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

子查询html

子查询是另外一个语句中的 SELECT 语句。mysql

MySQL 支持 SQL 标准要求的全部子查询形式和操做,以及一些 MySQL 特有的功能。sql

下面是子查询的示例:ide

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

在本例中,SELECT * FROM t1 ... 是外部查询(或外部语句),(SELECT column1 FROM t2) 是子查询。咱们说子查询嵌套在外部查询中,事实上,能够在其余子查询中嵌套子查询,进行多层嵌套。子查询必须始终出如今括号内。函数

子查询的主要优势是:code

● 容许结构化查询,这样就能够隔离语句的每一个部分。htm

● 提供了执行操做的替代方法,不然将须要复杂的链接和联合。索引

● 许多人以为子查询比复杂的链接或联合更易读。事实上,正是子查询的创新让人们称早期 SQL 为 “结构化查询语言”get

下面是一个示例语句,它显示了 SQL 标准指定的、MySQL支持的子查询语法的要点:it

1. DELETE FROM t1
2. WHERE s11 > ANY
3.  (SELECT COUNT(*) /* no hint */ FROM t2
4.   WHERE NOT EXISTS
5.    (SELECT * FROM t3
6.     WHERE ROW(5*t2.s1,77)=
7.      (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
8.       (SELECT * FROM t5) AS t5)));

子查询能够返回标量(单个值)、单行、单列或表(一列或多列的一行或多行)。这些分别被称为标量、列、行和表子查询。返回特定类型结果的子查询一般只能在特定的上下文中使用,以下节所述。

对可使用子查询的语句类型几乎没有限制。子查询能够包含常规 SELECT 语句能够包含的许多关键字或子句:DISTINCT、GROUP BY、ORDER BY、LIMIT、联接、索引提示、UNION 结果、注释、函数等。

从 MySQL 8.0.19 开始,能够在子查询中使用 TABLE 和 VALUES 语句。使用 VALUES 的子查询一般是子查询的啰嗦写法,可使用集合表示法或 SELECT 或 TABLE 语法更紧凑地重写这些子查询;假设表 ts 是使用 CREATE TABLE ts VALUES ROW(2), ROW(4), ROW(6) 语句建立的,下面显示的语句都是等效的:

1. SELECT * FROM tt
2.     WHERE b > ANY (VALUES ROW(2), ROW(4), ROW(6));
3. 
4. SELECT * FROM tt
5.     WHERE b > ANY (2, 4, 6);
6. 
7. SELECT * FROM tt
8.     WHERE b > ANY (SELECT * FROM ts);
9. 
10. SELECT * FROM tt
11.     WHERE b > ANY (TABLE ts);

TABLE 子查询的示例将在后面介绍。

子查询的外部语句能够是:SELECT、INSERT、UPDATE、DELETE、SET 或 DO。

官方网址:
https://dev.mysql.com/doc/refman/8.0/en/subqueries.html

相关文章
相关标签/搜索