|
在许多方面,查询都是SQL语言的中心内容,而用于表示SQL查询的SELECT语句,是SQL语句中功能最强大也是最复杂的。 SELECT语句的作用是让数据库服务器根据客户的要求搜索出所需要的信息,并按规定的格式进行整理,再返回给客户端,SELECT语句的完整结构如下: SELECT statement ::= < query_expression > [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [ ,...n ] ] [ COMPUTE { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ] [ BY expression [ ,...n ] ] ] [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT } [ , XMLDATA ] [ , ELEMENTS ] [ , BINARY base64 ] } ] [ OPTION ( < query_hint > [ ,...n ]) ] < query expression > ::= { < query specification > | ( a< query expression > ) } [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ] < query specification > ::= SELECT [ ALL | DISTINCT ] [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ] < select_list > [ INTO new_table ] [ FROM { < table_source > } [ ,...n ] ] [ WHERE < search_condition > ] [ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ] ] [HAVING <search_condition>] | 上述语法较复杂,这里只须掌握SELECT语句的一部分,就可以完成对数据库的查询操作,SELECT语句中的主要子句归纳如下:
SELECT select_list [ INTO new_table ] FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDER BY order_expression [ASC| DESC ]] | 参数:
select_list:指定由查询返回的列。它是一个逗号分隔的表达式列表。每个表达式同时定义格式(数据类型和大小)和结果集列的数据来源。每个选择列表表达式通常是对从中获取数据的源表或视图的列的引用,但也可能是其它表达式,例如常量或T-SQL函数。在选择列表中使用 * 表达式指定返回源表中的所有列。 INTO new_table_name:创建新表并将查询行从查询插入新表中。new_table_name 指定新表的名称。 FROM table_list:指定从其中检索行的表。这些来源可能包括:基表、视图和链接表。FROM子句还可包含联接说明,该说明定义了 SQL Server用来在表之间进行导航的特定路径。FROM子句还用在DELETE和UPDATE 语句中以定义要修改的表。 WHERE search_conditions:WHERE子句指定用于限制返回的行的搜索条件。WHERE 子句还用在 DELETE 和 UPDATE 语句中以定义目标表中要修改的行。 GROUP BY group_by_list:GROUP BY子句根据 group_by_list 列中的值将结果集分成组。例如,student 表在 “性别” 中有两个值。GROUP BY ShipVia 子句将结果集分成两组,每组对应于ShipVia 的一个值。 HAVING search_conditions:HAVING子句是指定组或聚合的搜索条件。逻辑上讲,HAVING 子句从中间结果集对行进行筛选,这些中间结果集是用 SELECT 语句中的 FROM、WHERE 或 GROUP BY 子句创建的。HAVING 子句通常与 GROUP BY 子句一起使用,尽管HAVING 子句前面不必有 GROUP BY 子句。 ORDER BY order_list [ ASC | DESC ]:ORDER BY 子句定义结果集中的行排列的顺序。order_list 指定组成排序列表的结果集的列。ASC 和 DESC 关键字用于指定行是按升序还是按降序排序。ORDER BY 之所以重要,是因为关系理论规定除非已经指定 ORDER BY,否则不能假设结果集中的行带有任何序列。如果结果集行的顺序对于SELECT 语句来说很重要,那么在该语句中就必须使用ORDER BY子句。
例如显示course表的所有记录。在查询分析器中输入SQL语句如下: use student select * from course | SELECT子句指定要查询的列。这些列通常被一个选择列表指定,选择列表是中间用逗号分开的选择项列表。选择项可以是字段名、常量、SQL表达式。下面是SELECT子句的语法:SELECT [ ALL | DISTINCT ] [ TOP n [ PERCENT ] [ WITH TIES ] ] < select_list > < select_list > ::= { * | { table_name | view_name | table_alias }.* | { column_name | expression | IDENTITYCOL | ROWGUIDCOL } [ [ AS ] column_alias ] | column_alias = expression } [ ,...n ] | 参数:
ALL:指定在结果集中可以显示重复行。ALL是默认设置。 DISTINCT:去掉重复记录。 TOP n [PERCENT]:指定只从查询结果集中输出前n行。n是介于0和4294967295之间的整数。如果还指定了PERCENT,则只从结果集中输出前百分之n行。当指定时带PERCENT时,n必须是介于0~00之间的整数。如果查询包含ORDER BY子句,将输出由ORDER BY子句排序的前n行(或前百分之n行)。如果查询没有ORDER BY子句,行的顺序任意。 WITH TIES:指定从基本结果集中返回附加的行,这些行包含与出现在TOP n (PERCENT)行最后的ORDER BY列中的值相同的值。如果指定了ORDER BY子句,则只能指定TOP ...WITH TIES。 select_list :为结果集选择的列。选择列表是以逗号分隔的一系列表达式。 * 指定在FROM子句内返回表和视图内的所有列。列按FROM子句所指定的表或视图,按他们在表或视图中的顺序返回,table_name | view_name | table_alias.*将*的作用域限制为指定的表或视图。 column_name:是要返回的列名。限定column_name以避免二义性引用,当FROM子句中的两个表内有包含重复名的列时会出现这种情况。 expression:是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。 IDENTITYCOL:返回标识列。 ROWGUIDCOL:返回行全局惟一标识列。如果在FROM子句中有多个表具有ROWGUIDCOL属性,则必须用特定的表名(如T1.ROWGUIDCOL)限定 ROWGUIDCOL。 - column_alias:是查询结果集内替换列名的可选名。别名还可用于为表达式结果指定名称。
|