前言
SQL中没有赋值或者循环的处理,数据也不以记录为单位进行处理,而已集合为单位进行处理
1. 用CASE表达式代替IF语句和CASE语句。SQL更像一种函数式语言
之所以叫它“CASE表达式”而不是“CASE语句”,是因此CASE表达式与1+1一样,都是表达式,在执行时会被整体当做一个值来处理。既然同样是表达式,那么能写1+1这样的表达式的地方都能写CASE表达式,而且因为CASE表达式最终会作为一个确却的值来处理,所以我们也可以把CASE表达式当做聚合函数的参数来使用
2. 用GROUP BY和关联子查询代替循环
面向过程语言中循环时经常用到的处理是“控制,中断”。在SQL中,这两个处理可以分别用GROUP BY子句和关联子查询来表达。
SQL没有循环,而且没有也不会带来什么问题
3. 表中的行没有顺序
关系数据库中的表(关系)是一种数学上的“集合”。表有意的放弃了行的顺序这一形象的概念,从而使他具有了更高的抽象度。文件和表原本就是不同的概念,两者之间自然会有些不一致,与其将表比作排列整齐的书架,还不如说他更像随意堆放各种物品的“玩具箱”或者“袋子”
4. 将表看成集合
表的抽象度比文件更高。SQL在处理表或视图时,丝毫无需在意他们是如何存储的。
在使用自连接后,会给同一张表赋予不同的名称,就可以把这两张表当成不同的表来处理
5. 理解EXISTS谓词和“量化”的概念
SQL在实现量化符偷懒了,只实现了一个,对于SQL不具备的全程量化符,我们只能通过在程序中使用NOT EXISTS来表达
6. 学习HAVING子句的真正价值
与WHERE子句不同,HAVING子句正是设置针对集合的条件的地方,因此为了灵活运用它,我们必须学会从集合的角度来理解数据。通过练习HAVING子句的用法,我们会在不经意间加深对面向集合这个本质的理解,常用的方法是——画圆