我正在经历Questions every good .Net developer should be able to answer并且对这个问题的内容和方法印象深刻,所以本着同样的精神,我正在向Database / SQL Developer提出这个问题。
您认为好的数据库/ SQL程序员能够回答哪些问题?
答案 0 :(得分:31)
不同类型的JOIN:
见Jeff Atwood的Visual Explanation of JOINs
什么是索引以及它如何帮助您的数据库?
有哪些数据类型以及何时使用哪些数据?
答案 1 :(得分:28)
my answer here的转载,作为主题的一般指导原则。
SELECT
表格中的列COUNT
,SUM
,MAX
/ MIN
DISTINCT
,GROUP BY
,HAVING
JOIN
s,ANSI-89和ANSI-92语法UNION
vs UNION ALL
NULL
处理:COALESCE
&原生NULL处理IN
,EXISTS
和内嵌视图WITH
语法:子查询Factoring / CTE COMMIT
,ROLLBACK
,错误处理答案 2 :(得分:12)
以下是一些:
答案 3 :(得分:8)
我已经给出了这个答案,因为Erwin Smout发布了answer这是错误的,它突出显示可能需要专门防范它。
欧文建议:“为什么每个SELECT总是包含DISTINCT?”
更合适的问题是:如果有人声称:“每个SELECT总是包含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)
还有以下特定于平台(SQL Server)的问题:
答案 16 :(得分:1)
explain plan
做了什么以及如何解释从中得到的结果。
答案 17 :(得分:1)
举一个更适合使用denomralization的例子。
(我喜欢这个,因为人们会大学毕业,希望把所有东西都放到第3范围内)
答案 18 :(得分:0)
此区域可能会对数据库的性能和安全性产生巨大影响。弄错了,你可能会陷入痛苦的世界。
因为规则总是有例外:)
答案 19 :(得分:0)
答案 20 :(得分:0)
答案 21 :(得分:-2)
“为什么每个SELECT总是包含DISTINCT?”