在查询情况下,最经常的情况就是我们需要查询几条数据,而不是全部的查询出结果,比如最为经典的情况就是在我们写一个查询结果列表的情况,我们希望结果是分页显示,也就是查询出一段记录集。
在不同的数据库当中有不同的用法,下面看看不同的数据库是如何处理的:
SQL Server
在分页查询上,我感觉SQL Server比较费劲,没有一个专门的分页的语句,靠的是一种巧妙的方法实现分页查询:
折叠复制代码
id city country age sex username
1 北京 中国 25 1 小黄
3 广州 中国 26 1 小明
4 深圳 中国 24 1 小李
5 纽约 美国 25 1 Jack
6 华盛顿 美国 23 1 Tom
7 伦敦 英国 19 0 Lela
select * from t_user
select * from (select top 2 * from (select top 6 * from t_user order by id asc ) as aaa order by id desc) as bbb order by id asc
折叠复制代码
1 北京 中国 25 1 小黄
3 广州 中国 26 1 小明
4 深圳 中国 24 1 小李
5 纽约 美国 25 1 Jack
6 华盛顿 美国 23 1 Tom
7 伦敦 英国 19 0 Lela
折叠复制代码
6 华盛顿 美国 23 1 Tom
7 伦敦 英国 19 0 Lela
上面分页查询表示的是从第(6-2)=4条数据开始到第6条数据结束这段结果集。
MySQL
MySQL有个专门针对查询出一段数据的语句limit,使用起来非常的方便。
select * from t_user limit 2,3
折叠复制代码
4 深圳 中国 24 1 小李
5 纽约 美国 25 1 Jack
6 华盛顿 美国 23 1 Tom
上面查询中的2代表从第2条数据之后开始,注意是第2条数据之后,不包含第2条数据。3代表总共查询3条记录。那么limit 2,3代表从第2条(不包含第2条) 数据开始查询出3条记录。
Oracle
Oracle中有个rownum,其含义更加明显,就是第几行的意思,这样我们就可以通过where条件来进行分段查询了。
select * from t_user where rownum>=2 and rownum<=4
注意:oracle上面的语句查不到数据,应该套一层,如下
select * from (select a.*, rownum rn from t_user a where rownum <= 4) where rn >= 2
在不同的数据库当中有不同的用法,下面看看不同的数据库是如何处理的:
SQL Server
在分页查询上,我感觉SQL Server比较费劲,没有一个专门的分页的语句,靠的是一种巧妙的方法实现分页查询:
折叠复制代码
id city country age sex username
1 北京 中国 25 1 小黄
3 广州 中国 26 1 小明
4 深圳 中国 24 1 小李
5 纽约 美国 25 1 Jack
6 华盛顿 美国 23 1 Tom
7 伦敦 英国 19 0 Lela
select * from t_user
select * from (select top 2 * from (select top 6 * from t_user order by id asc ) as aaa order by id desc) as bbb order by id asc
折叠复制代码
1 北京 中国 25 1 小黄
3 广州 中国 26 1 小明
4 深圳 中国 24 1 小李
5 纽约 美国 25 1 Jack
6 华盛顿 美国 23 1 Tom
7 伦敦 英国 19 0 Lela
折叠复制代码
6 华盛顿 美国 23 1 Tom
7 伦敦 英国 19 0 Lela
上面分页查询表示的是从第(6-2)=4条数据开始到第6条数据结束这段结果集。
MySQL
MySQL有个专门针对查询出一段数据的语句limit,使用起来非常的方便。
select * from t_user limit 2,3
折叠复制代码
4 深圳 中国 24 1 小李
5 纽约 美国 25 1 Jack
6 华盛顿 美国 23 1 Tom
上面查询中的2代表从第2条数据之后开始,注意是第2条数据之后,不包含第2条数据。3代表总共查询3条记录。那么limit 2,3代表从第2条(不包含第2条) 数据开始查询出3条记录。
Oracle
Oracle中有个rownum,其含义更加明显,就是第几行的意思,这样我们就可以通过where条件来进行分段查询了。
select * from t_user where rownum>=2 and rownum<=4
注意:oracle上面的语句查不到数据,应该套一层,如下
select * from (select a.*, rownum rn from t_user a where rownum <= 4) where rn >= 2