SQL 语句分页学习总结

两个方面:语法顺序和执行顺序 理解SQL语句执行原理

语法顺序
(1)SELECT[DISTINCT]
(2)FROM
(3)WHERE
(4)HAVING 
(5)UNION 
(6)ORDER BY
执行顺序
(1)FROM
(2)WHERE
(3)GROUP BY
(4)HAVING
(5)SELECT
(6)DISTINCT
(7)UNION
(8)ORDER BY

注意:

(1)FROM是sql语句执行的开始,作用是先将所有的数据从硬盘上(理解数据时保存在硬盘上的
文件中)读取到缓冲区中
 然后再进行对缓冲区中的数据进行其他相关操作。
(2)SELECT执行的顺序比较靠后,应该说是在FROM和GROUP BY之后执行的;因此不能在
WHERE中设定别名的字段作为判断条件的原因。
举个简单查询的例子:
第一种写法:
SELECT ID AS A_ID FROM A
WHERE ID>10
第二种写法:
SELECT ID AS A_ID FROM A
WHERE A_ID>10
第一种写法使用A表中的原始ID字段名作为查询条件是正确的;而第二种写法使用A表中ID字段
的别名A_ID作为查询条件是不正确的,语句无法执行。

(3)UNION总是排在ORDER BY之前

分页方式实现总结
例子:每页显示第N(N>=2,默认N=1)页的Limit条数据,

(1) 采用top 方式实现
SELECT TOP Limit*from A
WHERE ID NOT IN(
SELECT TOP Limit*(N-1) ID from A
)
select top 10  *from PUB_USER
where USER_ID not in(
select top 20 USER_ID from PUB_USER
)
(2) 采用Max方式实现
SELECT TOP Limit *FROM A
WHERE ID>(
SELECT MAX(ID)AS TempID FROM
(
SELECT TOP Limit ID FROM A ORDER BY ID
)TempTable
)

SELECT TOP 10 *FROM PUB_USER
WHERE USER_ID>
(
SELECT MAX(USER_ID)AS ID FROM(
SELECT TOP 10 USER_ID FROM PUB_USER ORDER BY USER_ID
)TempTable
)
(3)采用Row_Number方式实现
N表示第几页,Limit表示每页显示多少条数据
SELECT *FROM(
SELECT ROW_NUMBER() OVER(ORDER BY ID)AS RowNumber
FROM A 
)TempTable WHERE RowNumber BETWEEN Limit(N-1)+1 AND Limit*N

SELECT *FROM(
SELECT ROW_NUMBER() OVER(ORDER BY USER_ID)AS RowNumber
FROM PUB_USER 
)TempTable WHERE RowNumber BETWEEN 21 AND 30

总结:以上几种实现分页查询的方式,以及性能表现能够看到,Row_Number()Over(Order by)
实现性能更佳,而且能够适应多表连接以及子查询。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值