5.使用括号(括号对齐)
为区分 SQL 语句的层次,通常需要使用括号;并应注意
括号的对齐,这样将有助于对 SQL 语句逻辑的理解,方便对
其进行阅读。
通常,书上介绍的方法只强调添加括号能够区分 SQL 语
句的层次,但是没注意到括号的对齐问题。因此,当语句规
模较大、层次较复杂时将不易找到对应的括号。建议使用如
下的括号对齐方式。
--例:
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE sno=Student.sno
AND cno = Course.cno))
--可以改写成:
SELECT Sname
FROM Student
WHERE NOT EXISTS
(SELECT *
FROM Course
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE sno = Student.sno
AND cno = Course.cno
)
);
这样的编码方式结合使用了空行的技巧来帮助我们区别
语句的逻辑层次,使得语句的逻辑层次更为清晰;有效地提
高了语句的可读性。
6.适当的注释
与高级语言类似,为表示 SQL 语句逻辑内涵可以使用注
释语句对语句内涵进行解释。
不同类型的注解及其作用:
(1)语句首注释
解释整个语句的内涵。
(2)语句中注释
解释语句的当前部分的内涵。
(3)语句末注释
解释语句的其他需补充说明的信息。
按注释语句的注释能力可分为:
(1)单行注释
在开始处使用两个连续的减号--,从两个减号后开始到
本行的结尾之间的所以内容都是注释。
(2)多行注释
在开始处使用/*,结尾处使用*/;包含在/*和*/之间的
所以内容都是注释。
--例:
/*
****************************************************
* (语句首注释) *
* 查询选修了课程名为“信息系统”的学生的学号和姓名 *
****************************************************
*/
SELECT sno , sname -- (语句中注释) (3)最后在Student关系中
FROM Student -- 取出sno和sname
WHERE sno IN
(SELECT sno -- (2)然后在SC关系中找出
FROM SC -- 选修了“信息系统”的学生学号
WHERE cno IN
(SELECT cno -- (1)首先在Course关系中
FROM Course -- 找出“信息系统”的课程号
WHERE cname = ‘信息系统’
)
);
注释应适当,不是注释内容越多越好的。实践表明,不
恰当的注释不但不能提高编码的可读性,反而会使编码难以
理解甚至产生歧义;因此,注释内容应简明扼要,如果没有
要说明的内容则可以省略。
注意养成在编写语句时编写注释的习惯。在完成一段程
序或一个语句编写工作后,你通常希望尽快的转入到新的编
码工作中去。于是在过了一段时间之后,再回来阅读那些没
有注释或注释不充分的语句时,将很难回忆起原来的编码思
路。因而造成维护工作难度增大,甚至无法进行维护而只能
重新编码;致使维护代价大幅提高。因此,在书写程序或者
语句的过程中加上适当的注释是很有必要的。
7.注意输入时的中/英文切换
我们在程序编制中经常需要进行中/英文输入法的切换,
其中常常因此切换而造成语句的错误。从外观上看,中文符
号与英文符号非常相似,但两者表示不同的含义。因此在进
行中/英文切换时应特别注意;特别是标点符号,如逗号、引
号等。
--例:
SELECT sno ,sname ,sex ,age -- 错误(使用了中文的逗号)
FROM Student
WHERE sno =‘001’ -- 错误(使用了中文的引号) 应改写成:
SELECT sno , sname , sex , age -- 正确(使用英文的逗号)
FROM Student
WHERE sno = '001' -- 正确(使用英文的引号)