Oracle数据库开发规范篇「①」——SQL编写规范【上】(书写、表名、Select/insert、类型转换、NULL、LIKE)

梁敬彬梁敬弘兄弟出品

1. SQL编写规范

1.1 书写规范

  • 关键字使用大写:SELECT, FROM, WHERE, AND, OR等
  • 表和字段使用有意义的别名:提高可读性
  • 采用一致的缩进风格:使用空格保持格式一致
  • 子句分行显示:每个主要子句另起新行

✓ 推荐写法:

SELECT e.employee_id, 
       e.first_name, 
       e.last_name
FROM   employees e
WHERE  e.salary > 5000
AND    e.hire_date > SYSDATE - 365;

1.2 SQL中直接使用表名

  • 避免直接引用其他用户下的表:使用同义词(synonym)代替
  • 创建同义词时在设计文档中记录:保持项目文档完整性

✓ 推荐写法:

 -- 创建同义词
CREATE SYNONYM my_employees FOR hr.employees;

-- 使用同义词
SELECT employee_id, first_name
FROM   my_employees
WHERE  department_id = 10;

1.3 SELECT *语句及INSERT语句中的字段名

  • 避免使用SELECT *,尽量明确指定需要的字段列表
  • INSERT语句必须指定字段列表:防止表结构变更导致错误

✓ 推荐写法:

SELECT col_1,col_2,col_3
FROM t_name;

INSERT INTO t_name
(
  user_id,
  login_name
)
VALUES
(
v_user_id,
  v_login_name
);

1.4 INSERT…SELECT语句书写方法

  • 字段一一对应:保持源表和目标表字段对应关系
  • 每行保持固定字段数:提高可读性
  • 使用一致的缩进:左括号与关键字对齐,内容缩进

✓ 推荐写法:

INSERT INTO employees_backup 
(
  employee_id, first_name, last_name, email,
  phone_number, hire_date, job_id, salary
)
SELECT 
  employee_id, first_name, last_name, email,
  phone_number, hire_date, job_id, salary
FROM employees
WHERE department_id = 80;

1.5 避免隐式数据类型转换及字段操作

  • 确保条件两侧数据类型匹配:避免Oracle进行隐式转换
  • 避免在索引字段上使用函数或运算:保持索引有效性

✓ 正确的数据类型匹配:

-- 表t_name中的col_1为VARCHAR2(10)类型
SELECT col_1, col_2 
FROM   t_name
WHERE  col_1 = '1';  -- 使用字符串匹配VARCHAR2类型

✗ 不正确的数据类型匹配:

-- col_1为VARCHAR2类型,使用数字会导致隐式转换
SELECT col_1, col_2
FROM   t_name
WHERE  col_1 = 1;  -- 错误:隐式将数字1转为字符串'1'

1.6 NULL的使用

  • 使用IS NULL/IS NOT NULL:NULL不能用=或!=比较
  • 考虑使用NVL函数:将NULL转换为有意义的默认值

✓ 推荐写法:

SELECT col_1, col_2, col_3
FROM   t_name
WHERE  col_1 IS NOT NULL;

-- 使用NVL处理NULL值
SELECT col_1, col_2, NVL(col_3, 0) as col_3_value
FROM   t_name
WHERE  NVL(col_3, 0) < 100;

✗ 不推荐写法:

-- 错误:NULL不能用等号比较
SELECT col_1, col_2, col_3
FROM   t_name
WHERE  col_3 = NULL;  -- 永远返回空结果

1.7 LIKE子句

  • 优先使用前缀匹配:'xxx%'格式可以利用索引
  • 避免前导通配符:'%xxx’模式会导致索引失效,引发全表扫描

✓ 推荐写法(可使用索引):

-- 前缀匹配,可使用索引
SELECT employee_id, first_name
FROM   employees
WHERE  last_name LIKE 'King%';

✗ 不推荐写法(索引失效):

-- 后缀匹配,通常导致全表扫描
SELECT employee_id, first_name
FROM   employees
WHERE  last_name LIKE '%son';

总结

遵循本文提出的Oracle SQL编写规范,能够显著提高代码可读性、可维护性和执行效率。这些规范涵盖了SQL书写风格、表名引用、字段使用、数据类型处理、NULL值处理和LIKE子句使用等方面,是确保SQL代码质量的基础。

在实际开发中,团队应形成统一的SQL编码风格指南,并通过代码审查确保这些规范的执行。通过持续应用这些最佳实践,可以有效减少SQL编写不规范带来的性能问题和维护困难。
在这里插入图片描述

未完待续…
Oracle数据库开发规范篇「②」——SQL编写规范【下】(绑定变量、动态SQL、SQL嵌套、排序、HINT、并行)

系列回顾

“大白话人工智能” 系列
“数据库拍案惊奇” 系列
“世事洞明皆学问” 系列

三分钟讲述个人感悟——感恩,回馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收获不止数据库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值