MySQL 8.4 版本說明
在其最簡單的形式中,子查詢是一個返回單一值的純量子查詢。純量子查詢是一個簡單的運算元,您幾乎可以在任何單一欄位值或常值合法的地方使用它,並且您可以預期它具有所有運算元都具有的特性:資料類型、長度、它可以是 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,字元集和校對與 CREATE TABLE 時生效的預設值相等,並且指示該欄位中的值可以是 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。
前面的查詢也可以這樣寫,使用 TABLE
SELECT (TABLE t2) FROM t1;純量子查詢可以是運算式的一部分,但請記住括號,即使子查詢是一個為函式提供引數的運算元。例如:
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;可以使用 SELECT UPPER((TABLE t1)) FROM t2 獲得相同的結果。