不從實體表中取的資料
阿新 • • 發佈:2018-11-08
有的時候我們需要查詢一些不能從任何實體表中能夠取得的資料,比如將數字1作為結果集或者計算字串“abc”的長度。
有的開發人員嘗試使用下面的SQL來完成類似的功能:
SELECT 1 FROM T_Employee
可是執行以後卻得到了下面的執行結果集
1
1
1
1
1
1
1
1
1
結果集中出現了不止一個1,這時因為通過這種方式得到的結果集數量是取決於T_Employee表中的資料條目數的,必須要藉助於DISTINCT關鍵字來將結果集條數限定為一條,SQL語句如下:
SELECT DISTINCT 1 FROM T_Employee
執行完畢我們就能在輸出結果中看到下面的執行結果:
1
就能在輸出結果中看到下面的執行結果:
1
還可以在不帶FROM子句的SELECT語句中使用函式,比如下面的SQL將字串“abc”
的長度作為結果集:
MYSQL:
SELECT LENGTH("abc")
MSSQLServer:
SELECT LEN("abc")
執行完畢我們就能在輸出結果中看到下面的執行結果:
3
還可以在SELECT語句中同時計算多個表示式,比如下面的SQL語句將1、2、3、’a’、’b’、’c’作為結果集:
SELECT 1,2,3,"a","b","c"
執行完畢我們就能在輸出結果中看到下面的執行結果:
1 2 3 a b c
在Oracle中是不允許使用這種不帶FROM子句的SELECT語句,不過我們可以使用Oracle的系統表來作為FROM子句中的表名,系統表是Oracle內建的特殊表,最常用的系統表為DUAL。比如下面的SQL將1以及字串"abc"的長度作為結果集:
SELECT 1, LENGTH("abc") FROM DUAL
執行完畢我們就能在輸出結果中看到下面的執行結果:
1 LENGTH(ABC)
1 3
在DB2中也同樣不支援不帶FROM子句的SELECT語句,它也是採用和Oracle類似的系統表,最常用的系統表為SYSIBM.SYSDUMMY1。比如下面的SQL將1以及字串"abc"的長度作為結果集:
SELECT 1, LENGTH("abc") FROM SYSIBM.SYSDUMMY1
執行完畢我們就能在輸出結果中看到下面的執行結果:
1 2
1 3