单引号用于表示 SQL 中字符串的开始和结束。在 SQL 中通常不使用双引号,但这可能因数据库而异。
坚持使用单引号。
无论如何,这是主要用途。您可以为列别名使用单引号 — 您希望在应用程序代码中引用的列名与数据库中实际调用的列名不同。例如:PRODUCT.id
作为 product_id
的可读性更高,因此您可以使用以下任一种:
选择 PRODUCT.id 作为 product_id
选择 PRODUCT.id 'product_id'
在 Oracle、SQL Server、MySQL 中都可以工作……但我知道有些人说 TOAD IDE 似乎在使用单引号方法时会让人有些痛苦。
当列别名包含空格字符时,您必须使用单引号,例如 product id
,但不建议列别名包含多个单词。
一个简单的规则让我们记住在这种情况下使用什么:
[S] 单引号用于 [S] 字符串文字(日期文字也是字符串);
[D] 双引号用于 [D] 数据库标识符;
例子:
INSERT INTO "USERS" ("LOGIN", "PASSWORD", "DT_BIRTH") VALUES ('EDUARDO', '12345678', '1980-09-06');
在 MySQL 和 MariaDB 中,`(反引号)符号与 " 符号相同。请注意,您不能将 " 用于当您的 SQL_MODE
启用 ANSI_QUOTES
时的文字字符串。
单引号分隔字符串常量或日期/时间常量。
双引号分隔标识符,例如表名或列名。这通常仅在您的标识符不符合简单标识符的规则时才需要。
也可以看看:
不同的数据库是否使用不同的名称引用?
您可以让 MySQL 根据 ANSI 标准使用双引号:
SET GLOBAL SQL_MODE=ANSI_QUOTES
您可以让 Microsoft SQL Server 根据 ANSI 标准使用双引号:
SET QUOTED_IDENTIFIER ON
在 ANSI SQL 中,双引号引用对象名称(例如表),这允许它们包含不允许的字符,或者与保留字相同(避免这种情况,真的)。
单引号用于字符串。
然而,MySQL 忽略了这个标准(除非它的 SQL_MODE 改变了),并允许它们可互换地用于字符串。
此外,Sybase 和 Microsoft 还使用方括号来引用标识符。
所以它有点特定于供应商。
Postgres 和 IBM 等其他数据库实际上遵循 ansi 标准 :)
我使用这个助记符:
单引号用于字符串(一件事)
双引号用于表名和列名(两件事)
根据规范,这不是 100% 正确的,但这个助记符可以帮助我(人类)。
human being
与其他使用 SQL 的动物不同。 :D
要记住的两件事:
单引号('):字符串或文本
select * from employees where room_name = 'RobinCapRed';
其中 RobinCapRed 是字符串或文本。
双引号(“):列名或表名
select "first_name" from "employees";
其中 first_Name 是员工表中的列名
区别在于它们的用法。单引号主要用于在 WHERE、HAVING 以及一些内置 SQL 函数(如 CONCAT、STRPOS、POSITION 等)中引用字符串。
当您想使用中间有空格的别名时,您可以使用双引号来引用该别名。
例如
(select account_id,count(*) "count of" from orders group by 1)sub
这是一个订单表的子查询,其中 account_id 作为外键,我正在汇总该子查询以了解每个帐户下的订单数。在这里,出于目的,我给一列任何随机名称作为“计数”。
现在让我们编写一个外部查询来显示“count of”大于 20 的行。
select "count of" from
(select account_id,count(*) "count of" from orders group by 1)sub where "count of" >20;
您也可以将相同的大小写应用于公用表表达式。
SELECT * FROM USERS 'Users'
在 SQL Server 中不起作用,但SELECT * FROM USERS "Users"
可以。SELECT PRODUCT.id 'product_id'
将在 Oracle 中工作。单引号仅用于字符文字。它们不能用于(标准)SQL 中的标识符(尽管一些 DBMS 在引用标识符时忽略了 SQL 标准)