134

可能重复:
是否有充分的理由为 T-SQL 关键字使用大写?

简单的问题。我个人发现一串小写字符比一串大写字符更具可读性。一些旧的/流行的 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

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

4

16 回答 16

195

我同意你的看法——对我来说,大写只是在喊。

我让我的 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;
    }
}              

啊!

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

于 2009-03-03T21:15:09.150 回答
127

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

于 2009-03-03T21:11:12.780 回答
77

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

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

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

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

于 2011-07-30T00:06:43.340 回答
51

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

规则:

大写保留字。

理由:

大写单词被视为一个单元,而不是被视为一系列音节或字母。眼睛被他们吸引,他们采取行动宣布声明或条款。这就是标题和警告标志起作用的原因。

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

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

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

于 2010-07-19T09:37:39.510 回答
25

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

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

于 2009-03-04T03:33:02.627 回答
24

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

于 2009-03-03T21:13:35.940 回答
20

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

大写关键字感觉如此......好吧......基本......;)

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

于 2009-03-03T21:29:42.157 回答
7

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

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

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

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

就像别人说的那样——首都在喊!

于 2011-02-24T10:55:59.310 回答
5

我喜欢在 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 连接是另一个问题的问题。)

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

于 2009-03-04T02:57:52.087 回答
3

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

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

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

最后,“De gustibus non disputandum est”。

于 2009-03-04T06:29:56.227 回答
2

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

顺便说一句,这个问题已经回答了: SQL 语法是否区分大小写?

于 2009-03-03T21:14:05.753 回答
2

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

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

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

于 2009-03-03T21:14:23.553 回答
2

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

于 2009-03-04T03:22:59.437 回答
1

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

这只是一个偏好和/或传统的问题,真的......

于 2011-07-30T00:25:34.663 回答
0

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

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

于 2009-03-03T21:33:15.393 回答
0

这里的一些 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

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

于 2011-02-24T11:27:03.907 回答