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

相關文章
相關標籤/搜索