【发布时间】:2010-12-31 19:53:29
【问题描述】:
SQL中单引号和双引号有什么区别?
【问题讨论】:
SQL中单引号和双引号有什么区别?
【问题讨论】:
单引号用于表示 SQL 中字符串的开始和结束。双引号通常不会在 SQL 中使用,但会因数据库而异。
坚持使用单引号。
无论如何,这是主要用途。您可以为列别名使用单引号 — 您希望在应用程序代码中引用的列名不是数据库中实际调用的列名。例如:PRODUCT.id 与 product_id 一样可读性更强,因此您可以使用以下任意一种:
SELECT PRODUCT.id AS product_idSELECT PRODUCT.id 'product_id'在 Oracle、SQL Server、MySQL 中都可以工作……但我知道有些人说 TOAD IDE 在使用单引号方法时似乎有些麻烦。
当列别名包含空格字符时,您必须使用单引号,例如,product id,但不建议列别名超过一个单词。
【讨论】:
SELECT * FROM USERS 'Users' 在 SQL Server 中不起作用,但 SELECT * FROM USERS "Users" 可以。
SELECT PRODUCT.id 'product_id' 将在 Oracle 中工作。单引号仅用于字符文字。它们不能用于(标准)SQL 中的标识符(尽管一些 DBMS 在引用标识符时忽略了 SQL 标准)
一个简单的规则让我们记住在什么情况下使用什么:
例子:
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
区别在于它们的用法。单引号主要用于在 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;
您也可以将相同的大小写应用于公用表表达式。
【讨论】:
要记住的两件事:
Single Qutoes(') : String 或 Text
select * from employees where room_name = 'RobinCapRed';
其中 RobinCapRed 是 字符串 或 文本。
双引号("): 列名或表名
select "first_name" from "employees";
其中 first_Name 是 employees 表
中的列名【讨论】: