4.2 SELECT的基本结构
SELECT语句的作用是从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。
完整的SELECT语句的语法较为复杂,但其基本语法格式如下:
参数说明:
➢ALL:指定在结果集中可以包含重复行,ALL 是默认值。
➢DISTINCT:指定在结果集中只能包含唯一行。对于 DISTINCT 关键字来说,Null值是相等的。
➢TOP expression [PERCENT] [WITH TIES]:指示只能从查询结果集返回指定的第一组行或指定的百分比数目的行。expression 可以是指定数目或百分比数目的行。
● expression:指定返回行数的数值表达式。如果指定了 PERCENT,则 expression将隐式转换为 float 值;否则,它将转换为 bigint。
● 如果查询包含ORDER BY 子句,则将返回按 ORDER BY 子句排序的前 expression行或 expression% 的行;如果查询没有 ORDER BY 子句,则行的顺序是随意的。
● PERCENT:指示查询只返回结果集中前 expression% 的行。
● WITH TIES:指定从基本结果集中返回额外的行,对于 ORDER BY 列中指定的排序方式参数,这些额外的返回行的该参数值与 TOP n (PERCENT) 行中的最后一行的该参数值相同。只有在指定 ORDER BY 子句之后,才能在 SELECT 语句中指定 TOP...WITH TIES。
➢< select_list >:要为结果集选择的列。选择列表是以逗号分隔的一系列表达式。可在选择列表中指定的表达式的最大数目是4 096。它可以是如下的一些方式。
● * :指定返回 FROM 子句中的所有表和视图中的所有列。
● column_ name:要返回的列名。
● expression:列名、常量、函数以及由一个或多个运算符连接的列名、常量和函数的任意组合,或者是子查询。
➢[INTO new_table]:创建新表并将来自查询的结果行插入新表中。
● new_table:根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。
➢[FROM { <table_source> } [,...n]]:指定在语句中使用的数据来源,现阶段主要是表。在 SELECT 语句中,FROM 子句是必需的,除非选择列表只包含常量、变量和算术表达式(没有列名)。
➢[WHERE <search_condition>]:指定查询返回的行的搜索条件。
● < search_condition >:定义要返回的行应满足的条件。
➢[GROUP BY group_by_expression [,...n]]:指定用来放置输出行的组。如果 SELECT 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每组的汇总值。
● group_by_expression:进行分组所依据的表达式。group_by_expression也称为组合列。group_by expression可以是列,也可以是引用由FROM子句返回的列的非聚合表达式。不能使用在选择列表中定义的列别名来指定组合列。
➢[HAVING < search_condition >]:指定组或聚合的搜索条件。HAVING 通常在GROUP BY子句中使用。如果不使用GROUP BY子句,则 HAVING的行为与 WHERE子句一样。
● <search_condition> :指定组或聚合应满足的搜索条件。
➢[ORDER BY { order_by_expression [ASC | DESC] } [,...n]]:指定在 SELECT 语句返回的列中所使用的排序顺序。
● order_by_expression:指定要排序的列。可以将排序列指定为一个名称或列别名,也可以指定一个表示该名称或别名在选择列表中所处位置的非负整数。
● ASC:指定按升序,从最低值到最高值对指定列中的值进行排序。
● DESC:指定按降序,从最高值到最低值对指定列中的值进行排序。
以下步骤显示带 WHERE 子句、GROUP BY 子句和 HAVING 子句的 SELECT 语句的处理顺序。
(1) FROM 子句返回初始结果集。
(2) WHERE 子句排除不满足搜索条件的行。
(3) GROUP BY 子句将选定的行收集到 GROUP BY 子句中各个唯一值的组中。
(4) 选择列表中指定的聚合函数可以计算各组的汇总值。
(5) 此外,HAVING 子句排除不满足搜索条件的行。
(6) ORDER BY子句对最终的结果进行排序。