面试常问的SQL题目,请各抒己见

agayboy 2014-02-18 11:31:53
本人一年经验,由于当时是毕业直接进小公司,最近离职了,进入求职大军,明天要面试了,想来问下前辈,面试官都喜欢问什么SQL的问题,请赐教
...全文
4346 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2014-03-19
  • 打赏
  • 举报
回复
引用 29 楼 x_wy46 的回复:
[quote=引用 27 楼 yupeigu 的回复:] [quote=引用 25 楼 x_wy46 的回复:] [quote=引用 21 楼 yupeigu 的回复:] 前天刚去面试DBA的职位,其实题都比较简单,但是具体问的都很细。 其实去面试最关键的不是懂多少,而是你必须说你有经验,不懂要装懂。
我觉得面试吧,跟面试官跟企业问题有很大关系 有的问题刨根问题也没有问题,会的就答,不会的就说不会 如果是面试官追着问那些曾经困扰过他自己的那些“非主流原因”引起的疑难杂症之类的问题 这些面试官的目的似乎只有一个:问到你到不上来为止,我也不知道他究竟是面试还是装逼 这种公司,即便是面试通过,以后合作起来也不会太愉快 就有些不值当了, 曾经被一个小伙子面试官批的一文不值 你不会socket编程?不会mysql?不会手持设备的开发? 我是不会,你非要在你那一亩三分地上使劲撒野,那你自娱自乐去吧 好的面试官还是有的, 问啥?不会追着你不懂的去问,而是追着你“懂”的知识去挖掘你到底掌握有多深 就是那种:你说你会啥,我就问你啥,看看究竟掌握到哪个层次 这种面试官也遇到过,即便面试不过,全程也很愉快,同时我也会很感激他 因为每个人掌握的知识都是有局限性的, 不太可能说一个面试者掌握的知识恰恰好跟公司的要求符合(当然我也不排除这种可能) 当然也并不是说这样不好, 除了那种极少数的人,学东西很快,脑瓜子很灵性,大多数人不会把什么东西都弄的很“精通”的 我上家公司的小团队内就有非常好的风气,隔三差五地,每个人出来讲点你比较擅长的东西 随便啥都成,小到代码逻辑的写法,大到架构层面,因为除了工作,业余时间每个人研究的东西都不太一样 你喜欢研究JS,他喜欢研究数据库,别人喜欢研究反射技术在具体场景下的应用,大开眼界 当时面试我的项目经理,说白了我笔试中C#技术答的一般, 他就问我数据库方面的东西,我就跟他讲数据库,讲sql这些 他说他把三范式给忘了,让我说来听听 我给他说完, 他全部听明白或者说是回忆起来了(或许是他故意问我的,因为当时刚毕业没多久,他有意考查我基础知识),然后就通过了 总之,感觉,不是所有公司都值得去的[/quote] 嗯,很有道理。 问问题也是一门艺术,不是问一堆面试者不懂的或者不擅长的,因为每个人不可能什么都懂,但是每个人可能都有擅长的方面,多问擅长的方面,看看到底掌握的是否深入,或者有什么深入的见解,这个很好,能发现每个人的闪光点。 而不是一味的,揭人的短处,这才是用人之道。 [/quote] 说起来委屈真的很多,想在想想也就那样,现在想想也就那样,看开了,真要是跟那些人计较,层次也太低了吧 典型的场景: 1,面试有人追着“设计模式”不放,问你会几种设计模式,每种设计模式的特定是啥 你妹的你项目中用到几种设计模式? 你项目中对设计模式的应用都是随心所欲的吗? 你自己看到代码都想起来设计模式了么? 你没有设计模式不写代码了吗? 2,那时候还没毕业,那时候还在学java, 一小伙子面试官:hibernate你会吗, 答曰:会,看到相关的书籍,大概了解原理 又问:你参加培训机构了吗? 答曰:没有,就是自己看书操作的 又问:没工作经验,又参加培训机构怎么会hibernate? 我日你妈,忍不住吐脏话,尼玛懂不懂你问问具体的内容不就知道了,上来就质疑,质疑尼玛啊? 尼玛的你是不是吭吭哧哧,配置了N多天还没配置出来,没弄懂原理,好不容易弄懂了, 别人对这个知识点也有了解,就跟你有仇啊?你不知道人家也是花了很大功能弄懂的,[/quote] 无语了,说到底,只能说这个面试官是一坨屎 还有就是我觉得,很多面试官, 他一上来就是以一种,认为你会说假话的方式,来问你问题。而且,就算你回答的不错,他最后也没有信任你,总觉得你不懂,只是你在说假话而已
LongRui888 2014-03-19
  • 打赏
  • 举报
回复
引用 26 楼 x_wy46 的回复:
跟面试官跟企业问题有很大关系 修改为: 跟面试官品行和企业文化有很大关系
呵呵,这个也同意。 有些面试官问问题的方式,和说的话,就知道这个人不怎么样,而这些又会和公司的文化,或者是公司的氛围有很大的关系
LongRui888 2014-03-19
  • 打赏
  • 举报
回复
引用 25 楼 x_wy46 的回复:
[quote=引用 21 楼 yupeigu 的回复:] 前天刚去面试DBA的职位,其实题都比较简单,但是具体问的都很细。 其实去面试最关键的不是懂多少,而是你必须说你有经验,不懂要装懂。
我觉得面试吧,跟面试官跟企业问题有很大关系 有的问题刨根问题也没有问题,会的就答,不会的就说不会 如果是面试官追着问那些曾经困扰过他自己的那些“非主流原因”引起的疑难杂症之类的问题 这些面试官的目的似乎只有一个:问到你到不上来为止,我也不知道他究竟是面试还是装逼 这种公司,即便是面试通过,以后合作起来也不会太愉快 就有些不值当了, 曾经被一个小伙子面试官批的一文不值 你不会socket编程?不会mysql?不会手持设备的开发? 我是不会,你非要在你那一亩三分地上使劲撒野,那你自娱自乐去吧 好的面试官还是有的, 问啥?不会追着你不懂的去问,而是追着你“懂”的知识去挖掘你到底掌握有多深 就是那种:你说你会啥,我就问你啥,看看究竟掌握到哪个层次 这种面试官也遇到过,即便面试不过,全程也很愉快,同时我也会很感激他 因为每个人掌握的知识都是有局限性的, 不太可能说一个面试者掌握的知识恰恰好跟公司的要求符合(当然我也不排除这种可能) 当然也并不是说这样不好, 除了那种极少数的人,学东西很快,脑瓜子很灵性,大多数人不会把什么东西都弄的很“精通”的 我上家公司的小团队内就有非常好的风气,隔三差五地,每个人出来讲点你比较擅长的东西 随便啥都成,小到代码逻辑的写法,大到架构层面,因为除了工作,业余时间每个人研究的东西都不太一样 你喜欢研究JS,他喜欢研究数据库,别人喜欢研究反射技术在具体场景下的应用,大开眼界 当时面试我的项目经理,说白了我笔试中C#技术答的一般, 他就问我数据库方面的东西,我就跟他讲数据库,讲sql这些 他说他把三范式给忘了,让我说来听听 我给他说完, 他全部听明白或者说是回忆起来了(或许是他故意问我的,因为当时刚毕业没多久,他有意考查我基础知识),然后就通过了 总之,感觉,不是所有公司都值得去的[/quote] 嗯,很有道理。 问问题也是一门艺术,不是问一堆面试者不懂的或者不擅长的,因为每个人不可能什么都懂,但是每个人可能都有擅长的方面,多问擅长的方面,看看到底掌握的是否深入,或者有什么深入的见解,这个很好,能发现每个人的闪光点。 而不是一味的,揭人的短处,这才是用人之道。
专注or全面 2014-03-19
  • 打赏
  • 举报
回复
跟面试官跟企业问题有很大关系 修改为: 跟面试官品行和企业文化有很大关系
专注or全面 2014-03-19
  • 打赏
  • 举报
回复
引用 21 楼 yupeigu 的回复:
前天刚去面试DBA的职位,其实题都比较简单,但是具体问的都很细。 其实去面试最关键的不是懂多少,而是你必须说你有经验,不懂要装懂。
我觉得面试吧,跟面试官跟企业问题有很大关系 有的问题刨根问题也没有问题,会的就答,不会的就说不会 如果是面试官追着问那些曾经困扰过他自己的那些“非主流原因”引起的疑难杂症之类的问题 这些面试官的目的似乎只有一个:问到你到不上来为止,我也不知道他究竟是面试还是装逼 这种公司,即便是面试通过,以后合作起来也不会太愉快 就有些不值当了, 曾经被一个小伙子面试官批的一文不值 你不会socket编程?不会mysql?不会手持设备的开发? 我是不会,你非要在你那一亩三分地上使劲撒野,那你自娱自乐去吧 好的面试官还是有的, 问啥?不会追着你不懂的去问,而是追着你“懂”的知识去挖掘你到底掌握有多深 就是那种:你说你会啥,我就问你啥,看看究竟掌握到哪个层次 这种面试官也遇到过,即便面试不过,全程也很愉快,同时我也会很感激他 因为每个人掌握的知识都是有局限性的, 不太可能说一个面试者掌握的知识恰恰好跟公司的要求符合(当然我也不排除这种可能) 当然也并不是说这样不好, 除了那种极少数的人,学东西很快,脑瓜子很灵性,大多数人不会把什么东西都弄的很“精通”的 我上家公司的小团队内就有非常好的风气,隔三差五地,每个人出来讲点你比较擅长的东西 随便啥都成,小到代码逻辑的写法,大到架构层面,因为除了工作,业余时间每个人研究的东西都不太一样 你喜欢研究JS,他喜欢研究数据库,别人喜欢研究反射技术在具体场景下的应用,大开眼界 当时面试我的项目经理,说白了我笔试中C#技术答的一般, 他就问我数据库方面的东西,我就跟他讲数据库,讲sql这些 他说他把三范式给忘了,让我说来听听 我给他说完, 他全部听明白或者说是回忆起来了(或许是他故意问我的,因为当时刚毕业没多久,他有意考查我基础知识),然后就通过了 总之,感觉,不是所有公司都值得去的
victory610 2014-03-19
  • 打赏
  • 举报
回复
学习了呀,真正的好东西呀。
rfq 2014-02-21
  • 打赏
  • 举报
回复
1、想搞数据库,把理论背熟熟的 2、学习能力要强,做事仔细 3、实践能力逐渐增强
發糞塗牆 2014-02-20
  • 打赏
  • 举报
回复
引用 13 楼 u010192842 的回复:
[quote=引用 4 楼 DBA_Huangzj 的回复:] 要是我面试,少不了的一个问题是:数据库日志满了,并报错了,你怎么处理
怎么处理?[/quote]整理简历...
  • 打赏
  • 举报
回复
我觉得如果侧重DBA的话会问一些关于索引设计以及各种索引的区别的问题,然后就是如何定位系统瓶颈之类。当然备份还原这些也会涉及
renyiqiu 2014-02-20
  • 打赏
  • 举报
回复
上面的大大太牛逼了
Yole 2014-02-20
  • 打赏
  • 举报
回复
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
如果备份日志,还是无法收缩,可以看看,当前数据库的日志重用:
select log_reuse_wait_desc
from sys.databases
如果是和复制相关,的可以参考版主的博客中的,关于移除数据库复制的语句
直面人生 2014-02-20
  • 打赏
  • 举报
回复
看你要的工资阿,你开的低点,他要求就少些,只会出点简单的SQL题,网上搜索传智播客面试宝典,这个一般公司都懒得自己出题,面试的时候那些笔试SQL相关的题大多都可以在面试宝典上看到, 开的高点就离不开数据库优化了等问题了。 祝君幸运~需要资料的话回家我再上传
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
引用 13 楼 u010192842 的回复:
[quote=引用 4 楼 DBA_Huangzj 的回复:] 要是我面试,少不了的一个问题是:数据库日志满了,并报错了,你怎么处理
怎么处理?[/quote] 如果能扩大日志文件大小,就扩大。 如果磁盘都满了,可以在其他盘上创建一个新的日志文件。 如果其他磁盘也慢了,就看看数据库的恢复模式是否是full,可以备份数据库日志,然后系统会自动重用日志空间
Yole 2014-02-20
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
要是我面试,少不了的一个问题是:数据库日志满了,并报错了,你怎么处理
怎么处理?
t101lian 2014-02-20
  • 打赏
  • 举报
回复
引用 7 楼 yupeigu 的回复:
SQL经典面试题及答案:
1.一道SQL语句面试题,关于group by
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

            胜 负
2005-05-09 2 2
2005-05-10 1 2
------------------------------------------
create table #tmp(rq varchar(10),shengfu nchar(1))

insert into #tmp values('2005-05-09','胜')
insert into #tmp values('2005-05-09','胜')
insert into #tmp values('2005-05-09','负')
insert into #tmp values('2005-05-09','负')
insert into #tmp values('2005-05-10','胜')
insert into #tmp values('2005-05-10','负')
insert into #tmp values('2005-05-10','负')
1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq
2) select N.rq,N.勝,M.負 from (
select rq,勝=count(*) from #tmp where shengfu='胜'group by rq)N inner join
(select rq,負=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq
3)select a.col001,a.a1 胜,b.b1 负 from
(select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a,
(select col001,count(col001) b1 from temp1 where col002='负' group by col001) b
where a.col001=b.col001

2.请教一个面试中遇到的SQL语句的查询问题
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
------------------------------------------
select (case when a>b then a else b end ),
(case when b>c then b esle c end)
from table_name
3.面试题:一个日期判断的sql语句?
请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
------------------------------------------
select * from tb where datediff(dd,SendTime,getdate())=0

4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):  
   大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。  
       显示格式:  
       语文              数学                英语  
       及格              优秀                不及格    
------------------------------------------
select
(case when 语文>=80 then '优秀'
        when 语文>=60 then '及格'
else '不及格') as 语文,
(case when 数学>=80 then '优秀'
        when 数学>=60 then '及格'
else '不及格') as 数学,
(case when 英语>=80 then '优秀'
        when 英语>=60 then '及格'
else '不及格') as 英语,
from table
5.在sqlserver2000中请用sql创建一张用户临时表和系统临时表,里面包含两个字段ID和IDValues,类型都是int型,并解释下两者的区别?
------------------------------------------
用户临时表:create table #xx(ID int, IDValues int)
系统临时表:create table ##xx(ID int, IDValues int)

区别:
用户临时表只对创建这个表的用户的Session可见,对其他进程是不可见的.
当创建它的进程消失时这个临时表就自动删除.

全局临时表对整个SQL Server实例都可见,但是所有访问它的Session都消失的时候,它也自动删除.

6.sqlserver2000是一种大型数据库,他的存储容量只受存储介质的限制,请问它是通过什么方式实现这种无限容量机制的。
------------------------------------------
它的所有数据都存储在数据文件中(*.dbf),所以只要文件够大,SQL    Server的存储容量是可以扩大的.
SQL Server 2000 数据库有三种类型的文件:

主要数据文件
主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf。

次要数据文件
次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf。

日志文件
日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf。

7.请用一个sql语句得出结果
从table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。
如使用存储过程也可以。

table1

月份mon 部门dep 业绩yj
-------------------------------
一月份      01      10
一月份      02      10
一月份      03      5
二月份      02      8
二月份      04      9
三月份      03      8

table2

部门dep      部门名称dname
--------------------------------
      01      国内业务一部
      02      国内业务二部
      03      国内业务三部
      04      国际业务部

table3 (result)

部门dep 一月份      二月份      三月份
--------------------------------------
      01      10        null      null
      02      10         8        null
      03      null       5        8
      04      null      null      9
------------------------------------------

1)
select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'
from table1 a,table2 b,table2 c,table2 d
where a.部门dep = b.部门dep and b.月份mon = '一月份' and
a.部门dep = c.部门dep and c.月份mon = '二月份' and
a.部门dep = d.部门dep and d.月份mon = '三月份' and

2)
select a.dep,
sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end) as '三月份',
sum(case when b.mon=4 then b.yj else 0 end) as '四月份',
sum(case when b.mon=5 then b.yj else 0 end) as '五月份',
sum(case when b.mon=6 then b.yj else 0 end) as '六月份',
sum(case when b.mon=7 then b.yj else 0 end) as '七月份',
sum(case when b.mon=8 then b.yj else 0 end) as '八月份',
sum(case when b.mon=9 then b.yj else 0 end) as '九月份',
sum(case when b.mon=10 then b.yj else 0 end) as '十月份',
sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',
sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',
from table2 a left join table1 b on a.dep=b.dep

8.华为一道面试题
一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数。
------------------------------------------
select id, Count(*) from tb group by id having count(*)>1
select * from(select count(ID) as count from table group by ID)T where T.count>1
Eleve 2014-02-20
  • 打赏
  • 举报
回复
这个可以mark一下,哈哈
Neo_whl 2014-02-20
  • 打赏
  • 举报
回复
引用
要是我面试,少不了的一个问题是:数据库日志满了,并报错了,你怎么处理
这个问题大神觉得如何处理啊?报错为何呢?满了报错么?截断日志可以么?不懂,求解?大神举个例子么,几种方案,总结下嘛
LongRui888 2014-02-20
  • 打赏
  • 举报
回复
前天刚去面试DBA的职位,其实题都比较简单,但是具体问的都很细。 其实去面试最关键的不是懂多少,而是你必须说你有经验,不懂要装懂。
唐诗三百首 2014-02-19
  • 打赏
  • 举报
回复
看你应聘的是程序员还是DBA? 程序员的话,侧重TSQL编程. DBA的话,侧重于管理方面.
加载更多回复(9)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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