1. 程式人生 > >用標準的SQL語句實現查詢記錄分頁

用標準的SQL語句實現查詢記錄分頁

在絕大多數的應用中,返回大量的符合條件的記錄是司空見慣的,最典型的莫過於搜尋了。在搜尋的應用中,使用者給出搜尋條件,伺服器查出符合條件的記錄。但往往搜尋會返回大量的資料記錄,如果在網頁中,往往是通過分頁的方式來實現,頁面提供諸如上一頁,下一頁等等按鈕來實現分頁。
現在主要有以下幾中方式來實現分頁:
1.EJB的Find方法
2.在顯示第一頁前將所有的記錄放在collection物件中,後續的各頁都在記憶體中取。
3.每一頁都到資料庫作一次重複的查詢,然後將符合條件的記錄顯示出來。
4.儲存前幾頁的搜尋結果在記憶體中(經常使用到的),後續的記錄(這些資料是多數使用者都沒有耐心看的)再通過連資料庫取得。
5.其他各種cache機制。

我們可以根據實際情況來選擇適合自己的方法,我給大家介紹一個通過標準的SQL語句來得到符合條件的資料。如從第10到20條的符合條件(where語句中的)的記錄。通過這種方法取得記錄有一個必要條件,必須有一個能夠標識記錄順序的欄位,如id,time等等。下面我為大家演示一個例子:
查詢t_table表中所有記錄第10到20條,按id排序。
SQL語句為:
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id ) >= 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id ) < 20

又如查詢t_table表中key='123'第10到20條的記錄,按id排序。
SELECT * FROM t_table t1 WHERE (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id AND t2.key = '123') >= 10 AND (SELECT count(*) FROM t_table t2 WHERE t2.id < t1.id AND t2.key = '123') < 20 AND t1.key = '123'

當然條件中的id可以換為任何能表識記錄順序的欄位。

相關推薦

標準SQL語句實現查詢記錄

在絕大多數的應用中,返回大量的符合條件的記錄是司空見慣的,最典型的莫過於搜尋了。在搜尋的應用中,使用者給出搜尋條件,伺服器查出符合條件的記錄。但往往搜尋會返回大量的資料記錄,如果在網頁中,往往是通過分頁的方式來實現,頁面提供諸如上一頁,下一頁等等按鈕來實現分頁。現在主要有以下

怎樣SQL語句實現查詢一列中的第N大值?

答:select * from (select * from 表 order by 列名 Desc) where Rownum <= N Minus select * from (select

ORACLE查詢SQL語句(最有效的)

** 一、效率高的寫法 ** 1.無ORDER BY排序的寫法。(效率最高) (經過測試,此方法成本最低,只巢狀一層,速度最快!即使查詢的資料量再大,也幾乎不受影響,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.*

一條SQL語句實現查詢成績-60、60~80、+80的人數的方法

總結一下學到的一個SQL方法。下面我建立一個數據表: SELECT * FROM students; 可以看到資料表中存在六條資料,如果使用傳統的查詢方法,我們需要三條SQL語句,分別是: select count(*) from students where score<6

sql語句實現查詢,今天,昨天,近7天,近30天,當月,上個月資料

幾個小時內的資料 DATE_SUB(NOW(), INTERVAL 5 HOUR) 今天 select * from 表名 where to_days(時間欄位名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS(

sql語句實現查詢

    說明:此內容銜接上一次的內容,所有的語句是屬於sqlite,並且都經過除錯,結果都是正確的;     十八、資料的插入     建立一個actor_name表,將actor表中的所有first_name以及last_name匯入改表。 actor_name表結構如下

sql語句實現查詢例項

    說明:本文章銜接上一篇      十三、min()函式與max()函式  查詢員工編號emp_now為10001其自入職以來的薪水salary漲幅值growthCREATE TABLE `sa

Java開發中,通過sql實現過濾以及

  我們通過一個需求來引入問題。 首先,簡單介紹一下需求:實現一個下圖的頁面,包含了過濾以及分頁。資料是後臺資料庫獲得到的。 那麼關於如何實現過濾以及分頁,考慮到通過前臺實現或者後臺實現,我們不妨來分析一下兩種方法。 首先,前臺實現:無非就是後臺獲取所有的list,傳

Bootstrap-table實現查詢、匯出、引數設定及前後端程式碼示例詳解

$(function(){ initTable(); }); function initTable() { //先銷燬表格 $("#bootstrapTable").bootstrapTable({ //表格高度 height: getHeight

Laravel中執行原生SQL語句,使用paginate

1、執行原生sqlpublic function getList($data){ //獲取前端傳過來的引數 $user = $data['userId']; $office = $data['officeId']; $key = $data['oneK

Sqlserver的SQL語句實現查詢

sql rownum 自增變量 not 數據表 進行 字段 ref 寫法 在應用程序的開發中,如果數據庫中的數據量過於的龐大,則需要針對查詢數據做分頁處理,取出對應分頁中的數據,在Sqlserver分頁的語句寫法中,有兩種比較常用,一種是數據表中含有自增量Id的情況,可以根

在SqlServer中通過SQL語句實現樹狀查詢

clas all bold join where procedure ner log class 1 CREATE PROCEDURE [dbo].[GetTree] 2 @Id int 3 AS 4 BEGIN 5 with cte as

spring-data-jpa動態拼接sql語句實現動態的多表條件查詢

** spring-data-jpa 動態拼接sql語句 ** spring-data-jpa對於簡單的資料操作確實使用起來比較方便,但是對於一些比較複雜的動態的多表條件查詢就不是那麼簡單了,對於需要些sql語句並且需要動態的新增條件的時候就得使用jpa的EntityManager來

SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。

資料庫中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。 方法一: select (case when a>b then a else b end ),(case when b>c then b esle c end) f

plsql developer如何查詢SQL語句執行歷史記錄

相信很多在plsql developer除錯oracle的朋友,經常會遇到在plsql developer執行的某一條SQL語句沒有儲存,那麼我們在plsql developer下如何找到我們執行過的SQL語句呢,其實通過下列方法很容易實現。 首先開啟plsql dev

SQL語句刪除重複記錄的四種好方法

DECLARE @a int SET @a = 1 DECLARE @t TABLE( id int IDENTITY, a int, b int) DECLARE @dt datetime, @loop int, @id int SET @lo

mybatis 動態sql語句實現多條件查詢(foreach的使用)

一、前言 現有一個需求:實現多條件、不確定條件的搜尋功能。 類似於淘寶網進行搜尋商品的時候,可以在搜尋框進行模糊搜尋,同時可以進行條件篩選,例如想買一隻 口紅? 的時候,可以在搜尋框內輸入“口紅”,還可以選擇品牌、是否包郵、價格區間等等。。最後搜尋出來的結果是滿足所有篩選的

sql語句分組查詢排序後取出前n條記錄

1.sql語句分組排序後取出前n條記錄 (SELECT * FROM ( SELECT "row_number" () OVER ( PARTITION BY mmsi ORDER BY orginal_in_draught DESC ) A

基於Metronic的Bootstrap開發框架經驗總結(16)-- 使用外掛bootstrap-table實現表格記錄查詢、排序等處理

在業務系統開發中,對錶格記錄的查詢、分頁、排序等處理是非常常見的,在Web開發中,可以採用很多功能強大的外掛來滿足要求,且能極大的提高開發效率,本隨筆介紹這個bootstrap-table是一款非常有名的開源表格外掛,在很多專案中廣泛的應用。Bootstrap-table外掛提供了非常豐富的屬性設定,可以實現

sqlite sql語句實現記錄存在則修改、不存在則新增

sql語句中insert只是單一插入,update只是單一更新,而replace語句則是兩者的功能合二為一,實現有則改、無則加。 用法和insert相同: replace into tablename values(v1,v2);