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

时间:2010-01-22 19:25:17

标签: sql database

我正在经历Questions every good .Net developer should be able to answer并且对这个问题的内容和方法印象深刻,所以本着同样的精神,我正在向Database / SQL Developer提出这个问题。

您认为好的数据库/ SQL程序员能够回答哪些问题

22 个答案:

答案 0 :(得分:31)

不同类型的JOIN:

  • INNER JOIN
  • LEFT和RIGHT OUTER JOIN
  • FULL JOIN
  • CROSS JOIN

见Jeff Atwood的Visual Explanation of JOINs

  • 什么是钥匙?候选人钥匙?主键?另一把钥匙?外键?
  • 什么是索引以及它如何帮助您的数据库?

  • 有哪些数据类型以及何时使用哪些数据?

答案 1 :(得分:28)

my answer here的转载,作为主题的一般指导原则。

基本


  1. SELECT表格中的列
  2. 汇总第1部分:COUNTSUMMAX / MIN
  3. 汇总第2部分:DISTINCTGROUP BYHAVING
  4. 中间体


    1. JOIN s,ANSI-89和ANSI-92语法
    2. UNION vs UNION ALL
    3. NULL处理:COALESCE&原生NULL处理
    4. 子查询:INEXISTS和内嵌视图
    5. 子查询:相关
    6. WITH语法:子查询Factoring / CTE
    7. 浏览
    8. 高级主题


      • 功能,存储过程,包
      • 透视数据:CASE& PIVOT语法
      • 分层查询
      • 游标:隐含和明确
      • 触发器
      • 动态SQL
      • 物化视图
      • 查询优化:索引
      • 查询优化:解释计划
      • 查询优化:分析
      • 数据建模:普通表格,1到3
      • 数据建模:初级和初级外键
      • 数据建模:表约束
      • 数据建模:链接/计算表
      • 全文搜索
      • XML
      • 隔离级别
      • 实体关系图(ERD),逻辑和物理
      • 交易:COMMITROLLBACK,错误处理

答案 2 :(得分:12)

以下是一些:

  • 什么是正常化,为什么会这样 重要?
  • 你有什么情况 会对数据进行去标准化吗?
  • 什么是交易,为什么呢 重要?
  • 什么是参照完整性及其原因 这很重要吗?
  • 将采取什么步骤 调查缓慢数据库的报告 性能

答案 3 :(得分:8)

我已经给出了这个答案,因为Erwin Smout发布了answer这是错误的,它突出显示可能需要专门防范它。

欧文建议:

  

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

更合适的问题是:如果有人声称:“每个SELECT总是包含DISTINCT”;你会如何评论这一说法?

如果候选人无法在火焰中射击,他们要么:

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

有关记录

  1. 假设您的查询正确 ,并且不会返回任何重复项,那么包括DISTINCT只会强制RDBMS检查您的结果(零利益,还有很多额外的处理)。
  2. 假设您的查询不正确 返回重复项,然后包括DISTINCT只需隐藏问题(再次进行额外处理)。最好发现问题并修复你的查询......它会以这种方式运行得更快。

答案 4 :(得分:8)

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

什么是光标以及何时使用(或不使用)以及为什么?

答案 5 :(得分:5)

在我们公司,我们创建了一个SQL开发人员测试,而不是向许多具有良好内存的人提出许多SQL问题。该测试旨在让候选人将实体模式与规范化和RI考虑因素放在一起,检查约束等。然后能够创建一些查询来生成我们正在寻找的结果集。他们根据我们提供的简短设计规范创造了这一切。他们被允许在家里这样做,并且需要花费尽可能多的时间(在合理范围内)。

答案 6 :(得分:5)

  

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

我要问的另一个问题不是特定服务器:

  

什么是死锁?

答案 7 :(得分:5)

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

我会问集合理论。如果您不理解集合操作,则无法有效地查询关系数据库。

我会给他们一些游标示例,并询问他们如何重写它们以使它们基于集合。

如果工作涉及进口和出口,我会询问有关SSIS(或其他数据库使用的其他工具)的问题。如果它涉及编写报告,我想知道他们理解聚合和分组(以及Crystal Reports或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'

答案 8 :(得分:4)

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

SELECT *

答案 9 :(得分:3)

一个有趣的问题涉及relational division,或者如何表达“for all”关系,这需要嵌套的not exists子句。

问题来自于this link

如下表所示,代表可以在机库中飞行飞机和飞机的飞行员:

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 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
  )
)

或......

选择在10 most popular programming languages标记的问题中已接受答案的所有堆栈溢出用户。

(可能的)答案(假设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
  )
)

答案 10 :(得分:2)

当我们使用经过适当优化的ORM并实施memcached等缓存系统的复杂应用程序时,我们为什么要雇用您?

这是一个严肃的问题,他们应该能够为自己的存在辩护。正如杰夫阿特伍德喜欢说“Hardware is Cheap, Programmers are Expensive

答案 11 :(得分:2)

比较并对比sql / rdbms解决方案和nosql解决方案之间的差异。如果不了解其优势和劣势,就不能声称自己是任何技术的专家。

答案 12 :(得分:1)

  • 作为开发人员,哪些数据库类型对您造成了理解和调试的麻烦? 预期答案,恕我直言,使用不同日期/时间戳类型和BLOB 的问题经验。

  • 何时使用位图索引很方便?

答案 13 :(得分:1)

这里几乎提到了一切。我想分享一个问题,高级经理就数据库问我。我发现这个问题非常有趣,如果你深入思考它,它有很多意义。

问题是 - 您如何向5岁的孩子描述数据库?

答案 14 :(得分:1)

该应用程序每天24小时都在使用。您的维护/更新窗口每月2小时,您打算如何最大限度地减少中断?

答案 15 :(得分:1)

  • 如何在应用程序层中检测并解决并发问题?
  • 通常提供哪些锁定范例,并讨论它们的优缺点。
  • 讨论NULL值及相关问题。
  • 您使用的最大数据库系统是什么:#tables,#rows,#users。

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

  • 讨论IDENTITY专栏。
  • 用于什么是timestamp数据类型?

答案 16 :(得分:1)

explain plan做了什么以及如何解释从中得到的结果。

答案 17 :(得分:1)

举一个更适合使用denomralization的例子。

(我喜欢这个,因为人们会大学毕业,希望把所有东西都放到第3范围内)

答案 18 :(得分:0)

  • 使用adhoc / on-the-fly SQL语句有什么缺点,你会做什么呢?

此区域可能会对数据库的性能和安全性产生巨大影响。弄错了,你可能会陷入痛苦的世界。

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

因为规则总是有例外:)

答案 19 :(得分:0)

  • 解释表格的可能限制
  • 解释观点(并具体化)
  • 解释序列
  • 解释触发器

答案 20 :(得分:0)

  • 解释一下之间的区别 内外连接。
  • 什么是笛卡尔积?
  • 解释第3范式

答案 21 :(得分:-2)

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