ROW_NUMBER()幫助更好的限制結果集行數的功能)
(ROW_NUMBER()函數可以計算每一行數據在結果集中的行號(從1開始計數))
select ROW_NUMBER() OVER(order by FSalary),FNumber,FName,FSalary,FAge from T_Employee
開窗函數只能出現在 SELECT 或 ORDER BY 子句中::也就是說ROW_NUMBER()不能用在WHERE語句中.
select * from (select row_number()over(order by fsalary desc)as rownum,fname,fname,fsalary,fage from t_employee) as a where a.rownum>=3 and a.rownum<=5
MSSQLServer 2000(提 供 了 TOP 關 鍵 字 用來 返回 結 果 集 中的 前 N條 記錄)
select top 5 * from T_Employee order by FSalary Desc 表示:按照工資降序排列的前五條記錄
檢索工資水平排在前五位(按照工資從高到低)的員工信息.
SELECT top 3 * FROM T_Employee WHERE FNumber NOT IN(SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC)ORDER BY FSalary DESC
Oracle(Oracle中支持窗口函數ROW_NUMBER(),其用法和MSSQLServer2005中相同),不過oracle提供了更方便的特性,用來計算行號
oracle為每個結果集都默認增加了一個默認的表示行號的列,這個列的名稱為rownum(從1開始計數)
SELECT * FROM T_Employee WHERE rownum<=6 ORDER BY FSalary Desc
當進行檢索的時候,對于第一條數據,其rownum為1,因為符合“WHERE rownum<=6”所以被放到了檢索結果中;當檢索到第二條數據的時候,其rownum為2,因為符合“WHERE rownum<=6”所以被放到了檢索結果中……依次類推,直到第七行。
---這是錯誤的代碼
SELECT rownum,FNumber,FName,FSalary,FAge FROM T_Employee WHERE rownum BETWEEN 3 AND 5 ORDER BY FSalary DESC 當進行檢索的時候,對于第一條數據,其rownum為1,因為不符合“WHERE rownumBETWEEN 3 AND 5”,所以沒有被放到了檢索結果中;當檢索到第二條數據的時候,因為第
一條數據沒有放到結果集中,所以第二條數據的rownum仍然為1,而不是我們想像的2,所以因為不符合“WHERE rownum<=6”,沒有被放到了檢索結果中;當檢索到第三條數據的時候,
因為第一、二條數據沒有放到結果集中,所以第三條數據的rownum仍然為1,而不是我們想像的3,所以因為不符合“WHERE rownum<=6”,沒有被放到了檢索結果中……
DB2也支持row_number(),語法跟mssql和oracle一樣,還提供了fetch關鍵字用來提取前N行..語法為:fetch first 條數 rows only
select * from t_employee order by fsalary desc fetch first 6 rows only --必須注意:fetch字句要放在order by語句后面
- _(單個通配符)

SELECT * FROM T_ Employee WHERE FName LIKE '_erry'
以任意字符開頭,剩余部分為“erry"
- 要檢索長度為4、第3個字符為“n ",其他字符為任意字符

SELECT * FROM T_ Employee WHERE FName LIKE,'__n_'
- %(多字通配符)

SELECT * FROM T_ Employee WHERE FName LIKE’T%’
以“T”開頭,長度任意。
- 姓名中包含字母"n”的員工信息

SELECT * FROM T_ Employee WHERE FName LIKE’%n%’
單字符匹配和多字符匹配還可以一起使用。

SELECT * FROM T_ Employee WHERE FName LIKE’%n_'
上面表示:最后一個字符為任意字符、倒數第_個字符為“n " ,長度任意的字符串。
- 集合匹配[](表示匹配集合中的任意一個)(只有MSSQLServer支持)

SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'
上面代表:以“S”或者“J“開頭長度,長度任意
- 否定符"^"(用來對集合取反)(只有MSSQLServer支持)

SELECT * FROM T_Employee WHERE FName LIKE '[^SJ]%'
posted on 2014-10-29 14:28
藤本薔薇 閱讀(3248)
評論(0) 編輯 收藏