MySQL的SQL語句 - 數據操做語句(13)- 子查詢(2)

子查詢做爲標量操做數html

在最簡單的形式中,子查詢是返回單個值的標量子查詢。標量子查詢是一個簡單的操做數,幾乎能夠在單個列值或文本合法的任何地方使用它,而且能夠指望它具備全部操做數都具備的特性:數據類型、長度、能夠指定爲 NULL 等等。例如:mysql

1. CREATE TABLE t1 (s1 INT, s2 CHAR(5) NOT NULL);
2. INSERT INTO t1 VALUES(100, 'abcde');
3. SELECT (SELECT s2 FROM t1);

此 SELECT 中的子查詢返回單個值 ('abcde'),該值的數據類型爲 CHAR,長度爲5,字符集和排序規則使用建立表時有效的默認值,並指示列中的值能夠爲 NULL。標量子查詢的值是否能夠是空並不是繼承自所選擇的值,由於若是子查詢結果爲空,則結果爲 NULL。對於剛剛顯示的子查詢,若是 t1 爲空,則結果將爲 NULL,即便 s2 是 NOT NULL。sql

在一些上下文中不能使用標量子查詢。若是語句只容許字面量,則不能使用子查詢。例如,LIMIT 須要字面量整型參數,而 LOAD DATA 須要字面量字符串文件名。不能使用子查詢來提供這些值。ide

當在下面的部分中看到包含至關簡單的結構 (SELECT column1 FROM t1) 的示例時,想象一下本身的代碼包含了更加多樣化和複雜的結構。函數

假設咱們建立了兩個表:scala

1. CREATE TABLE t1 (s1 INT);
2. INSERT INTO t1 VALUES (1);
3. CREATE TABLE t2 (s1 INT);
4. INSERT INTO t2 VALUES (2);

而後執行 SELECT 語句:code

1. SELECT (SELECT s1 FROM t2) FROM t1;

結果是2,由於 t2 中有一行包含值爲 2 的列 s1。htm

在 MySQL 8.0.19 及更高版本中,前面的查詢也能夠這樣寫,使用 TABLE:排序

1. SELECT (TABLE t2) FROM t1;

標量子查詢能夠是表達式的一部分,即便子查詢是爲函數提供參數的操做數,也請記住使用括號。例如:繼承

1. 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

相關文章
相關標籤/搜索