电子表格,满足关系数据
数据库是一个有序数据集合。数据库有很多不同的类型,但是有一种数据库可以与SQL建立连接,即关系数据库(relation database)。
正如Excel工作簿由电子表格组成一样,关系数据库也由表组成,如下所示。
与电子表格一样,表也有行和列。但是在表中,单元格(或数据库术语中的“值”)之间不能建立联系。若想将Ralph Abernathy的家乡从上图所示表格的第一行中排除,你不能直接将其删除,而必须排除整个行或者整个“家乡”列。
不能动态更改单元格的原因是数据库具有严格的结构。作为独立的单元,每行中的所有值绑定在一起。每个列必须有唯一的名称,并且只能包含特定类型的数据(“Integer”、“Text”、“Date”等)。
Excel的灵活结构现在听起来不错,但请稍等。因为数据库的结构非常严格,所以保护数据的完整性较容易。换句话说,你所得结果中出现不一致和错误的可能性要小得多。这意味着你的数据的可信度更高。
从公式转为查询
在Excel中操作数据最常用的方法是使用公式。公式由一个或多个函数组成,这些函数告诉Excel如何处理单元格中的数据。例如,你可以使用SUM(A1:A5)进行数值求和,或者使用AVERAGE(A1:A5).求其平均值。
公式所对应的SQL语句是查询。返回上表的查询,如下所示
SELECT player_name,
hometown,
state,
weight
FROM benn.college_football_players
SELECT 和 FROM 是任何SQL查询的两个基本组成部分。SELECT 指定所需数据的列, FROM指示该数据列属于哪个表。你可以通过在SELECT 后添加星号(*)来表示所有的列,如下所示。
SELECT *
FROM benn.college_football_players
该查询将会显示 benn.college_football_players 表中的所有列,这样你就可以对整个数据集有所了解。一旦知道需要什么,你就可以快速地删除列以减小数据集规模。
与公式一样,查询由指定数据操作的函数组成。查询还可以包含子句、运算符、表达式和其他一些组件,但是我们不打算在这里细讲。你需要知道的是,你可以使用SQL操作数据,且操作方式与excel的几乎完全一样。
以 IF 函数为例。使用 IF 创建条件语句,根据定义的规则过滤数据或添加新数据。当你把一个 IF 函数应用到一个单元格上时,所得结果如下:
=IF(logical_test, value_if_true, [value_if_false])
也可表示为IF <some condition is met> THEN <display this value> OTHERWISE <display a different value>. 其中,OTHERWISE部分(显示为)是可选的。相当于 IF 的SQL语句是 CASE 。两者的语法非常相似。
CASE WHEN <condition 1 is met> THEN <display value 1>
ELSE <display a different value>
END
CASE语句比IF 语句更容易阅读,因为SQL查询有多行,是具有多个条件的IF 语句的理想化的结构。例如,若想在基于Excel中的现有数据中添加两个类别,则必须将一个IF语句嵌入另一个IF语句中。当添加的条件很多时,事情很快就会变得很糟糕。但是在SQL中,你可以添加一个新条件作为另一行。
在SQL中,让我们用上面的大学足球队的数据来添加多个条件。我们要添加一列,把足球运动员分成四组。其查询如下:
SELECT player_name,
weight,
CASE WHEN weight > 250 THEN 'over 250'
WHEN weight > 200 THEN '201-250'
WHEN weight > 175 THEN '176-200'
ELSE '175 or under' END AS weight_group
FROM benn.college_football_players
所得表格如下:
也没有很难,对不对?不过这对于IF语句将是一场噩梦。
你可能会想,那么图表呢?哪些让我的报告称得上是报告的图形呢? 一种选择是在SQL中操作数据、导出数据并在Excel中构建图表。
但是,如果你想跳过导出步骤,一些SQL程序(比如Mode)允许你在查询结果之上构建图表。这些图表是直接绑定到数据库的,因此每当重新运行查询时,结果和可视化都会自动刷新。