子查詢做爲標量操做數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