SQL语句分页学习之语法顺序和执行顺序
程序员文章站
2022-03-23 20:02:31
两个方面:语法顺序和执行顺序 理解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)实现性能更佳,而且能够适应多表连接以及子查询。