最近面试的几个数据库的问题
最近面试的几个数据库的问题按照非排序获取数据库中记录:假设数据库中有若干条记录,用sql的方式获取记录的列表(如人名),要求结果没有任何排序。一般这种情况在工作中很少见,我们都是见到要什么列排什么序的。当时没有做,如果真要没有任何顺序的结果,一般在.Net里面集合的操作可以很容易做到。在数据库中咋办呢?后来问面试官,他说不一定用一条sql,可以借助数据库的任何手段,这样就好办了:
基本思路:可以为表加一列,random的加入值,然后根据加入的random的列排序,那么所要的结果列就是没有任何顺序的了。那么如何random的加入一列呢?
- GUID?
- Random函数?
Sql server中的分页技术:请不要再用top n not in top 2n等等(t00 0ld),从sql server 2005中开始已经有了Row_Number() Over()函数了,可以很轻易的读出分页后的数据。
Sql Server中批量插入多条数据,在园子里看过一篇很好的博客,链接不记得了。比较了几种方法,最后结果是表变量最好。当然也可以用ADO.Net的bulkcopy来做,大体就这两种方法。
删除没有主键的重复记录的方法,如果要只一条sql来实现怎么办呢?有主键的话好办,没有主键又不借助于其他手段的话,怎么办呢?
还有就是sql server的数据存储的细节问题,数据时怎么在硬盘上存储的呢?索引的存储和表中的记录在物理上有什么关系呢?