问题每一个好的数据库/ SQL开发人员应该能够回答
我正在经历的问题每一个好的.Net开发人员应该能够回答 ,并且对这个问题的内容和方法印象深刻,所以本着同样的精神,我问这个问题的数据库/ SQL开发人员。
你认为一个好的数据库/ SQL程序员能够回应 什么问题 ?
不同types的JOIN:
- 内部联接
- 左和右外部join
- 完全join
- CROSS JOIN
请参阅Jeff Atwood 对JOIN的视觉解释
- 什么是关键? 候选键? 主键? 一个备用钥匙? 外键?
-
什么是索引,它如何帮助你的数据库?
-
什么是可用的数据types以及何时使用哪些数据types?
我在这里重印我的答案 ,作为主题的一般准则。
基本
- 从表中
SELECT
列 - 聚合第1部分:
COUNT
,SUM
,MAX
/MIN
- 聚合第2部分:
DISTINCT
,GROUP BY
,HAVING
中间
-
JOIN
,ANSI-89和ANSI-92语法 -
UNION
vsUNION ALL
-
NULL
处理:COALESCE
和本机NULL处理 - 子查询:
IN
,EXISTS
和inline视图 - 子查询:相关
-
WITH
语法:子查询分解/ CTE - 查看
高级主题
- 函数,存储过程,包
- 旋转数据:CASE&PIVOT语法
- 分层查询
- 游标:隐式和显式
- 触发器
- dynamicSQL
- 物化视图
- 查询优化:索引
- 查询优化:解释计划
- 查询优化:分析
- 数据build模:正常forms,1到3
- 数据build模:主键和外键
- 数据build模:表约束
- 数据build模:链接/ Corrollary表
- 全文search
- XML
- 隔离级别
- 实体关系图(ERD),逻辑和物理
- 事务:
COMMIT
,ROLLBACK
,error handling
这里有几个:
- 什么是标准化,为什么它很重要?
- 在什么情况下你会去规范化数据?
- 什么是交易,为什么这很重要?
- 什么是参照完整性?为什么这很重要?
- 要调查数据库性能低下的报告将采取哪些步骤?
什么是SQL注入,你如何防止它?
什么是光标,什么时候使用它(或不),为什么?
我已经提出了这个答案,因为Erwin Smout发布了一个非常错误的答案 ,强调可能需要特别防范。
Erwinbuild议:
“为什么每个SELECT总是包含DISTINCT?
更合适的问题是:如果有人提出这样的声明:“每个SELECT总是包含DISTINCT”; 你如何评价这个索赔?
如果一个候选人不能在火焰中投诉,他们要么:
- 不明白与索赔的问题。
- 缺乏批判性思维能力。
- 缺乏沟通技术问题的能力。
作为logging
- 假设你的查询是正确的 ,并且不返回任何重复,那么包括DISTINCT只是迫使RDBMS检查你的结果(零利益,和许多额外的处理)。
- 假设你的查询是不正确的 ,并且返回重复,那么包括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?