SQL 中单引号与双引号的使用要求(严格区分)

SQL中单引号和双引号使用有严格区分:单引号用于包裹字符串、日期等数据值,必须使用且不能混用双引号;


双引号主要用于包裹含特殊字符、空格或保留关键字的对象名(表名、列名、别名),在Oracle中还可保留对象名大小写。


单引号内如需使用单引号需用两个单引号转义。


不同数据库对双引号处理略有差异,建议统一使用单引号处理数据值,仅在必要时使用双引号处理对象名,以保持SQL语句的规范性和可移植性。


SQL中单引号与双引号的使用要求

在 Oracle / MySQL / SQL Server 等主流数据库中,单引号和双引号有严格区别,不能混用。


一、核心规则

符号 用途 说明
单引号 '' 包裹字符串、日期、字符型数据 必须使用,不能用双引号替代
双引号 "" 包裹对象名(表名、列名、别名) 主要用于区分大小写、特殊字符或关键字

二、单引号的使用(必须掌握)

1. 字符串值必须用单引号

sql

复制代码
-- ✅ 正确
SELECT * FROM EMP WHERE ENAME = 'SMITH';
SELECT * FROM EMP WHERE JOB = 'CLERK';

-- ❌ 错误(双引号包裹字符串)
SELECT * FROM EMP WHERE ENAME = "SMITH";  -- Oracle报错

2. 日期比较时,字符串格式日期用单引号

sql

复制代码
-- ✅ 正确
WHERE TO_CHAR(HIREDATE, 'YYYY') = '1981';
WHERE HIREDATE < TO_DATE('19810501', 'YYYYMMDD');

-- ❌ 错误
WHERE TO_CHAR(HIREDATE, 'YYYY') = 1981;   -- 类型不匹配(虽然可能隐式转换)

3. 单引号内的单引号需要转义(两个单引号表示一个)

sql

复制代码
-- 查询名字中包含单引号的员工,例如 O'Brian
SELECT * FROM EMP WHERE ENAME = 'O''Brian';
--                                ↑↑ 两个单引号表示一个单引号

三、双引号的使用(特定场景)

1. 别名包含空格或特殊字符时

sql

复制代码
-- ✅ 双引号包裹含空格的别名
SELECT ENAME AS "Employee Name" FROM EMP;

-- ✅ 双引号包裹中文别名(某些数据库需要)
SELECT ENAME AS "姓名", SAL AS "薪资" FROM EMP;

-- ❌ 不加双引号会报错
SELECT ENAME AS Employee Name FROM EMP;  -- 空格导致语法错误

2. 对象名区分大小写(Oracle 特殊要求)

Oracle 默认将对象名转为大写,使用双引号可以保留原始大小写:

sql

复制代码
-- 创建时使用双引号保留小写
CREATE TABLE "myTable" (id NUMBER);

-- 查询时必须使用双引号且大小写匹配
SELECT * FROM "myTable";   -- ✅ 正确
SELECT * FROM myTable;     -- ❌ 错误,Oracle 会找 MYTABLE

3. 使用保留关键字作为对象名

sql

复制代码
-- 使用双引号包裹关键字
SELECT * FROM "USER" WHERE "ROWNUM" < 10;

四、对比总结表

场景 正确用法 错误示例
字符串值 'SMITH' "SMITH" ❌
日期字符串 '1981-05-01' "1981-05-01" ❌
普通别名 AS 姓名 或 AS "姓名" 无特殊要求
含空格别名 AS "Employee Name" AS Employee Name ❌
中文别名 AS "姓名"(推荐) AS 姓名(部分数据库可用)
表名/列名 一般不用引号 特殊场景才用双引号

五、你作业中的相关错误

第10题的问题:

sql

复制代码
-- 您的写法(可能报错)
ORDER BY ename asc,年薪 desc;

-- ✅ 正确写法(加双引号)
ORDER BY ename ASC, "年薪" DESC;

-- ✅ 或避免使用中文别名排序
ORDER BY ename ASC, (sal + NVL(comm,0)) * 12 DESC;

六、快速记忆口诀

字符串用单引号,对象名用双引号
单引号里套单引号,两个单引号少不了
双引号别乱用,大小写空格关键字才用到


七、各数据库差异说明

数据库 双引号行为 单引号行为
Oracle 区分大小写对象名 标准用法
MySQL 默认不区分,需配置 标准用法(" 也可用 sql_mode 控制)
SQL Server 区分大小写(取决于排序规则) 标准用法
PostgreSQL 严格区分大小写 标准用法

最佳实践:统一使用单引号包裹字符串和日期,尽量避免使用双引号(除非必要),保持SQL简洁可移植。

相关推荐
Elastic 中国社区官方博客27 分钟前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
Seraphina361 小时前
DVWA(SQL Injection-High,XSS Reflected-Medium,XSS Stored-Medium)
数据库·经验分享·sql·网络安全·xss
2501_933670792 小时前
2027风控策略岗秋招准备:SQL、Excel、建模的优先级与项目路径
人工智能·sql·excel
其实防守也摸鱼3 小时前
网安自测题:掌握核心知识点的实用练习
linux·运维·服务器·前端·数据库·sql·xss
Shadow(⊙o⊙)3 小时前
MySQL C/C++链接MySQL使用
数据库·sql·mysql
Shadow(⊙o⊙)3 小时前
mysql为创建普通用户并创建库赋权
数据库·sql·mysql
Seraphina3613 小时前
SQLI-labs(一)黑盒全流程
sql·安全·web安全
做运维的阿瑞18 小时前
多表查询基础:INNER JOIN、LEFT JOIN、RIGHT JOIN
数据库·sql·mysql·算法
Seraphina3619 小时前
DVWA(SQL注入-low,medium,XSS反射-low)
前端·数据库·笔记·sql·网络安全·web·xss
韩曙亮1 天前
【JavaEE】MyBatis 基本用法 ⑤ ( 单条件查询 | 多条件查询 | 多条件动态查询 | 单条件动态查询 )
java·sql·java-ee·mybatis·mapper·sql映射