SQL进阶教程——从面向过程思维向申明式思维,面向集合思维转变的7个关键点(2-6)

前言

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子句的用法,我们会在不经意间加深对面向集合这个本质的理解,常用的方法是——画圆

7. 不要画长方形,去画圆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值