13.2.8.1.子查詢作為標量操作數
13.2.8.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。如果在本例中使用的表為空表,則子查詢的值應為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中有一行包含s1,s1有一個值為2。
一個標量子查詢可以為一個表達式的一部分。不要忘記圓括號。即使是子查詢是一個為函數提供自變量的操作數時,也不要忘記圓括號。舉例說明:
SELECT UPPER((SELECT s1 FROM t1)) FROM t2;