两道sql面试题,关于where 1=0,select 1,select top的理解

    在一本书上见到两道面试题,觉得挺有意思,拿来和大家分享下。

 

    Q1:写出只复制表结构的SQL语句。

 

    A1:

    对应的Oracle的实现为

 

    Q2:查数据表中第30到40条记录,有字段ID,但ID不是连续的。如何写SQL语句?

 

    A2:

    说说我对这段sql语句的理解:

 

   1、select top 40 id from tb order by id desc:desc是从大到小排列,那么选出的40条记录id的顺序就是从后往前;

 

   2、select top 10 id from(……) as c:再在这从这40条记录id中,选出前10条id,也就是数据库中的40到30条记录的id。as c不知道

 

有啥用;

 

   3、select 1 from(……) as b where b.id=a.id,select 1是查看有无记录的,也就是看第2步选出的40到30条记录id的集合中是否存

 

在where b.id=a.id。如果存在了,select * from tb where b.id=a.id就执行。这里说明一点,exists用于检查子查询是否至少会返回

 

一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。这种情况恰好符合select 1的使用特征。

 

----------------------------------------实属个人理解,如有谬误还望各位指正----------------------------------------------------

 

ps:开始以为第2个问题明白了,可是看着看着反而糊涂了,结果又搞了一晚上,才知道个大概。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值