我的也是属于你的,共享!

Roy_Sashulin
重庆医济智联科技有限公司官方账号
2005-09-09 12:43:12
SQL:不要传任何列的条件参数,查询表中连续的某几条记录
如:表A,id列为主键
id name sex age
-------------------------
1 luoyi male 21
2 yaya female 20
3 lili female 22
4 wuyong male 25
.......................

这个表的记录还有很多,如果我想取第二、第三条记录,不为别的,我就想要这两条,这不仅在编程中会用到,而且在一些公司面试时也有类似考题(呵呵,我没有遇到过),在oracle和mssqlserver中SQL代码分别为:

一、Oracle
在oracle中不能用top关键字,而用rownum,有两种方法可以实现
1.(select * from A where rownum <= 4) minus (select * from A where rownum <= 1)
这样就得到了二、三两条记录了。minus 关键字的意思是求两个结果集的差集,在数学中有这个概念,比如说两个集合可以合并、公有、差集.
2. select * from (select * from A where rownum < 4) b where b.id not in(select id from A where rownum <2)  这句代码也可以实。主要运用了not in运算符

二、ms sql server
在server中没有minus,只能用类似于oracle的第二种方法
select * from (select top 3 * from A) as b where b.id not in(select top 1 id from A)
三、绘制出来的结果为:
id name sex age
--------------------------------
2 yaya female 20
3 lili female 22

四、欢迎大家七嘴八舌地说。
...全文
153 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Roy_Sashulin 2005-09-15
  • 打赏
  • 举报
回复
顶
Roy_Sashulin 2005-09-09
  • 打赏
  • 举报
回复
1.(select * from A where rownum < 4) minus (select * from A where rownum < 2)
要把“=”去掉才与所要的结果集相配
Roy_Sashulin 2005-09-09
  • 打赏
  • 举报
回复
楼上的先生没有理解我的意思,我说的“如果”,在实际运用中有没有“id”字段也不一定,如果没有按序排列或者我并不知道条件是id和其它,那就麻烦。如果给你一个条件,是取数据表中第50条到第150条之间的记录(包含50、150条),在没有其他参数参与的情况下这会麻烦的,我的方法可以实现想要的结果集
(select * from A where rownum < 50) minus (select * from A where rownum < 150)
或者
select * from (select * from A where rownum <= 150) b where b.id not in(select id from A where rownum <50)
sunxutx 2005-09-09
  • 打赏
  • 举报
回复
楼主这句话的意思
------------------------
如果我想取第二、第三条记录
------------------------
不传参的话
直接select * from A where id=2 or id =3
不就好了 何必如此麻烦
jordan1 2005-09-09
  • 打赏
  • 举报
回复
up

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧