有什么问题可以测试程序员的SQL知识?[关闭]


14

有什么问题可以测试程序员的SQL知识?这个问题的答案是什么?缺乏正确答案的时间可能意味着您理解与该问题相关的概念?

GOOGLED: sql挑战


2
我肯定会举一个真实的例子,并要求编写一个复杂的查询。例如,如果您有购买表,则要求选择最近10年中最赚钱的月份。但是,由于您也会询问问题和答案,所以这可能意味着您不是专家,也无法判断。在这种情况下,您可以尝试一些第三方测试服务,至少作为面试之前的初始筛选器。我会建议tests4geeks.com。他们有SQL测试。
Dhaval Patel 2015年

Answers:


20

这取决于您希望它有多困难。另外,我也不太警惕给您答案,因为大多数SQL问题都有多种可接受的做事方式,还有一些以草率的方式解决SQL问题的方式会导致其他问题。对答案进行“评分”的人绝对需要能够自己解决问题。

就是说,我想出了一些建议。

极其简单的级别:
给一个雇员表,其中包含EmpID,FirstName,Lastname,HireDate和TerminationDate列:
编写查询以返回所有仍在该公司工作的雇员,其姓氏以“ Smith”开头,按姓氏和名字排序。

轻松级别
给定上面的Employee表,再加上带有EmpID列的新表“ AnnualReviews”和ReviewDate:
编写查询以返回从未进行过按HireDate排序的所有员工的查询。

中级 给定上面的雇员表,写一个查询来计算仍在公司工作的最老员工和最老员工的差额(天)?

困难级别
给定上面的雇员表,编写查询以计算公司没有雇用或解雇任何人所经历的最长期限(以天为单位)。

更难的级别
再次使用相同的表,编写一个查询,该查询返回每个员工,并且每行/每个雇员都包括在任职期间和达到最大值的第一个日期为公司工作的最大雇员数。不使用游标的加分。


很好,回答-就像问题的演变一样。为什么提出问题的人需要能够回答问题?为什么不只是基于输出和运行时编写单元测试?另外,您会说如何逐渐掌握SQL概念而需要花费的连接周数,这将使普通程序员达到您给出的最困难的水平?您是否还相信程序员能够回答您提出的最难的问题,就能有效解决绝大多数与SQL相关的任务?
错误

3
我希望询问者(或至少是“评分者”)能够回答这些问题的原因是,该方法可以告诉您尽可能多的结果。我还担心非技术面试官会预先写好答案,而不接受其他可能正确的答案(卡上写着“ Moop”)。
JohnFx 2010年

至于这些问题是否表明了解决绝大多数SQL相关任务的能力。如果他们的工作是写查询,也许是这样。如果希望他们管理数据库服务器,则需要提出特定的问题。
JohnFx 2010年

感谢您的澄清,在这种情况下,非技术面试官不是一个人,而是一个系统,因此不是单元测试和运行时。显然,系统不是在编写或阅读代码,人类是在写代码,但是世界上有那么多的程序员,而我认为将它们在现场的需求充其量是有限的。猜猜一个人是否通过了测试,但认为他们是对的,因此可以始终将其标记为正确。
失误

是的,问题的目标对象是程序员,而不是数据库管理员。
错误

4

我通常只接受数据专家的面试,所以我的问题往往很难。但是,对于要编写SQL的任何人,我需要做的一件事是了解联接,以及何时使用左联接与内部联接。任何不了解的人都不会以任何形式查询数据库。

我要做的另一件事是确保他们了解如何执行GROUP BY和使用Aggregate函数。

UNION和UNION ALL之间的差异消除了我工作中的许多差劲候选人。


2

我会问“为什么以及为什么要清除用户将在SQL查询中使用的输入值?”

这是必要的,以防止SQL注入,并能回答这个问题,需要有关SQL语法和命令(如良好的知识SELECTUPDATEDROPDELETE,等),以及如何将这些可以通过使用SQL注释来规避打破查询注入恶性用户可能希望做的事情。


1
答案不是:永远不要清理输入,使用准备好的语句吗?
凯文·克莱恩

@Emmad Kareem,任何无法回答的人都不应编写SQL。
HLGEM 2011年

@gablin,我真的不明白为什么会这样。你能解释一下吗?有几本SQL书籍讨论了这个主题?
NoChance 2011年

2

我帮助开发了针对数据库程序员的技术测试。问题是我认为很基本​​的问题:为给定的表结构编写CREATE TABLE语句;做一些简单的查询;等等

大部分自称SQL专家的求职者都没有通过测试。有人说,尽管他已经从事SQL开发多年,但他从未写过CREATE TABLE语句,因为GUI帮了他。

我们在其他技术测试中也有类似的经验。对于Windows支持人员,这些任务类似于“创建域用户”,“添加打印机”,“更改文件的权限”。大多数人无法完成这些任务,尤其是在压力下。我们认为,即使您能做简单的事情,您也可能会胜任。


1
恐怕我在使用GUI的开发人员方面。您可以花费整个职业生涯而无需定期编写CREATE TABLE脚本。许多人在CASE工具中开发数据模型,这些模型会自动为您生成DDL。总的来说,我回避任何主要依靠记忆语法的测试,而推荐那些对涉及的问题有更广泛理解的测试
cjmUK 2011年

+1 @Barry Brown:我同意,这很有趣。
错误

0

如果您想问更多开放性问题:询问有关DATE,DATETIME ...数据类型的常规问题。询问不同供应商实现/产品之间的差异。谈论命令行工具,大容量装载器,漂亮的打印机...也许您可以在面试中学到新的技巧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.