sql练习总结(一)
2014-05-27 09:47
148 查看
写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的。
把所能想到的实现方法都做了一遍:
1.用集合查询
2.用NOT IN 谓词
3.用ALL谓词
4.用MAX聚集函数
这里有些问题,因为 带有 top子句 的子查询 没有 order by 子句 排序的话,MAX(Id)作用的就是T_Test基本表,而不仅仅是A这个结果集,所以MAX(Id)会取到整个T_Test表的最大值,从而整个查询没有结果。
改正:
5.用开窗函数
最后:水平有限,欢迎大家指教,共同学习进步!
把所能想到的实现方法都做了一遍:
1.用集合查询
select top 40 * from T_Test except select top 30 * from T_Test
2.用NOT IN 谓词
select top 10 * from T_Test where Id not in(select top 30 Id from T_Test)
3.用ALL谓词
select top 10 * from T_Test where Id >all(select top 30 Id from T_Test)
4.用MAX聚集函数
select top 10 * from T_Test where Id >(select MAX(Id) from (select top 30 Id from T_Test) as A)
这里有些问题,因为 带有 top子句 的子查询 没有 order by 子句 排序的话,MAX(Id)作用的就是T_Test基本表,而不仅仅是A这个结果集,所以MAX(Id)会取到整个T_Test表的最大值,从而整个查询没有结果。
改正:
select top 10 * from T_Test where Id >(select MAX(Id) from (select top 30 Id from T_Test order by Id) as A)
5.用开窗函数
select Id,Name from (select *, ROW_NUMBER() over(order by Id) as num from T_Test) as S where S.num between 31 and 40
最后:水平有限,欢迎大家指教,共同学习进步!
相关文章推荐
- 标准SQL查询 总结练习
- mysql 事务总结 存储过程 + 最近sql查询后的练习反思
- SQL 条件语句(练习总结)
- 必知必会sql面试题练习总结之学生课程篇
- SQL连接查询总结和练习
- SQL连接查询总结和练习
- SQLi-Labs 练习总结 Page-1 Less-1
- SQL 练习总结
- 第四十二天-第五十二 天:sql语句和语法的练习总结(一)
- SQL注射总结(一)
- SQL日志文件总结及日志满的处理
- 总结的SQL
- sql语句编程手册(实用+练习)
- SQL注射总结(4)
- {技术.SQL.ACCESS.EXCEL.FOXPRO} SQLServer和Access、Excel数据传输简单总结
- SQL注射总结(1)
- Sql常见面试题(总结)
- 总结一下SQL语句中引号
- SQL FAQ 个人总结(结合oracle FAQ)
- oracle sql总结