SQL 经典实例
上QQ阅读APP看书,第一时间看更新

本书使用的约定

本书遵循了许多排版和代码编写约定。请花点时间熟悉它们,这有助于加深你对本书内容的理解。代码编写约定尤其重要,因为我不能在每一个实例中都重复强调一遍。因此,我把一些重要的约定都列在下面。

排版约定

本书遵循下列排版约定。

大写字母表示SQL 关键字。

小写字母用于所有代码示例。诸如C 和Java这样的编程语言都使用小写形式的关键字,我发现其可读性比大写形式更好。因此,本书中所有查询语句都使用小写形式。

等宽粗体用于在交互示例里表示用户输入的内容。

这个图标表示小技巧、建议或者一般性提示。

这个图标表示警告或注意事项。

代码编写约定

我习惯在SQL 语句中全部用小写字母,不管是关键字还是用户指定的标识符。例如:

select empno, ename
  from emp;

你的习惯可能不同。例如,许多人喜欢把SQL 关键字大写。你需要遵循你喜欢的或者项目要求的风格。

尽管代码示例用小写形式,但在正文里SQL 关键字和标识符始终都是大写字母。我这样做是为了将它们和其他普通文本明确区分开来。例如,前述查询语句展示了一个针对EMP表的SELECT操作。

尽管本书涵盖了5个数据库厂商的产品,但是我还是决定用同样的格式呈现所有产品的输出结果。

EMPNO ENAME
----- ------
 7369 SMITH
 7499 ALLEN
…

许多实例在FROM子句里用到了内嵌视图或子查询。ANSI SQL 标准规定要给它们取别名。(只有Oracle不要求指定这一类别名。)因此,我在解决方案里经常用类似x和y这样的别名来标识内嵌视图。

select job, sal
  from (select job, max(sal) sal
          from emp
        group by job) x;

注意最后紧挨着圆括号的字母X。在这里,字母X变成了FROM子句里那个子查询返回的表的名字。列别名是一个有用的工具,能帮我们写出自注释的代码;相对而言,(本书中出现过的多数)内嵌视图的别名只是一种形式化的东西。通常我会为它们取一个简单的名字,诸如X、Y、Z、TMP1和TMP2。在某些情况下,如果我觉得取一个更好的别名有助于增加可读性,我就会那样做。

你将会看到在每个实例的解决方案部分出现的SQL 语句,其每一行都会被编号,例如:

1 select ename
2     from emp
3  where deptno = 10

这些数字并不是语法的一部分,我把它们包含进来只是为了方便在每个实例的讨论部分能使用序号来引用查询语句里的各个部分。