欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL语句分页学习之语法顺序和执行顺序

程序员文章站 2022-07-05 22:32:09
两个方面:语法顺序和执行顺序 理解SQL语句执行原理 语法顺序 (1)SELECT[DISTINCT] (2)FROM (3)WHERE (4)HAVING (5...

两个方面:语法顺序和执行顺序 理解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)实现性能更佳,而且能够适应多表连接以及子查询。