【问题标题】:Proper way to write a SQL syntax? [duplicate]编写 SQL 语法的正确方法? [复制]
【发布时间】:2013-12-08 07:52:14
【问题描述】:

这两个SQL 语法产生相同的结果,哪个更好用,为什么?

第一个:

SELECT c.Id,c.Name,s.Id,s.Name,s.ClassId 
FROM dbo.ClassSet c,dbo.StudentSet s WHERE c.Id=s.ClassId

第二个:

SELECT c.Id,c.Name,s.Id,s.Name,s.ClassId 
FROM dbo.ClassSet c JOIN dbo.StudentSet s ON c.Id=s.ClassId

【问题讨论】:

标签: sql


【解决方案1】:

第二个是因为它更具可读性。仅此而已。

【讨论】:

    【解决方案2】:
    SELECT c.Id,c.Name,s.Id,s.Name,s.ClassId FROM dbo.ClassSet c JOIN dbo.StudentSet s ON c.Id=s.ClassId
    

    毫无疑问,与您的第一个相比,上面的一个更好。在优先表中,“On”位于第二位,“Where”位于第四位

    但是对于更简单的查询,比如你不想像这样打破你的脑袋,对于项目级别的“JOIN”总是推荐

    【讨论】:

      【解决方案3】:

      第二个更好

      您加入第一个查询的方式被认为已过时。避免使用,,使用JOIN

      “就优先级而言,JOIN 的 ON 子句发生在 WHERE 子句之前。这允许 LEFT JOIN b ON a.id = b.id WHERE b.id IS NULL 之类的东西检查 b 中没有匹配行的情况。”

      "使用 , 符号类似于同时处理WHERE 和 ON 条件"

      在这里找到了有关它的详细信息,MySQL - SELECT, JOIN

      阅读有关 SQL 标准的更多信息

      http://en.wikipedia.org/wiki/SQL-92

      【讨论】:

      • 这是最接近的正确答案。以前的连接风格称为“SQL-89”风格,在 SQL-92 引入新风格之前的十多年里,它是唯一可用的方法。从那时起,新样式一直是标准的首选样式,并且因为它的可读性。大多数 SQL 产品仍支持旧样式,但也已弃用并计划在未来删除。新的 SQL 学生不应该学习/使用 SQL-89 样式连接,教授/教师也不应该教他们,因为雇主不太可能雇用使用它的人。
      • @RBarryYoung 我从来没有听说过旧样式已被弃用(或计划被弃用)。你能提供参考吗?
      • @ypercube:这是一个。我看看能不能找到更多的官方说法。我知道旧式外连接相等运算符(*= 等)已被某些供应商产品弃用或淘汰。
      • @RBarryYoung *= 从未出现在标准中。它只在 SQL-Server 中实现(也许是 Sybase?)
      • @ypercube:对,我忘了 Oracle 使用了 (+) = 语法,这也不是标准的。
      【解决方案4】:

      查看此链接Is a JOIN faster than a WHERE?

      @MehrdadAfshari 的回答

      理论上,不,它不应该更快。查询优化器 应该能够生成相同的执行计划。然而,有些 数据库引擎可以为其中之一生成更好的执行计划(不是 对于这样一个简单的查询,但对于足够复杂的查询,可能会发生)。 您应该测试两者并查看(在您的数据库引擎上)。

      【讨论】:

        猜你喜欢
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多