什么是“高级”SQL?

时间:2010-01-13 03:14:06

标签: sql database

查看需要“高级SQL”的职位描述。我可以和任何人一起编写基本查询,并且在专业环境中使用MySQL数据库,但是如果我被录用,我将从这些工作中得到什么?高级SQL的示例是什么?我在SQL noob到SQL master的范围内的位置是什么?

11 个答案:

答案 0 :(得分:105)

基本


  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,错误处理

答案 1 :(得分:24)

职位空缺列表的其余部分可以提供上下文,以便更好地猜测"Advanced SQL"可能包含的内容。

我不同意评论和回复,表明理解JOIN和汇总查询是“高级”技能;我担心,很多雇主会认为这是相当基本的。这是一个粗略的猜测,因为“高级”可能意味着什么。

在过去的几年里,RDBMS领域出现了一些“糟糕”的新东西!

“高级SQL”要求可能暗示知识以及可能熟练掌握一些新概念,例如:

  • CTE(通用表格表达式)
  • UDF(用户定义的函数)
  • 全文搜索扩展/集成
  • 使用新分区方案,过滤索引,稀疏列进行性能调整......)
  • 新数据类型(例如:GIS /空间或分层)
  • XML支持/集成
  • LINQ
  • 还有一些......(顺便说一句,上面的列表有点以MSSQL为中心,但在大多数其他DBMS平台上都观察到类似的演变)。

虽然了解新功能的专业(和缺点)是任何“高级SQL”从业者的重要任务,但旧的“高级基础”可能也被视为“高级”的一部分

  • 触发器和存储过程
  • 游标(何时使用,如何避免......)
  • 设计专业知识:定义表格,索引内容,索引类型
  • 一般性能调优专业知识
  • 查询优化(阅读查询计划,了解内在缓慢等等)。
  • 程序SQL
  • ...

注意:以上内容侧重于与编程/主角相关的技能。 “高级SQL”还可以指具有管理角色的经验(复制,备份,硬件布局,用户管理......)。考虑一下,一个认真的程序员也应该对这种做法有点熟悉。

修改:LuckyLindy发布了一条我发现非常有见地的评论。它表明,“高级”可能实际上具有不同的目的,而不是暗示上面列出的大多数类别中的公平专家级别...... 我在这里重复这一评论,以提高其可见度。

我认为很多公司都发布了高级SQL,因为他们已经厌倦了找一个说“我是SQL专家”并且无法整理3个表外连接的人。我在招聘信息中发布了类似的内容,我的期望仅仅是候选人不需要经常来找我写SQL的帮助。(LuckyLindy评论)

答案 2 :(得分:10)

我希望:

  • 存储过程创建和使用
  • 加入(内部和外部)以及如何正确使用GROUP BY
  • 绩效评估/调整
  • 了解查询中有效(和低效)的处理方式(了解某些事物如何影响性能,例如在WHERE子句中使用函数)
  • 动态SQL和游标知识(和IMO应该使用它们几次)
  • 了解架构设计,索引和参照完整性

答案 3 :(得分:10)

结帐SQL For Smarties。我认为我也非常善于使用SQL,直到我读完那本书......深入探讨我在其他地方看不到的事情(IE第3和第4正常形式之间的差异,Boyce Codd Normal表格等)...

答案 4 :(得分:10)

我认为最好以一个例子突出显示。如果您觉得可以使用很少/没有参考资料快速编写以下SQL语句,那么我猜您可能满足其高级SQL要求:

DECLARE @date DATETIME
SELECT @date = '10/31/09'

SELECT
      t1.EmpName,
      t1.Region,
      t1.TourStartDate,
      t1.TourEndDate,
      t1.FOrdDate,
      FOrdType  = MAX(CASE WHEN o.OrderDate = t1.FOrdDate THEN o.OrderType  ELSE NULL END),
      FOrdTotal = MAX(CASE WHEN o.OrderDate = t1.FOrdDate THEN o.OrderTotal ELSE NULL END),
      t1.LOrdDate,
      LOrdType  = MAX(CASE WHEN o.OrderDate = t1.LOrdDate THEN o.OrderType  ELSE NULL END),
      LOrdTotal = MAX(CASE WHEN o.OrderDate = t1.LOrdDate THEN o.OrderTotal ELSE NULL END)
  FROM 
      (--Derived table t1 returns the tourdates, and the order dates
      SELECT
            e.EmpId,
            e.EmpName,
            et.Region,
            et.TourStartDate,
            et.TourEndDate,
            FOrdDate = MIN(o.OrderDate),
            LOrdDate = MAX(o.OrderDate)
        FROM #Employees e INNER JOIN #EmpTours et
          ON e.EmpId = et.EmpId INNER JOIN #Orders o
          ON e.EmpId = o.EmpId
       WHERE et.TourStartDate <= @date
         AND (et.TourEndDate > = @date OR et.TourEndDate IS NULL)
         AND o.OrderDate BETWEEN et.TourStartDate AND @date
       GROUP BY e.EmpId,e.EmpName,et.Region,et.TourStartDate,et.TourEndDate
      ) t1 INNER JOIN #Orders o
    ON t1.EmpId = o.EmpId
   AND (t1.FOrdDate = o.OrderDate OR t1.LOrdDate = o.OrderDate)
 GROUP BY t1.EmpName,t1.Region,t1.TourStartDate,t1.TourEndDate,t1.FOrdDate,t1.LOrdDate

(source of query)

说实话,这是一个相对简单的查询 - 只是一些内部联接和子查询,以及一些常见的关键字(max,min,case)。

答案 5 :(得分:2)

一些“高级”功能

  • 递归查询
  • 窗口/排名功能
  • pivot and unpivot
  • 性能调整

答案 6 :(得分:1)

SELECT ... HAVING ...是一个好的开始。似乎没有多少开发人员了解如何使用它。

答案 7 :(得分:1)

我认为子查询和PIVOT符合资格,以及多个联接,工会等。

答案 8 :(得分:1)

性能调整,创建索引,存储过程等。

“高级”意味着与众不同的东西。我想这种类型的东西意味着每个工作海报都有所不同。

答案 9 :(得分:1)

当你看到他们在要求中列出时,他们倾向于包括:

  • 浏览
  • 存储过程
  • 用户定义的功能
  • 触发器
  • 有时是游标

内部和外部联接是必须的,但我很少在需求中看到它。令人惊讶的是,有多少所谓的数据库专业人员无法理解简单的外部联接。

答案 10 :(得分:1)

在我以前的工作中,我们进行了技术测试,要求所有候选人参加。 10个问题,花了大约一个小时。尽管如此,90%的失败可能会被筛选掉,因为他们无法编写INNER JOIN语句。甚至不是外在的。

我认为这是涉及SQL的任何工作描述的先决条件,并且在掌握之前会一直保持独立。从那里开始,与他们交谈 - 任何关于他们实际寻找什么的进一步信息,最糟糕的情况,都是一个有用的清单,作为你职业发展的一部分。