隨筆-71  評論-5  文章-0  trackbacks-0
              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語句后面






                  

          1. _(單個通配符)
            SELECT * FROM T_ Employee WHERE FName LIKE '_erry'

            以任意字符開頭,剩余部分為“erry"

          2. 要檢索長度為4、第3個字符為“n ",其他字符為任意字符
            SELECT * FROM T_ Employee WHERE FName LIKE,'__n_'
          3. %(多字通配符)
            SELECT * FROM T_ Employee WHERE FName LIKE’T%’

            以“T”開頭,長度任意。

          4. 姓名中包含字母"n”的員工信息
            SELECT * FROM T_ Employee WHERE FName LIKE’%n%’
          5. 單字符匹配和多字符匹配還可以一起使用。

            SELECT * FROM T_ Employee WHERE FName LIKE’%n_'

            上面表示:最后一個字符為任意字符、倒數第_個字符為“n " ,長度任意的字符串。

          6. 集合匹配[](表示匹配集合中的任意一個)(只有MSSQLServer支持)
            SELECT * FROM T_Employee WHERE FName LIKE '[SJ]%'

            上面代表:以“S”或者“J“開頭長度,長度任意

          7. 否定符"^"(用來對集合取反)(只有MSSQLServer支持)
            SELECT * FROM T_Employee WHERE FName LIKE '[^SJ]%'




          posted on 2014-10-29 14:28 藤本薔薇 閱讀(3248) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 巴彦县| 册亨县| 石首市| 色达县| 介休市| 莱州市| 南川市| 遵义县| 泸州市| 中山市| 尼玛县| 孟津县| 天柱县| 盘锦市| 邢台市| 镇安县| 当涂县| 白河县| 盘山县| 常宁市| 堆龙德庆县| 叶城县| 章丘市| 体育| 上思县| 娱乐| 东阿县| 合阳县| 伊宁县| 拜泉县| 泰顺县| 兴山县| 沂南县| 彭山县| 聂荣县| 灵山县| 会昌县| 东海县| 正镶白旗| 叶城县| 宾川县|