【问题标题】:Why should I capitalize my SQL keywords? [duplicate]为什么我应该将我的 SQL 关键字大写? [复制]
【发布时间】:2009-03-03 21:09:17
【问题描述】:

可能重复:
Is there a good reason to use upper case for T-SQL keywords?

简单的问题。我个人发现一串小写字符比一串大写字符更具可读性。一些旧的/流行的 SQL 是否区分大小写?

供参考:

select
    this.Column1,
    case when this.Column2 is null then 0 else this.Column2 end
from dbo.SomeTable this
    inner join dbo.AnotherTable another on this.id = another.id
where
    this.Price > 100

对比

SELECT
    this.Column1,
    CASE WHEN this.Column2 IS NULL THEN 0 ELSE this.Column2 END
FROM dbo.SomeTable this
    INNER JOIN dbo.AnotherTable another ON this.id = another.id
WHERE
    this.Price > 100

前者对我来说似乎更具可读性,但我更经常看到后者。

【问题讨论】:

  • 我认为让您的关键字脱颖而出并不重要。在 SQL 中,它们以可预测的顺序出现,并且倾向于分隔事物列表。请参阅下面的答案。
  • 我认为这很重要。这与您在文本编辑器中使用颜色编码的原因相同:视觉上的区别可以提高可读性。例如,如果我不担心我处理的是什么类型,我会下意识地忽略蓝色文本。
  • @Mitch:不,我们只是在回答我们从未见过的问题之前不进行搜索。你?唯一的解决方案是让常客提前用“可能重复”的评论警告每个人,这样人们就知道要继续前进。
  • @Stefan Monov:是的,我愿意。鉴于它很容易做到,几乎没有理由不这样做。
  • 附带说明,我发现输入大写关键字会随着时间的推移而变得很累。我每周输入数百个查询,小写字母更容易。对于其他开发人员可能必须阅读和修改的文档和 SQL,大写对可读性非常重要。

标签: sql formatting readability


【解决方案1】:

我要补充一点,我还没有看到有人提出:

如果您在编程语言中使用 ad hoc SQL,您将在字符串中包含大量 SQL。例如:

insertStatement = "INSERT INTO Customers (FirstName, LastName) VALUES ('Jane','Smith')"

在这种情况下,语法着色可能不起作用,因此大写有助于提高可读性。

【讨论】:

  • FWIW IntelliJ (probably & friends) 有语言注入和语法颜色(等等)代码中的 SQL 字符串(以及其他嵌入式语言——似乎他们采用了 html/css/js 的概念在一个文件中并对其进行概括)
  • 恕我直言,这是使用所有大写关键字的唯一正当理由(除了个人喜好)。
  • 同样,这里有 2 个选项:1)没有适当缩进的小型临时查询(IMO,这是错误的),它仍然不需要任何大写; 2) 在您选择的 IDE 中预先编写的长多行查询,带有语法突出显示。
【解决方案2】:

我喜欢在 SQL 关键字上使用大写字母。我想我的思绪会跳过它们,因为它们真的很笨拙,而是专注于重要的事情。当你这样布局时,块状的单词会分开重要的部分:

SELECT
  s.name,
  m.eyes,
  m.foo
FROM
  muppets m,
  muppet_shows ms,
  shows s
WHERE
  m.name = 'Gonzo' AND
  m.muppetId = ms.muppetId AND
  ms.showId = s.showId

(缺少 ANSI 连接是另一个问题的问题。)

有一项心理学研究表明,由于单词的轮廓更加独特,小写字母比大写字母更容易阅读。但是,这种效果可能会随着大量阅读大写字母的练习而消失。

【讨论】:

    【解决方案3】:

    代码具有 SQL 语句所缺少的标点符号。有圆点、括号和分号来帮助你把事情分开。代码也有行。尽管您可以在多条物理行上编写 SQL 语句,但它是一条语句,一条“代码行”。

    如果我要在没有任何正常标点符号的情况下编写英文文本,如果我将新子句的开头大写,这可能会更容易,这样它会更容易分辨一个结束和下一个开始的地方,否则这么长的一段文本会可能很难阅读不是 id 建议它现在很容易阅读但至少我认为你可以遵循它

    【讨论】:

    • Sql语句不是一行代码。它更像是过程语言中的过程,而不是语句。
    • ruby、haskell 和 python 有多少标点符号?
    • 英语比不强调这些词的时候要难读得多。我不假思索地在脑海中添加标点符号没有问题,所以这个例子可能不是一个很好的例子。 :)
    • 我无法与 Ruby 和 Haskell 交流,但 Python 使用语义上重要的缩进,而许多其他语言使用标点符号。 SQL 既没有标点符号,也没有重要的缩进,所以只剩下大写。顺便说一句,根据我的经验,由于其自​​由形式的性质,Python 也更难让 IDE 准确地进行着色。
    【解决方案4】:

    来自 Joe Celko 的“SQL 编程风格”(ISBN 978-0120887972):

    规则:

    保留字大写。

    理由:

    大写单词被视为一个单位, 而不是被解读为一系列 音节或字母。眼睛被画了 对他们,他们采取行动宣布一个 陈述或条款。这就是为什么 标题和警告标志有效。

    印刷者使用术语 bouma 来表示 一个词的形状。该术语出现 在 Paul Saenger 的书中(1975 年)。想象 长方形卡片上的每个字母 正好适合它,这样你就可以看到 上升器、下降器和基线 字母作为各种“乐高积木” 拼在一起组成一个词。

    大写单词的bouma是 总是一个简单的、密集的矩形,并且 很容易从一个领域中挑选出来 小写单词。

    我觉得引人注目的是,这是唯一一本关于 SQL 启发式的书,由一位著名的 SQL 作品作者撰写。那么这是绝对真理吗?谁知道。这听起来很合理,我至少可以向团队成员指出规则并告诉他们遵守它(如果他们想责怪任何人,我会给他们 Celko 的电子邮件地址:)

    【讨论】:

    • 是的,但是您可以将相同的想法应用到编程语言中,想象一下这样的 js 函数:LET echoMessage = FUNCTION(msg){ ALERT(msg); }
    • @santiagoarizti 是的,但是您建议的格式是基于市场上唯一的 js 启发式书籍并且由 js 世界的知名作者撰写的吗?
    • 从现在开始我将把我所有的 JS 都写成大写,并制作一个 Babel 插件来转换它。谢谢。
    • 嗯,对于以英语为第二语言的人来说,所有大写单词都太不同而无法识别。我们需要逐个字符转换成小写字母才能识别单词。
    • @LouisYang 我不知道你从哪里得到这个声明。英语是我的第二语言,我发现在使用大写字母时很容易区分关键字和变量,而且阅读起来也没有问题。
    【解决方案5】:

    我同意你的看法 - 对我来说,大写只是 SHOUTING。

    我让我的 IDE 通过语法高亮处理使关键字脱颖而出。

    我不知道它的历史原因,但现在这只是一种主观偏好。

    编辑以进一步阐明我的推理:

    您会在任何其他现代语言中大写您的关键字吗?编造的例子:

    USING (EditForm form = NEW EditForm()) {
        IF (form.ShowDialog() == DialogResult.OK) {
           IF ( form.EditedThing == null ) {
              THROW NEW Exception("No thing!");
           }
           RETURN form.EditedThing;
        } ELSE {
           RETURN null;
        }
    }              
    

    啊!

    无论如何,从投票中可以看出哪种风格更受欢迎,但我想我们都同意这只是个人喜好。

    【讨论】:

    • 说真的。这个例子可能是必要的,但它有点恶心。
    • 我认为这是 COBOL 的东西 - 大写的人通常超过 40 岁,并且只编程过 COBOL 和 SQL。
    • 这是一个很好的例子,说明为什么不这样做。尽管我通常将我的 SQL 关键字大写,但看到这确实让我感到畏缩。 SQL 和 C# 之间的不同之处在于,C# 有一个非常明确的结构,带有大括号和标准缩进,而 SQL 没有。在没有这种结构的情况下,大写字母可能会提供某种形式的视觉信息。
    • 不同的语言有不同的样式约定。
    • 这是一个很好的例子,说明为什么 SQL 确实 需要大写关键字:因为它使用这些关键字作为大多数句法提示。尝试用单词替换几乎所有的标点符号,使其全部小写,然后看看语法是多么难以用肉眼解析。
    【解决方案6】:

    我认为后者更具可读性。您可以轻松地将关键字与表名和列名等分开。

    【讨论】:

    • 也许这只是习惯,但我发现第二个版本更容易理解。
    • 我不确定这是否更具可读性:)
    • 我觉得有趣的是,SO 在大写时不会做同样的代码高亮。
    • @Learning THE fantastic.words WHICH ARE yours STAND OUT as_compared_to THE few AND often_patterned/repeated SQL WORDS 换句话说,大写约定的好处在于 SQL 不可变关键字很容易识别,并且看起来与您自己的标识符和立即值分开/不同。这当然不那么重要了,现在 SQL IDE / 编辑器中无处不在的语法高亮显示。这就是说,虽然这种约定对于 DML/DDL(例如 SELECT/INSERT 查询等)来说是一件好事,但它可以使 SQL 的过程扩展看起来很重,就像在存储过程中一样。
    • BILLY MAYS 在这里,为您带来结构化查询语言!
    【解决方案7】:

    我更喜欢小写关键字。 Management Studio 对关键字进行颜色编码,因此将它们与标识符区分开来没有问题。

    而且大写的关键字感觉...好吧... BASIC... ;)

    -“八十年代的 BASIC、COBOL 和 FORTRAN 电话,他们想要他们的大写关键字回来。” ;)

    【讨论】:

      【解决方案8】:

      更糟糕的是,由于我办公室的大多数开发人员都相信 sql 关键字的大写字母,所以我不得不更改为大写。多数规则。

      我相信小写字母更容易阅读,而且无论如何 sql 关键字都以蓝色突出显示。

      在辉煌的日子里,关键字是大写的,因为我们是在绿屏上开发的!

      问题是:如果我们不把c#关键字写成大写那为什么我必须把sql关键字写成大写呢?

      就像其他人所说的那样 - 首都在呼喊!

      【讨论】:

        【解决方案9】:

        主要是传统。为了便于阅读,我们喜欢将关键字和我们的命名空间名称分开,并且由于在许多 DBMS 中表和列名称是区分大小写的,我们不能将它们大写,所以我们将关键字大写。

        【讨论】:

        • MANY DBMS 使用区分大小写的表和列名称?我从来没有遇到过(但我 90% 的经验是 MSSQL 和 Oracle)
        • MSSQL 服务器或数据库可以设置为区分大小写的排序规则。是的,它非常烦人。但对于某些应用程序是必需的。
        • Sybase 服务器的名称默认区分大小写。
        • MySQL 也是如此,无论好坏(主要是坏:-),许多开发人员第一次接触 SQL 是通过 MySQL。
        • @JamesCurran 很高兴您不必处理 Postgres ...您可以使用引号绕过此问题,并且大多数 ORM 倾向于使用此功能,这意味着您会得到这样的垃圾...SELECT * FROM "MyTable" WHERE "MyField" = 'something';
        【解决方案10】:

        我将 SQL 大写以使其与宿主语言(现在主要是 C#)更加“对比”。

        这只是偏好和/或传统的问题……

        【讨论】:

          【解决方案11】:

          早在 80 年代,我习惯将数据库名称大写,并将 sql 关键字保留为小写。大多数作者的做法正好相反,将 SQL 关键字大写。最终,我开始跟着人群走。

          顺便提一下,在大多数已发布的 C、C++ 或 Java 代码 sn-ps 中,语言关键字总是小写的,一些解析器甚至可能无法识别大写关键字.我看不出在 SQL 中使用与您在编程语言中使用的相反约定的充分理由,即使 SQL 嵌入在源代码中也是如此。

          我并不是要为数据库名称使用全部大写进行辩护。它实际上看起来有点像“喊”。还有更好的约定,比如在数据库名称中使用几个大写字母。 (“数据库名称”是指模式的名称、表等模式对象以及其他一些东西。)仅仅因为我在 80 年代这样做并不意味着我今天必须捍卫它。

          最后,“De gustibus non disputandum est”。

          【讨论】:

            【解决方案12】:

            我更喜欢对 SQL 中的关键字使用大写字母。

            是的,小写字母更具可读性,但对我来说,必须花额外的时间来扫描查询,这在大多数情况下都会对你有好处。一旦完成并经过测试,您应该很少再看到它(DAL、存储过程或任何会隐藏它的东西)。

            如果您是第一次阅读它,大写的 WHERE AND JOIN 会像他们应该的那样直接跳到您身上。

            【讨论】:

            • 谢谢,我觉得这个答案更有说服力。
            【解决方案13】:

            这里的一些 SQL 开发人员喜欢这样布局:

            SELECT s.name, m.eyes, m.foo
            FROM muppets m, muppet_shows ms, shows s 
            WHERE m.name = 'Gonzo' AND m.muppetId = ms.muppetId AND ms.showId = s.showId
            

            他们声称这与我自己使用的每行一个字段的方法不同,更易于阅读。

            【讨论】:

              【解决方案14】:

              这只是可读性的问题。帮助您快速区分 SQL 关键字。

              顺便说一句,这个问题已经回答了: Is SQL syntax case sensitive?

              【讨论】:

                【解决方案15】:

                这只是可读性的问题。对 SQL 关键字使用 UPPERCASE 有助于使脚本更易于理解。

                【讨论】:

                  【解决方案16】:

                  也许没什么,但我更喜欢在small caps 中排版SQL 关键字。这样一来,它们在大多数读者看来都是大写的,但它们与丑陋的 ALL CAPS 风格不同。

                  另一个优点是我可以将代码保持原样并以传统样式打印。 (我使用LaTeX 中的listings 包来获得漂亮的打印代码。)

                  【讨论】:

                  • 有趣。你知道任何带有小写字母的等宽字体吗?不仅所有大写字母都很难看,滥用时几乎难以阅读。
                  猜你喜欢
                  • 1970-01-01
                  • 2010-12-18
                  • 2010-10-01
                  • 2011-05-25
                  • 2019-10-11
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多