zhaoyudang

算术运算符

SQL 语句中可以使用计算表达式。下列 SELECT 语句, 把各个商品单价的 2 倍(sale_price 的 2 倍)以 "sale_price_ x2" 列的形式读取出来。

sale_price_x2 列中的 sale_price * 2 就是计算销售单价 的 2 倍的表达式。以 product_name 列的值为 \'T 恤衫\' 的记录行为例,sale_price 列的值 1000 的 2 倍是 2000,它以 sale_price_x2 列的形式被查询出来。同样,\'打孔器\' 记录行的值 500 的 2 倍 1000, \'运动 T 恤\' 记录行的值 4000 的 2 倍 8000,都被查询出来了。运算就 是这样以行为单位执行的。

四则运算所使用的运算符(+、-、*、/)称为算术运算符。运算符就 是使用其两边的值进行四则运算或者字符串拼接、数值大小比较等运算, 并返回结果的符号。加法运算符(+)前后如果是数字或者数字类型的列 名的话,就会返回加法运算后的结果。SQL 中除了算术运算符之外还有其 他各种各样的运算符。

当然,SQL 中也可以像平常的运算表达式那样使用括号 ( )。括号中 运算表达式的优先级会得到提升,优先进行运算。例如在运算表达式 (1 + 2) * 3 中,会先计算 1 + 2 的值,然后再对其结果进行 * 3 运算。

 

需要注意NULL

需要特别注意含有 NULL 的运算。请大家考虑一下在 SQL 语句中进行如下运算时,结果会是什么呢?

正确答案全部都是 NULL。大家可能会觉得奇怪,为什么会这样呢? 实际上所有包含 NULL 的计算,结果肯定是 NULL。即使像 F 那样用 NULL 除以 0 时这一原则也适用。通常情况下,类似 5/0 这样除数为 0 的话会发 生错误,只有 NULL 除以 0 时不会发生错误,并且结果还是 NULL。

 

比较运算符

之前学习 WHERE 子句时,我们使用符号 = 从 Product 表中选 取出了商品种类(product_type)为字符串 \'衣服\' 的记录。下面让 我们再使用符号 = 选取出销售单价(sale_price)为 500 日元(数字 500)的记录。

像符号 = 这样用来比较其两边的列或者值的符号称为比较运算符, 符号 = 就是比较运算符。在 WHERE 子句中通过使用比较运算符可以组合 出各种各样的条件表达式。

 另外还可以使用比较运算符对计算结果进行比较。在 下列WHERE 子句中指定了销售单价(sale_price)比进货单价 (purchase_price)高出 500 日元以上的条件表达式。为了判断是否 高出 500 日元,需要用 sale_price 列的值减去 purchase_price 列的值。

 

 

对字符串使用不等号时的注意事项

在对字符串类型的数据进行大小比较时,使用的是和数字比较不同的规则。典型的规则就是按照字典顺序进行比较,也就是像姓名那样,按照条目在字典中出现的顺序来进行排序。该规则最重要的一点就是,以相同字符开头的单词比不同字符开头的单词更相近。

\'10\' 和 \'11\' 同样都是以 \'1\' 开头的字符串,首先判定为比 \'2\' 小。 这就像在字典中“提问”“提议”和“问题”按照如下顺序排列一样。

我们以书籍的章节为例也可以。1-1 节包含在第 1 章当中,所以 肯定比第 2 章更靠前。

进 行 大 小比 较 时,得 到的 结 果 是 \'1-3\' 比 \'2\' 小(\'1-3\' < \'2\'),\'3\' 大于 \'2-2\'(\'3\' > \'2\')。

 

不能对NULL使用比较运算符

关于比较运算符还有一点十分重要,那就是作为查询条件的列中含有 NULL 的情况。例如,我们把进货单价(purchase_price)作为查 询条件。请注意,商品“叉子”和“圆珠笔”的进货单价是 NULL。 我们先来选取进货单价为 2800 日元(purchase_price = 2800) 的记录。

大家对这个结果应该都没有疑问吧?接下来我们再尝试选取出进货单 价不是 2800 日元(purchase_price <> 2800)的记录。

执行结果中并没有“叉子”和“圆珠笔”。这两条记录由于进货单价 不明(NULL),因此无法判定是不是 2800 日元。

那如果想选取进货单价为 NULL 的记录的话,条件表达式该怎么写 呢?历经一番苦思冥想后,用“purchase_price = NULL”试了试, 还是一条记录也取不出来。

即使使用 <> 运算符也还是无法选取出 NULL 的记录 。因此,SQL 提供了专门用来判断是否为 NULL 的 IS NULL 运算符。

反之,希望选取不是 NULL 的记录时,需要使用 IS NOT NULL 运 算符

分类:

技术点:

相关文章: