在一本书上见到两道面试题,觉得挺有意思,拿来和大家分享下。
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个问题明白了,可是看着看着反而糊涂了,结果又搞了一晚上,才知道个大概。