2.6 预览完整SELECT语句
本书大部分内容都与本章所介绍的SELECT语句相关。从第3章到第15章,我们将扩展这条SELECT语句,不断引入新的特性,直到你了解和理解SELECT的全部潜力和功能。这里,我们只是简单介绍了SELECT语句如下的这个部分:
SELECT columnlist
FROM table
为了不留悬念,我们先来预览一下完整的SELECT语句,并且简单介绍一下其各个不同的组成部分。包含了全部子句的、完整的SELECT语句如下所示:
SELECT columnlist
FROM tablelist
WHERE condition
GROUP BY columnlist
HAVING condition
ORDER BY columnlist
我们已经介绍了SELECT子句和FROM子句。让我们在这些子句基础上来进行一些扩展,介绍一下其他子句。SELECT子句开始了整条语句,并且列出了将要显示的列。在后面的章节中,你会看到,columnlist不仅可以包含指定的表中的实际的列,而且可以包含计算的列,而这些计算的列通常由表中的一个或多个列派生而来。columnlist中的列还可以包含函数,而函数代表着添加常用方法以转换数据的一种特殊方式。
FROM子句指定了将要从中提取数据的数据源。大多数情况下,这些数据源是表。在后面的章节中,我们将了解到,这些数据源也可以是其他的SELECT语句,它们表示的是数据的一种虚拟视图(view)。在本章中,tablelist是一个单个的表。在后边的章节中,我们将会介绍SQL的一个关键特性,就是通过JOIN关键字把多个表组合到一条SELECT语句中。因此,你将会看到很多这样的例子:其中FROM子句中的tablelist是由多行语句组成的,这表示将这些表连接了起来。
WHERE子句用来表示查询逻辑。我们使用该子句来确切地指定要获取哪些数据行。WHERE子句可以使用基本的数学运算符,如等号(=)和大于号(>),以及布尔运算符,如OR和AND。
GROUP BY子句在汇总数据方面扮演了关键的角色。通过把数据组织到不同的组中,分析师不仅可以组织数据,而且可以使用诸如求和或者计数等不同的统计方法,来汇总每一个组中的数据。
当对数据分组的时候,选择标准变得多少有点复杂了。必然要搞清楚的一个问题是,这个选择标准是应用于单个的行,还是应用于整个组。例如,当按照所在的州来对客户分组的时候,某人可能只有在一个州之中所有客户的购买总量超过一定的数量时,才想要查看这个州中的单个客户的数据行。这个时候,HAVING子句就派上用场了。HAVING子句用于为整个一组的数据指定选择逻辑。
最后,使用ORDER BY子句按照升序或降序来排序数据。在后边章节中,我们会介绍到,如果SELECT语句中的各种子句都存在的话,它们的顺序必须和前面给出的SELECT语句一般格式中的顺序相同。例如,如果一条SELECT语句中有一个GROUP BY子句,它必须出现在WHERE子句之后,而位于HAVING子句之前。
除了上述的子句,我们还会介绍编写SELECT语句的一些其他方法,包括子查询和集合逻辑。子查询是把一条完整的SELECT语句插入到另一条SELECT语句中的一种方法,对于特定类型的选取逻辑往往很有用。集合逻辑是将多条查询并列地组合成一条单个的查询的一种方法。