DB2 SQL查询结果集自动编号、返回条数范围控制研究
生活随笔
收集整理的這篇文章主要介紹了
DB2 SQL查询结果集自动编号、返回条数范围控制研究
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要: DB2 SQL語句實現查詢的記錄自動編號、并根據編號進一步實現記錄范圍控制、分頁查詢。
環境: IBM DB2 Universal V9.1 Windows XP Professional 要求:寫一個SQL語句,在查詢結果中要顯示出記錄序號,這個序號是是根據記錄順序自動生成的。 測試初始化DB2 SQL腳本: drop table t_test; create table t_test (bs??????? bigint????????? not null? not null generated by default as identity, username? varchar(20)???? not null, password? varchar(20), remark??? varchar(200) ); comment on t_test (bs is '標識', username is '用戶名', password is '密碼', remark is '備注' ); insert into t_test(username, password) values ('aaa', 'aaa'), ('bbb', 'bbb'), ('ccc', 'ccc'), ('ddd', 'ddd'), ('eee', 'eee'), ('fff', 'fff'), ('ggg', 'ggg'); 實現: 1、實現查詢記錄編號 要求:查詢bs不等于1的所有記錄。 select t.*, ROW_NUMBER() OVER() as ROW_NO ?from t_test t where t.bs <> 1 查詢結果如下: bs? username password remark??? ROW_NO? --------------------------------------- 2?? 'bbb'?? 'bbb'?? '[Null]'??? 1 3?? 'ccc'?? 'ccc'?? '[Null]'??? 2 4?? 'ddd'?? 'ddd'?? '[Null]'??? 3 5?? 'eee'?? 'eee'?? '[Null]'??? 4 6?? 'fff'?? 'fff'?? '[Null]'??? 5 7?? 'ggg'?? 'ggg'?? '[Null]'??? 6 說明:ROW_NUMBER() OVER() 是用來產生編號序列,從1開始編號,為整數。 as ROW_NO 是為編號列設定顯示名稱。 2、實現按照記錄范圍進行查詢 要求:要求查詢第2-5條記錄。 select * ? from (select t.*, ROW_NUMBER() OVER() as ROW_NO ????????? from t_test t) as w ?where ROW_NO >= 2 ?and ROW_NO <=5 查詢結果如下: bs? username password remark??? ROW_NO? --------------------------------------- 2?? 'bbb'?? 'bbb'?? '[Null]'??? 2 3?? 'ccc'?? 'ccc'?? '[Null]'??? 3 4?? 'ddd'?? 'ddd'?? '[Null]'??? 4 5?? 'eee'?? 'eee'?? '[Null]'??? 5 3、實現SQL分頁查詢 對2中的SQL進行擴展,將范圍起始編號作為變量傳遞給SQL就可以實現分頁查詢了。當然這個還需要程序的支持,掌握這個原理就很容易了,在此不做介紹。 總結: 對記錄返回控制是數據庫系統的特性,不同的數據庫系統有不同的實現。SQL直接對結果集記錄控制效率上一般是最好的。結合高級編程語言,可以實現復雜的分頁查詢。
本文轉自 leizhimin 51CTO博客,原文鏈接:http://blog.51cto.com/lavasoft/27794,如需轉載請自行聯系原作者
環境: IBM DB2 Universal V9.1 Windows XP Professional 要求:寫一個SQL語句,在查詢結果中要顯示出記錄序號,這個序號是是根據記錄順序自動生成的。 測試初始化DB2 SQL腳本: drop table t_test; create table t_test (bs??????? bigint????????? not null? not null generated by default as identity, username? varchar(20)???? not null, password? varchar(20), remark??? varchar(200) ); comment on t_test (bs is '標識', username is '用戶名', password is '密碼', remark is '備注' ); insert into t_test(username, password) values ('aaa', 'aaa'), ('bbb', 'bbb'), ('ccc', 'ccc'), ('ddd', 'ddd'), ('eee', 'eee'), ('fff', 'fff'), ('ggg', 'ggg'); 實現: 1、實現查詢記錄編號 要求:查詢bs不等于1的所有記錄。 select t.*, ROW_NUMBER() OVER() as ROW_NO ?from t_test t where t.bs <> 1 查詢結果如下: bs? username password remark??? ROW_NO? --------------------------------------- 2?? 'bbb'?? 'bbb'?? '[Null]'??? 1 3?? 'ccc'?? 'ccc'?? '[Null]'??? 2 4?? 'ddd'?? 'ddd'?? '[Null]'??? 3 5?? 'eee'?? 'eee'?? '[Null]'??? 4 6?? 'fff'?? 'fff'?? '[Null]'??? 5 7?? 'ggg'?? 'ggg'?? '[Null]'??? 6 說明:ROW_NUMBER() OVER() 是用來產生編號序列,從1開始編號,為整數。 as ROW_NO 是為編號列設定顯示名稱。 2、實現按照記錄范圍進行查詢 要求:要求查詢第2-5條記錄。 select * ? from (select t.*, ROW_NUMBER() OVER() as ROW_NO ????????? from t_test t) as w ?where ROW_NO >= 2 ?and ROW_NO <=5 查詢結果如下: bs? username password remark??? ROW_NO? --------------------------------------- 2?? 'bbb'?? 'bbb'?? '[Null]'??? 2 3?? 'ccc'?? 'ccc'?? '[Null]'??? 3 4?? 'ddd'?? 'ddd'?? '[Null]'??? 4 5?? 'eee'?? 'eee'?? '[Null]'??? 5 3、實現SQL分頁查詢 對2中的SQL進行擴展,將范圍起始編號作為變量傳遞給SQL就可以實現分頁查詢了。當然這個還需要程序的支持,掌握這個原理就很容易了,在此不做介紹。 總結: 對記錄返回控制是數據庫系統的特性,不同的數據庫系統有不同的實現。SQL直接對結果集記錄控制效率上一般是最好的。結合高級編程語言,可以實現復雜的分頁查詢。
本文轉自 leizhimin 51CTO博客,原文鏈接:http://blog.51cto.com/lavasoft/27794,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的DB2 SQL查询结果集自动编号、返回条数范围控制研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改CMD设置使其支持鼠标选择复制
- 下一篇: 写给MongoDB开发者的50条建议Ti