SQL杂俎_陪老婆一起学SQL系列_Chapter 03_查询基础2
前言
回顾了一下前面几篇的内容,发现【查询基础1】里面的内容可能有些多了,
为了避免填鸭式的教程风格,
接下来的内容会采取 “短篇幅,多章节”的思路去写,每个章节只写一两块的内容~~~
1、加减乘除
作为数据处理的基本操作,加减乘除必然是SQL可以实现的功能。
示例1:
--查询每个同学的分数 SELECT name AS "姓名", score AS "得分", --老师发现有一题存在问题,每个同学都加2分 score + 2 AS "加两分后的成绩", /*加法*/ --满分100分,同学们都被扣了多少分? 100 - score AS "被扣分数", /*减法*/ --换算成120制,得分是多少 score * 1.2 AS "120分制", /*乘法*/ --每个人分数的一半是多少? score / 2 AS "分数的一半" /*除法*/ FROM student
执行结果:
如图,“被扣分数”这一列里显示的就是每位同学与满分100分之间的差距,
每一行的数据,都产生了用别名命名的新的列。
运算就是这样以行为单位执行的
2、混合运算
仔细观察示例1中的结果,发现在老师给同学们都加上2分之后,“被扣分数”,“120分制” 和 “分数的一半”
这三列的新数据仍然是基于最原始的得分去计算的。
(第一条数据 刘盖文的原始得分是86,加上2分后,应该是88分,一半的分数应该为44,但示例1中仍然是43)
数据查询的结果需要同步更新,我们修改如下:
示例2:
SELECT name AS "姓名", score AS "得分", score + 2 AS "加两分后的成绩", 100 - score + 2 AS "被扣分数", score + 2 * 1.2 AS "120分制", score + 2 / 2 AS "分数的一半" FROM student
执行结果:
好像和我们想象的不一样啊???!!!
因为,SQL语句中同样是遵守四则运算规则的。
所以 score + 2 * 1.2 执行的顺序实际上是 2*1.2然后再 + score
解决办法就是使用括号“()”,SQL语句中可以像正常的计算公式一样使用括号,
示例3:
SELECT name AS "姓名", score AS "得分", --老师发现有一题存在问题,每个同学都加2分 score + 2 AS "加两分后的成绩", /*加法*/ --满分100分,同学们都被扣了多少分? 100 - (score + 2) AS "被扣分数", /*减法*/ --换算成120制,得分是多少 (score + 2) * 1.2 AS "120分制", /*乘法*/ --每个人分数的一半是多少? (score + 2) / 2 AS "分数的一半" /*除法*/ FROM student
执行结果:
括号中的运算表达式的优先级会得到提升。
tips:括号提升优先级的功能,不仅仅局限于四则运算,后面我们还会用到~
3、特殊的 NULL
在前面示例1、示例2的执行结果中,其实还有一行数据(截图隐藏了)
“美芬”同学的得分在原始的 student 表中是 NULL
通过上面的例子,我们发现加减乘除四则运算中,NULL值产生的结果都是NULL。
实际上,所有包含NULL的计算,结果肯定是NULL。
Tips:
# 在很多时候,类似 9 / 0 这样除数为0 的情况会触发报错,但 NULL / 0 不会报错,结果依然是NULL
# 如果实际数据处理的过程中,需要实现 NULL + 2 = 2的效果,我们可以借用其他方式,后面会介绍到。
posted on 2020-12-08 20:09 AtDoldrums 阅读(101) 评论(0) 编辑 收藏 举报