问题每一个好的数据库/ SQL开发人员应该能够回答

我正在经历的问题每一个好的.Net开发人员应该能够回答 ,并且对这个问题的内容和方法印象深刻,所以本着同样的精神,我问这个问题的数据库/ SQL开发人员。

你认为一个好的数据库/ SQL程序员能够回应 什么问题

不同types的JOIN:

  • 内部联接
  • 左和右外部join
  • 完全join
  • CROSS JOIN

请参阅Jeff Atwood 对JOIN的视觉解释

  • 什么是关键? 候选键? 主键? 一个备用钥匙? 外键?
  • 什么是索引,它如何帮助你的数据库?

  • 什么是可用的数据types以及何时使用哪些数据types?

我在这里重印我的答案 ,作为主题的一般准则。

基本


  1. 从表中SELECT
  2. 聚合第1部分: COUNTSUMMAX / MIN
  3. 聚合第2部分: DISTINCTGROUP BYHAVING

中间


  1. JOIN ,ANSI-89和ANSI-92语法
  2. UNION vs UNION ALL
  3. NULL处理: COALESCE和本机NULL处理
  4. 子查询: INEXISTS和inline视图
  5. 子查询:相关
  6. WITH语法:子查询分解/ CTE
  7. 查看

高级主题


  • 函数,存储过程,包
  • 旋转数据:CASE&PIVOT语法
  • 分层查询
  • 游标:隐式和显式
  • 触发器
  • dynamicSQL
  • 物化视图
  • 查询优化:索引
  • 查询优化:解释计划
  • 查询优化:分析
  • 数据build模:正常forms,1到3
  • 数据build模:主键和外键
  • 数据build模:表约束
  • 数据build模:链接/ Corrollary表
  • 全文search
  • XML
  • 隔离级别
  • 实体关系图(ERD),逻辑和物理
  • 事务: COMMITROLLBACK ,error handling

这里有几个:

  • 什么是标准化,为什么它很重要?
  • 在什么情况下你会去规范化数据?
  • 什么是交易,为什么这很重要?
  • 什么是参照完整性?为什么这很重要?
  • 要调查数据库性能低下的报告将采取哪些步骤?

什么是SQL注入,你如何防止它?

什么是光标,什么时候使用它(或不),为什么?

我已经提出了这个答案,因为Erwin Smout发布了一个非常错误的答案 ,强调可能需要特别防范。

Erwinbuild议:

“为什么每个SELECT总是包含DISTINCT?

更合适的问题是:如果有人提出这样的声明:“每个SELECT总是包含DISTINCT”; 你如何评价这个索赔?

如果一个候选人不能在火焰中投诉,他们要么:

  • 不明白与索赔的问题。
  • 缺乏批判性思维能力。
  • 缺乏沟通技术问题的能力。

作为logging

  1. 假设你的查询是正确的 ,并且不返回任何重复,那么包括DISTINCT只是迫使RDBMS检查你的结果(零利益,和许多额外的处理)。
  2. 假设你的查询是不正确的 ,并且返回重复,那么包括DISTINCT只是隐藏了问题(再次进行额外的处理)。 发现问题并修复查询会更好…它将以更快的速度运行。

在我们公司,我们并没有提出任何有良好记忆的人都可以回答的许多SQL问题,而是创build了一个SQL开发人员testing。 该testing的目的是让候选人将规范化和RI考虑放在一起,检查约束等,然后能够创build一些查询来生成我们正在寻找的结果集。 他们根据我们给他们的一个简单的devise规范来创build所有这些 他们被允许在家里这样做,并且尽可能地花费时间(在合理的范围内)。

我会给一个写得不好的查询,问他们如何去调整性能。

我会问集合论。 如果你不明白操作集,你不能有效地查询关系数据库。

我会给他们一些光标的例子,并问他们如何重写他们,使他们为基础。

如果涉及import和出口的工作,我会问关于SSIS(或其他数据库所使用的其他工具)的问题。 如果它涉及写报告,我想知道他们理解聚合和分组(以及水晶报告或SSRS或任何您使用的报告工具)。

我会问这三个查询的结果有什么不同:

 select a.field1 , a.field2 , b.field3 from table1 a join table2 b on a.id = b.id where a.field5 = 'test' and b.field3 = 1 select a.field1 , a.field2 , b.field3 from table1 a left join table2 b on a.id = b.id where a.field5 = 'test' and b.field3 = 1 select a.field1 , a.field2 , b.field3 from table1 a left join table2 b on a.id = b.id and b.field3 = 1 where a.field5 = 'test' 

聚簇索引和非聚簇索引有什么区别?

我想问的另一个问题是不是针对特定的服务器:

什么是僵局?

知道不要用,为什么不用:

 SELECT * 

一个有趣的问题将涉及关系分裂 ,或者如何expression一个“所有”关系,这将需要嵌套not exists子句。

这个问题直接来自于这个问题。

给出下列表格,代表可在飞机库中飞机和飞机的飞行员:

 create table PilotSkills ( pilot_name char(15) not null, plane_name char(15) not null ) create table Hangar ( plane_name char(15) not null ) 

select可以在机库中飞行每架飞机的飞行员的姓名。

答案:

 select distinct pilot_name from PilotSkills as ps1 where not exists ( select * from hangar where not exists ( select * from PilotSkills as ps2 where ps1.pilot_name = ps2.pilot_name and ps2.plane_name = hangar.plane_name ) ) 

要么 …

select所有在10种最stream行的编程语言标记的问题上接受答案的堆栈溢出用户。

(可能的)答案(假设Accepted_Answers视图和Target_Language_Tags表与所需的标记):

 select distinct u.user_name from Users as u join Accepted_Answers as a1 on u.user_id = a1.user_id where not exists ( select * from Target_Language_Tags t where not exists ( select * from Accepted_Answers as a2 join Questions as q on a2.question_id = q.question_id join Question_Tags as qt on qt.question_id = q.question_id where qt.tag_name = t.tag_name and a1.user_id = a2.user_id ) ) 

当我们有一个复杂的应用程序使用经过适当优化的ORM并实现caching系统(如memcached)时,为什么我们应该聘用您?

这是一个严重的问题,他们应该能够certificate自己的存在。 正如Jeff Atwood喜欢说“ 硬件便宜,程序员价格昂贵 ”

比较和对比sql / rdbms解决scheme和nosql解决scheme之间的差异。 如果不知道竞争对手的优势和劣势,就不能说自己是技术方面的专家。

举一个例子,其中denomralization是可取的。

(我喜欢这个,因为大学里面的人都在急匆匆地想把所有东西都放到第三范式里面)

  • 作为开发人员,哪些数据库types对您造成了更多的麻烦,需要了解和debugging? 预期的答案,恕我直言,遇到问题使用不同的date/时间戳types和BLOBs

  • 什么时候方便使用位图索引?

什么explain plan ,如何解释你从中得到的结果。

  • 如何检测和解决应用程序层中的并发问题?
  • 通常可以使用哪些locking范例,并讨论它们的优缺点。
  • 讨论NULL值和相关的问题。
  • 什么是你所做的最大的数据库系统:#tables,#rows,#users。

还有以下特定于平台(SQL Server)的问题:

  • 讨论IDENTITY列。
  • 什么是时间戳数据types用于?

该应用程序每天24小时都在使用。 您的维护/更新窗口每个月有2个小时,您打算如何尽量减less中断?

几乎所有的东西都在这里提到。 我想分享一个数据库高级经理问的问题。 我发现这个问题很有意思,如果你深入思考,这个问题有很多意义。

问题是 – 你如何描述你的5岁孩子的数据库?

  • 解释一个内部和外部连接的区别。
  • 什么是笛卡尔积?
  • 解释第三范式
  • 解释可能的表格限制
  • 解释意见(并物化)
  • 解释序列
  • 解释触发器
  • 使用adhoc / on-the-fly SQL语句有什么缺点,你会怎么做?

这个区域可以对db的性能和安全性产生巨大的影响。 得到这个错误,你可能最终在一个痛苦的世界。

  • 在什么情况下你会使用adhoc / on-the-fly SQL语句?

因为总是有一个例外的规则:)

“为什么每个SELECT总是包含DISTINCT?