文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  將子查詢作為純量運算元

15.2.15.1 將子查詢作為純量運算元

最簡單的形式中,子查詢是回傳單一值的純量子查詢。純量子查詢是一個簡單的運算元,您幾乎可以在任何單一欄位值或常值合法的的地方使用它,並且您可以期望它具有所有運算元都具有的特性:資料類型、長度、它可以是 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,即使 s2NOT 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 可以獲得相同的結果。