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

Rac*_*hel 66 sql database

我所经历的问题,每一个良好的.NET开发人员应该能够回答,是这个问题的内容和方法非常深刻的印象,因此在同样的精神,我想查询数据库/ SQL Developer的这个问题.

您认为一个好的Database/SQL程序员能够回答哪些问题

mar*_*c_s 31

不同类型的JOIN:

  • 内部联接
  • LEFT和RIGHT OUTER JOIN
  • 完全加入
  • 交叉加入

请参阅Jeff Atwood的JOIN视觉解释

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

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

  • 如果您不完全了解联接,则不能成为数据库程序员.这将是第一个问题,如果答案是错误的,我也不会打扰任何其他人. (8认同)
  • 加入?Nuthin'一个很好的非规范化,整体的*史诗*比例表无法处理......:p (6认同)
  • 让我们不要侮辱集合理论家 - grokking工会和交叉点不等同于"理解集理论" (5认同)
  • 一般理解集合论是成为优秀的SQL开发人员的先决条件.所以我也会在你的清单中添加工会和交叉点. (2认同)
  • 在询问不同类型的联接时,不要让受访者解释它们,而是提出一系列问题,要求受访者使用每个联系来解决.许多"数据库开发人员"可以解释连接,但不能编写连接或知道何时应用它们. (2认同)

OMG*_*ies 28

我在这里重印我的答案,作为主题的一般指导.

基本


  1. SELECT从表中的列
  2. 骨料第1部分:COUNT,SUM,MAX/MIN
  3. 骨料第2部分:DISTINCT,GROUP BY,HAVING

中间


  1. JOINs,ANSI-89和ANSI-92语法
  2. UNION VS UNION ALL
  3. NULL处理:COALESCE&Native NULL处理
  4. 子查询:IN,EXISTS,和内嵌的意见
  5. 子查询:相关
  6. WITH 语法:子查询Factoring/CTE
  7. 查看

高级主题


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

  • 就个人而言,我认为一些"高级"项目应该属于"中级"或"有能力"."高级"将是非规范化,分区,查询/索引提示,复制,锁定和死锁,以及我们希望我们不必处理的所有疯狂的东西.不过,好名单! (6认同)
  • @Aaronaught:如果我有*access*:p,我就是DBA (4认同)
  • 我会把交易作为基础 - 如果你不知道该怎么做,那么任何保存的数据都不可信 (4认同)

Phi*_*ler 12

以下是一些:

  • 什么是正常化,为什么它很重要?
  • 在什么情况下你会对数据进行去标准化?
  • 什么是交易,为什么重要?
  • 什么是参照完整性,为什么重要?
  • 调查数据库性能缓慢的报告需要采取哪些步骤?


小智 8

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

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


Dis*_*ned 8

我已经给出了这个答案,因为Erwin Smout发布了一个错误的答案,强调可能需要专门防范它.

欧文建议:

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

一个更合适的问题是:如果有人声称:"每个SELECT总是包含DISTINCT"; 你会如何评论索赔?

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

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

作为记录

  1. 假设您的查询是正确的,并且不返回任何重复项,那么包括DISTINCT只是强制RDBMS检查您的结果(零利益和许多其他处理).
  2. 假设您的查询不正确,并且确实返回重复项,那么包括DISTINCT只是隐藏问题(再次使用其他处理).最好发现问题并修复你的查询...它会以这种方式运行得更快.


Ran*_*der 5

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


Jos*_*ama 5

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

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

什么是僵局?

  • AFAIK,该术语仅适用于MySQL和SQL Server (4认同)
  • 琐事:SQL标准中没有指定索引的整个概念,包括语法和术语!这是一个实现细节.令人惊讶的是,供应商之间存在着相似之处. (3认同)

HLG*_*GEM 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'
Run Code Online (Sandbox Code Playgroud)

  • 我可以告诉你它们有什么相同之处:它们都有奇怪的逗号位置(我理解它的原因,但它需要一点时间习惯). (2认同)