AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > SQL Server

SQL Server数据库技术(58)

51自学网 http://www.wanshiok.com


10.1.3 FROM 子句
FROM 子句指定需要进行数据查询的表。只要SELECT 子句中有要查询的列,就必须使用FROM 子句。其语法如下:
FROM {} [,...n]
::=
table_name [ [AS] table_alias ] [ WITH ( [,...n]) ]
| view_name [ [AS] table_alias ]
| rowset_function [ [AS] table_alias ]
| OPENXML
| derived_table [AS] table_alias [ (column_alias [,...n] ) ]
|
::=
ON
| CROSS JOIN
|
::=
[ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
[ ]
JOIN
各参数说明如下:

  • table_source
    指明SELECT 语句要用到的表、视图等数据源。
  • table_name [ [AS] table_alias ]
    指明表名和表的别名。
  • view_name [ [AS] table_alias ]
    指明视图名称和视图的别名。
  • rowset_function [ [AS] table_alias ]
    指明行统计函数和统计列的名称。
  • OPENXML
    提供一个XML 文档的行集合视图。
  • WITH ( [,...n])
    指定一个或多个表提示。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。关于表提示table_hint 的设,定请参见下一章的“删除数据”部分。
  • derived_table [AS] table_alias
    指定一个子查询,从数据库中返回数据行。
  • column_alias
    指明列的别名,用以替换查询结果中的列名。
  • joined_table
    指定由连接查询生成的查询结果。有关连接与连接查询的介绍参见本章的相关章节。
  • join_type
    指定连接查询操作的类型。
  • INNER
    指定返回两个表中所有匹配的行。如果没有join_type 选项,此选项就为系统默认。
  • LEFT [OUTER]
    返回连接查询左边的表中所有的相应记录,而右表中对应于左表无记录的部分,用NULL 值表示。
  • RIGHT [OUTER]
    返回连接查询右边的表中所有的相应记录,而左表中对应于右表无记录的部分,用NULL 值表示。
  • FULL [OUTER]
    返回连接的两个表中的所有记录。无对应记录的部分用NULL 值表示。
  • join_hint
    指定一个连接提示或运算法则。如果指定了此选项,则INNER LEFT RIGHT 或FULL选项必须明确指定。通常SQL Server 的查询优化器会自动选取最优执行计划,除非是特别有经验的用户,否则最好不用此选项。
    join_hint 的语法如下:
    ::= { LOOP | HASH | MERGE | REMOTE }
    其中LOOP | HASH | MERGE 选项指定查询优化器中的连接是循环、散列或合并的。REMOTE 选项指定连接操作由右边的表完成。当左表的数据行少于右表,才能使用REMOTE 选项。当左表和右表都是本地表时,此选项不必使用。
  • JOIN
    指明特定的表或视图将要被连接。
  • ON
    指定连接的条件。
  • CROSS JOIN
    返回两个表交叉查询的结果。
10.1.4 WHERE 子句
WHERE 子句指定数据检索的条件,以限制返回的数据行。其语法如下:
WHERE |
::=
column_name { *= | =* } column_name
各参数说明如下:
search_condition
通过由谓词构成的条件来限制返回的查询结果。
old_outer_join
指定一个外连接。此选项是不标准的,但使用方便。它用“*=” 操作符表示左连接,用“=*” 操作符表示右连接。此选项与在FROM 子句中指定外连接都是可行的方法,但二者只能择其一。

注意:如果在WHERE子句中指定一个值为FALSE的条件,则可以用SELECT...INTO语句来创建一个表名不同,但结构和数据类型均和原表相同的表。

10.1.5 GROUP BY 子句
GROUP BY 子句指定查询结果的分组条件。其语法如下;
GROUP BY [ALL] group_by_expression [,...n]
[ WITH { CUBE | ROLLUP } ]
各参数说明如下:

  • ALL
    返回所有可能的查询结果组合,即使此组合中没有任何满足WHERE 子句的数据。分组的统计列如果不满足查询条件,则将由NULL 值构成其数据。ALL 选项不能与CUBE或ROLLUP 选项同时使用。
    GROUP BY ALL is not supported in queries that access remote tables.
  • group_by_expression
    指明分组条件。group_by_expression 通常是一个列名,但不能是列的别名。数据类型为TEXT、 NTEXT、 IMAGE 或BIT 类型的列不能作为分组条件。
  • CUBE
    除了返回由GROUP BY 子句指定的列外,还返回按组统计的行。返回的结果先按分组的第一个条件列排序显示,再按第二个条件列排序显示以此类推。统计行包括了GROUPBY 子句指定的列的各种组合的数据统计。
  • ROLLUP
    与CUBE 不同的是,此选项对GROUP BY 子句中的列顺序敏感,它只返回第一个分组条件指定的列的统计行。改变列的顺序会使返回的结果的行数发生变化。

使用Distinct选项的统计函数,如AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、和SUM(DISTINCT column_name)等,不能在使用CUBE或ROLLUP选项时使用。

10.1.6 HAVING 子句
HAVING 子句指定分组搜索条件。HAVING 子句通常与GROUP BY 子句一起使用。TEXT、 NTEXT 和IMAGE 数据类型不能用于HAVING 子句。其语法如下:
HAVING
HAVING 子句与WHERE 子句很相似,其区别在于其作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。

10.1.7 UNION 操作符
UNION 操作符将两个或两个以上的查询结果合并为一个结果集。它与使用连接查询合并两个表的列是不同的。使用UNION 操作符合并查询结果需要遵循两个基本规则:

  • 列的数目和顺序在所有查询中必须是一致的;
  • 数据类型必须兼容。
    其语法如下:
    | ()
    UNION [ALL]
    )
    [UNION [ALL] ) [...n] ]
    各参数说明如下:
  • | ()
    指明查询的详细说明或查询表达式。
  • UNION
    合并操作符。
  • ALL
    合并所有数据行到结果中,包括值重复的数据行。如果不指定此选项,则重复的数据行只显示一行。

 

 
 

上一篇:SQL Server数据库技术(59)  下一篇:SQL Server数据库技术(57)