1. 程式人生 > >不從實體表中取的資料

不從實體表中取的資料

有的時候我們需要查詢一些不能從任何實體表中能夠取得的資料,比如將數字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