多年来,我注意到,在编写 SQL 语句时(至少在我最常用的驱动程序中,如 SQL Server 或 SQL Developer),无论是大写还是小写,对于保留字和表名和列名,它的工作原理都是一样的.
例如,基于以下 SQL 语句:
SELECT
A.ColumnaA, A.ColumnaB, B.ColumnaC
FROM TablaA AS A
INNER JOIN TablaB B
ON A.ColumnaA = B.ColumnaA
WHERE B.ColumnaB = 123
AND A.ColumnaC = 'ABC'
如果写成小写:
select
a.columnaa, a.columnab, b.columnac
from tablaa as a
inner join tablab b
on a.columnaa = b.columnaa
where b.columnab = 123
and a.columnac = 'abc'
或者如果它是用大写字母写的:
SELECT
A.COLUMNAA, A.COLUMNAB, B.COLUMNAC
FROM TABLAA AS A
INNER JOIN TABLAB B
ON A.COLUMNAA = B.COLUMNAA
WHERE B.COLUMNAB = 123
AND A.COLUMNAC = 'ABC'
不会产生错误,不像其他语言完全限制使用保留字和变量名。
但是,理想的情况是始终以大写字母编写保留字,并将表或列的名称留给程序员考虑。
甚至使用Poor Man's T-SQL Formatter plugin for Notepad++格式化保留字,将它们放在大写中并识别执行的查询(一个很棒的插件)。
虽然处理程序在使用大写或小写时没有标记任何错误,但我主要有两个问题:
- 为什么键入大写或小写的 SQL 语句不会引发错误?
- 为什么首选或推荐大写?
为什么键入大写或小写的 SQL 语句不会引发错误?
有区分大小写的编程语言(区分大小写或“区分大小写”),也有不区分大小写的编程语言(不区分大小写)。
SQL 是保留字不区分大小写的语言。因此,当解析语句时,不会抛出任何错误。
SELECT
例如,输入orselect
或无关紧要sELect
,它们都将被解释为相同的。突出显示“保留字”部分很重要,因为根据所使用的数据库引擎、数据库所在的操作系统或查询的格式,是的,表名或列名可能会有所不同。例如:
在某些平台上,在 MySQL 中,表名的大小写必须在同一语句中保持一致,否则会发生故障(source)。以下语句将显示错误:
在 MySQL 中,数据库和表名在区分大小写的操作系统上是区分大小写的。那是因为它们与(源)文件系统上的目录/文件相关联。
在 Oracle 中,表名和列名可以强制区分大小写,方法是用双引号将它们括起来(Oracle 源代码和SOen)。所以这两个句子会有所不同:
为什么首选或推荐大写?
这是一种区分保留字和非保留字的方法,便于识别表、列等的名称。
在开发sql标准时,保留字在小写和大写中都有效是一个决定,所有基于sql的数据库都实现了它,至少我所知道的。
另一方面,对于表和列的名称,情况并非总是如此,尽管它具体取决于每个数据库,但大多数 sql 数据库都有一个选项,允许您选择是否根据字体。例如,对于windows系统,默认选项是它不影响它是大写还是小写,而在linux系统中,默认选项是它确实区分大小写。
另一个标志 sql 标准的方面是,当使用引号来分隔表和列的名称时,表明这个特定的名称必须区分大小写。
例如:
指定表的名称必须完全是“TaBlA”它不能是“table”,也不能是“TABLE”或任何与指定不同的组合,尽管在特定数据库中可能不存在此特征已实现,例如,此选项在 PostgreSQL 中实现,但在 mySQL 中未实现。
至于保留字使用大写字母,这只是一种约定,这样在阅读sql语句时更容易识别它们,并将保留字与名称分开。
讨论关键字和名称的 ANSI99 版本的 sql 的一部分。