《SQL基础教程》笔记(1)

《SQl基础教程》笔记摘要

1.查询基础

常数的查询:

SELECT子句不仅可以书写列名,还可以书写数据表中原先不存在的常数。下面代码中的SELECT子句中的第一列“商品”是字符串常数,第二列38是数字常数,第3列“2009-02-24”是日期常数,它们将与shohin_id列和shohin_mei列一起被查询出来。

SELECT '商品' AS mojiretsu, 38 AS kazu, '2009-02-24' AS hizuke, shohin_id, shohin_mei
FROM Shohin;

mojiretsu   kazu    hizuke      shohin_id   shohin_mei
商品          38      2009-02-24  001         T
商品          38      2009-02-24  002         打孔器
商品      38      2009-02-24  003         运动衫

这里写图片描述

这里写图片描述

需要注意NULL

1.所有包含NULL的计算,结果肯定是NULL。甚至NULL/0也是为NULl。

5 + NULL = NULL 
10 - NULL = NULL
1 * NULL = NULL
4 / NULL =NULL
NULL / 9 = NULL
NULL / 0 = NULL 

2.不能对NULL使用比较运算符:

对比较运算符来说还有一点十分重要。那就是,作为查询条件的列中含有NULL的情况。

WHERE shiire_tanka <> 2800;
-- 或者
WHERE shiire_tanka = NULL

上面两种条件都检索不出NULL的记录。SQL提供了专门用来判断是否为NULL的运算符IS NULL。如果选取出NULL的记录时,可以像下面的那样书写条件表达式。

WHERE shiire_tanka IS NULL;

-- 检索结果
shohin_mei  shiire_tanks
叉子
圆珠笔

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

WHERE shiire_tanka IS NOT NULL;

3.含有NULL的逻辑运算符:

上面我们介绍了查询NULL时不能使用比较运算符(=或< >),需要使用IS NULL运算符或者IS NOT NULL运算符。实际上,使用逻辑运算符(AND、OR、NOT)时也需要特别对待NULL。

真值就是值为真(TRUE)或假(FALSE)其中之一的值。

SQL中除了真假之外,含有第三种值—不确定(UNKNOWN)。与通常的逻辑运算符被称为二值逻辑相对,只有SQL中的逻辑运算被称为三值逻辑。

-- AND
真   不确定     不确定
假   不确定     假
不确定 真       不确定
不确定 假       假
不确定 不确定 不确定

-- OR
真   不确定     真
假   不确定     不确定
不确定 真       真
不确定 假       不确定
不确定 不确定 不确定

4.在使用SELECT DISTINCT选择数据时,NULL也被视为一类数据。

存在多条NULL数据行时,也会结合为一条NULL数据。

这里写图片描述

5.对含有NULL的数据进行ORDER BY排序时

我们之前说过不能对NULL使用比较运算符,也就是不能对NULL和数字进行排序。也不能与字符串和日期比较大小。因此,使用含有NULL的列作为排序键时,NULL会在结果的开头或末尾汇总显示。

这里写图片描述

2.聚合函数

聚合函数:通过SQL对数据进行某种操作或计算时需要使用的行数。

COUNT:计算表中的记录数(行数)

-- 计算全部数据行数
SELECT COUNT(*)
    FROM Shohin;

count
8

-- 计算NULL以外数据的行数
SELECT COUNT(shiire_tanka)
    FROM Shohin;

count
6

所以,COUNT(*)会得到包含NULL的数据行数, COUNT(<列名>)会得到NULL之外的数据行数。

SUM:(计算表中数值列的数据合计值)

-- 计算销售单价合进货单价的合计值
SELECT SUM(hanbai_tanka), SUM(shiire_tanka)
    FROM Shohin;

sum     sum
16780   12210

记得我们我们之前说过,四则运算中如果存在NULL时,结果一定是NULL,那么我们对于所有聚合函数来说,计算之前就已经把NULL排除在外了。

AVG:(计算表中数值列的数据平均值)

-- 计算销售单价和进货单价的平均值
SELECT AVG(hanbai_tanka), AVG(shiire_tanka)
    FROM Shohin;

avg         avg
2097.5000   2035.0000

计算进货单价平均值的情况与SUM函数相同,会事先删除NULL再进行计算。

MAX:(求出表中任意列中数据的最大值)
MIN:(求出表任意列中数据的最小值)

-- 计算销售单价的最大值和进货单价的最小值
SELECT MAX(hanbai_tanka), MIN(hanbai_tanka)
    FROM Shohin;

max     min
6800    320

但是,MAX/MIN函数和SUM/AVG函数有一点不同,那就是SUM/MIN函数只能对数值类型的列使用,而MAX/MIN函数原则上可以适用于任何数据类型的列。

-- 计算登记日期的最大值和最小值
SELECT MAX(torokubi), MIN(torokubi)
    FROM Shobin;

max         min
2009-11-11  2008-04-28

使用聚合函数时删除重复值(关键字DISTINCT)

我们知道,商品种类和销售单价的数据中,存在多行数据相同的情况。如果想要计算出商品种类的个数,删除重复数据然后计算数据行似乎是个不错的方法。我们可以利用DISTINCT关键字作为参数,就能得到我们想要的结果了。

-- 计算去除重复数据后的数据行数
SELECT COUNT(DISTINCT shohin_bunrui)
    FROM Shohin;

count
3

DISTINCT不仅限于COUNT函数,所有的聚合函数都可以使用。

猜你喜欢

转载自blog.csdn.net/u014465934/article/details/80081736