首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 查询表中第 31-40行记录的SQL语句怎么写? [已结贴,结贴人:dba_1984]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 11:37:28 楼主
    面试遇到的一个题目:
    在SQL server中有一个表 table1,主键为 ID,ID为自动编号(ID可能不连续),要求查询第31-40行记录,请问SQL语句怎么写?

    如果是在Oracle中又应该怎么写呢?
    30  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 11:40:071楼 得分:6
    select top 10 *
    from
    (select top 40 * from t order by ID )a
    order by ID desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 11:42:042楼 得分:0
    --oracle
    select
    *
    from
    (select top 40 * from t order by ID )a
    where
    rownum>30
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 11:43:313楼 得分:0
    --oracle和SQL05都可用row_number
    select
    *
    from
    (select top 40 *,row_number()over(order by ID) from t order by ID )a
    where
    row >30
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 11:48:414楼 得分:6
    SQL code
    --建表 create table table1(id int identity(1,1) primary key,name varchar(20)) declare @i int set @i=1 while @i<80 begin insert into table1 select 'a'+cast(@i as varchar) set @i=@i+1 end --删除几条,造成不连续: delete from table1 where id in (2,12,22,32) 第31-40行应该是从 35到44 --2005的写法: select id,name from (select row_number() over(order by id asc ) as nid,* from table1) as a where nid between 31 and 40 /* --------------------------------------- 35 a35 36 a36 37 a37 38 a38 39 a39 40 a40 41 a41 42 a42 43 a43 44 a44 */ 2000的写法,其它人补充吧.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 11:55:235楼 得分:0
    sql server 2000:
    SQL code
    select top 10 * from (select top 40 * from table1) as a where id not in (select top 30 id from table1 )

    /*
    35 a35
    36 a36
    37 a37
    38 a38
    39 a39
    40 a40
    41 a41
    42 a42
    43 a43
    44 a44
    */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 13:05:126楼 得分:2
    SQL code
    select top 10 * from (select top 40 * from 表名 order by id)a order by id desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kldxdybb
    • 等级:
    发表于:2008-06-23 14:39:117楼 得分:5
    引用 2 楼 roy_88 的回复:
    --oracle
    select
    *
    from
    (select top 40 * from t order by ID )a
    where
    rownum>30



    Oracle 中 没有top . 应该这样写

    select * from 表名 where exists
      (
      select null from
        (
        select t.id, rownum as row_num from
          (select id from 表名 order by id) t       
          where rownum <= 15   
        ) t1
      where t1.row_num >= 10
            and 表名.id = t1.id
      )
    order by id
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kldxdybb
    • 等级:
    发表于:2008-06-23 14:41:098楼 得分:2
    引用 7 楼 kldxdybb 的回复:
    引用 2 楼 roy_88 的回复:
    --oracle
    select
    *
    from
    (select top 40 * from t order by ID )a
    where
    rownum>30



    Oracle 中 没有top . 应该这样写

    select * from 表名 where exists
      (
      select null from
        (
        select t.id, rownum as row_num from
          (select id from 表名 order by id) t       
          where rownum <= 15    --自己改范围
        ) t1
      where t1.row_num >= 10    --自己改范围
            …
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 14:43:429楼 得分:0
    SQL code
    select * from ( select top 10 * from (select top 40 * from table1 order by id)a order by id desc ) as a order by id asc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 15:17:2110楼 得分:0
    引用 2 楼 roy_88 的回复:
    --oracle
    select
    *
    from
    (select  * from t order by ID )a
    where
    rownum>30 and rownum <41--用範圍
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • utpcb
    • 等级:
    发表于:2008-06-23 16:57:0211楼 得分:5
    2000
    select top 10 *
    from
    (select top 40 * from t order by ID )a
    order by ID desc
    2005
    select
    *
    from
    (select top 40 *,row_number()over(order by ID) from t order by ID )a
    where
    row >30


    --oracle
    select
    *
    from
    (select  * from t order by ID )a
    where
    rownum>30 and rownum <41--用範
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 17:56:5712楼 得分:0
    你的表有删过数据吗?(答:Y),ID列初始值是1 AND 自动步长是1吗?(答:Y)
    告诉你一个最简单的,
    SQL code
    SELECT * FROM table1 WHERE ID BETWEEM 31 AND 40 GO



    笑死人了,你们都答错了中啊,哈哈哈哈,我自横刀向天笑!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 18:07:2013楼 得分:3
    SQL code
    select top 10 * from (select top 40 * from tablename order by id)a order by id desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-23 22:07:0114楼 得分:0
    SQL code
    select top 10 * from (select top 40 * from table order by id)a order by id desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 17:19:3015楼 得分:0
    很好~~~~~~~~~~~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 20:33:0616楼 得分:0
    引用 14 楼 dabian1987 的回复:
    SQL code
    select top 10 * from (select top 40 * from table order by id)a order by id desc
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 20:52:0017楼 得分:1
    select top 10 * from table1 where id not in (select top 30 id from table1)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 22:11:3518楼 得分:0
    oracle rownum这样用,太久没有用了,忘得差不多了
    SQL code
    select * from (select t2.*,row_number()over (order by ID) rn from t2)t where rn between 31 and 40 select * from (select t.*,rownum rn from (select * from t2 order by ID)t)t where rn between 31 and 40
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 22:31:5419楼 得分:0
    用两个top 语句
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 22:35:3020楼 得分:0
    sql server用top
    oracle用row_number
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-29 20:07:0921楼 得分:0
    SQL code
    select top 10 *from table1 where id not in (select top 30 id from table1 order by id) order by id
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved