SQL Server 7.0 入门(三)
时 间:2008-05-24 07:48:22
作 者:UMVSoft整理 ID:1445 城市:上海
摘 要:
正 文:
数据排序
ORDER BY子句按指定的顺序对数据排序(ordering data)。它要求一个列名字列表或非负整数列表来指定列的位置。分别用ASC代表升序,DESC代表降序,默认为ASC。
限制返回行的数目
不使用Where子句而限制结果中的行数是可能的。“TOP”子句能按指定数目或百分值来限制行数。
数据分组和计算聚合函数
聚合(aggregate)函数计算表中数据的总和。SQL Server提供以下的聚合函数:
· AVG 这个函数计算平均值。语法如下:
AVG ([ALL | DISTINCT] expression)
关键字DISTINCT只用来计算不同值的平均值,如果有许多重复值,这些值只计算一次,默认为ALL。
Expression可以是涉及一列或多列的算术表达式。
· MIN 这个函数查找所提供表达式中的最小值。语法如下:
MIN (expression)
· MAX 此函数的功能是在提供的表达式中查找最大值。语法如下:
MAX (expression)
注意: 如果地字符串类型使用MIN和MAX,则输出依赖于为SQL Server定义的顺序。MIN和MAX不能在位上使用。
· SUM SUM计算所有数据值的和。语法如下:
SUM ([ALL | DISTINCT] expression)
注意:SUM和AVG只能用于数值数据类型。
· COUNT 计算表达式值的数目。语法如下:
COUNT ([ALL | DISTINCT] expression)
COUNT有另一种用法,它可以返回被选择的行数。
如:Select NumRows = COUNT (*) FROM titles
聚合函数忽略所有空值,但COUNT(*)除外。尽管所有聚合函数的计算基于无空值的情况,然而COUNT(*)计算所有的行(包括有空值的行)。
1. GROUP BY子句
GROUP BY子句在被定义的数据的基础上建立比较小的组,并且对每一个组进行聚合函数计算。换句话说,它产生每一组的总体信息。GROUP BY可以把多于一列当成组合列(Grouping Columns)。它总结组合列中不重复值的信息。
使用了GROUP BY子句的选择列表中只能包含以下项:
· 常量值。
· 组合列。
· 表达式。每个表达式为每组返回一个值(如聚合函数)。如果一列除了在组合列中外,还在选择列表中,则它有多个值给组合列的每一个不重复值,这种结构类型是不允许的。
2. GROUP BY和HAVING
HAVING子句用来向使用GROUP BY子句的查询中增加数据过滤准则。HAVING的用法和Select中的Where子句一样。在一个包含GROUP BY子句的查询中使用Where子句是可以的。HAVING和Where有相同的语法。HAVING和Where的不同这处是:
· 在Where子句中,在分组进行以前,去除不满足条件的行,在HAVING子句中,在分组之后条件被应用。
· HAVING可在条件中包含聚合函数,但Where不能。
注意:GROUP BY和HAVING子句不能使用文本或图像数据类型。
3. COMPUTE BY子句
COMPUTE BY子句可以得到详细或总的记录。它把数据分成较小的组,然后为每组建立详细记录结果数据集(象Select),它也可为每组产生总的记录(象GROUP BY)。
在COMPUT BY中,定义BY子句不是必要的。如果没有定义BY子句,则认为整个表为一个组,并且只有两个结果数据集产生,一个拥有所有详细记录,另一个只有一行,它拥有总记录。
注意:当在COMPUTE中使用BY时,则要求在所有组合列中包含ORDER BY。
Cube和Rollup操作
CUBE和ROLLUP操作可比简单的GROUP BY产生更多的聚合值。在产生交叉标签报告(cross tab reports)时,这些操作非常有用。如果查询使用n个组合列,则有2n个计算聚合的组合。
从多个表中访问数据
我们已讨论了如何访问单个表中的数据。从多个表中访问数据也是可能的。从多个表中访问数据称为连接表(joining a table)。
1、 CROSS JOIN(笛卡尔积)
CROSS JOIN是简单地、不加任何约束条件地把表组合。CROSS JOIN后结果的行数是连接前两个表行数的乘积。如果对两个分别有好几千行的表进行连接,则结果是不可想象的。
2、 INNER JOIN
INNER JOIN是组合两个表最常用的方法。INNER JOIN是基于一个判别式进行的,这个判别式称为连接条件。连接条件和Where子句一起定义。连接条件由来自两个表中的列组成,并使用一个比较条件来对列的值进行比较。通过比较的值包含在结果数据集中,以下是Inner JOIN的语法:
语法1:(ANSI 92)
Select <select_list>
FROM <table1> INNER JOIN <table2>
ON <table1>.<column name> = <table2>.<column name>
语法2:
Select <select_list>
FROM <table1>,<table2> Where <table1>.<column name> = <table2>.<column name>
在FROM 子句中可为表定义别名,并在任何地方都可用别名代替真名。
注意:如果作为连接条件的列中有空值,则空值不能和任何值匹配,因此结果中不包含有空值的行。
3、 Left Outer JOIN
在Inner JOIN中,只有在两个表中匹配的行才能在结果数据集中。但在Left Outer JOIN中,所有左边表中的行都
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
ORDER BY子句按指定的顺序对数据排序(ordering data)。它要求一个列名字列表或非负整数列表来指定列的位置。分别用ASC代表升序,DESC代表降序,默认为ASC。
限制返回行的数目
不使用Where子句而限制结果中的行数是可能的。“TOP”子句能按指定数目或百分值来限制行数。
数据分组和计算聚合函数
聚合(aggregate)函数计算表中数据的总和。SQL Server提供以下的聚合函数:
· AVG 这个函数计算平均值。语法如下:
AVG ([ALL | DISTINCT] expression)
关键字DISTINCT只用来计算不同值的平均值,如果有许多重复值,这些值只计算一次,默认为ALL。
Expression可以是涉及一列或多列的算术表达式。
· MIN 这个函数查找所提供表达式中的最小值。语法如下:
MIN (expression)
· MAX 此函数的功能是在提供的表达式中查找最大值。语法如下:
MAX (expression)
注意: 如果地字符串类型使用MIN和MAX,则输出依赖于为SQL Server定义的顺序。MIN和MAX不能在位上使用。
· SUM SUM计算所有数据值的和。语法如下:
SUM ([ALL | DISTINCT] expression)
注意:SUM和AVG只能用于数值数据类型。
· COUNT 计算表达式值的数目。语法如下:
COUNT ([ALL | DISTINCT] expression)
COUNT有另一种用法,它可以返回被选择的行数。
如:Select NumRows = COUNT (*) FROM titles
聚合函数忽略所有空值,但COUNT(*)除外。尽管所有聚合函数的计算基于无空值的情况,然而COUNT(*)计算所有的行(包括有空值的行)。
1. GROUP BY子句
GROUP BY子句在被定义的数据的基础上建立比较小的组,并且对每一个组进行聚合函数计算。换句话说,它产生每一组的总体信息。GROUP BY可以把多于一列当成组合列(Grouping Columns)。它总结组合列中不重复值的信息。
使用了GROUP BY子句的选择列表中只能包含以下项:
· 常量值。
· 组合列。
· 表达式。每个表达式为每组返回一个值(如聚合函数)。如果一列除了在组合列中外,还在选择列表中,则它有多个值给组合列的每一个不重复值,这种结构类型是不允许的。
2. GROUP BY和HAVING
HAVING子句用来向使用GROUP BY子句的查询中增加数据过滤准则。HAVING的用法和Select中的Where子句一样。在一个包含GROUP BY子句的查询中使用Where子句是可以的。HAVING和Where有相同的语法。HAVING和Where的不同这处是:
· 在Where子句中,在分组进行以前,去除不满足条件的行,在HAVING子句中,在分组之后条件被应用。
· HAVING可在条件中包含聚合函数,但Where不能。
注意:GROUP BY和HAVING子句不能使用文本或图像数据类型。
3. COMPUTE BY子句
COMPUTE BY子句可以得到详细或总的记录。它把数据分成较小的组,然后为每组建立详细记录结果数据集(象Select),它也可为每组产生总的记录(象GROUP BY)。
在COMPUT BY中,定义BY子句不是必要的。如果没有定义BY子句,则认为整个表为一个组,并且只有两个结果数据集产生,一个拥有所有详细记录,另一个只有一行,它拥有总记录。
注意:当在COMPUTE中使用BY时,则要求在所有组合列中包含ORDER BY。
Cube和Rollup操作
CUBE和ROLLUP操作可比简单的GROUP BY产生更多的聚合值。在产生交叉标签报告(cross tab reports)时,这些操作非常有用。如果查询使用n个组合列,则有2n个计算聚合的组合。
从多个表中访问数据
我们已讨论了如何访问单个表中的数据。从多个表中访问数据也是可能的。从多个表中访问数据称为连接表(joining a table)。
1、 CROSS JOIN(笛卡尔积)
CROSS JOIN是简单地、不加任何约束条件地把表组合。CROSS JOIN后结果的行数是连接前两个表行数的乘积。如果对两个分别有好几千行的表进行连接,则结果是不可想象的。
2、 INNER JOIN
INNER JOIN是组合两个表最常用的方法。INNER JOIN是基于一个判别式进行的,这个判别式称为连接条件。连接条件和Where子句一起定义。连接条件由来自两个表中的列组成,并使用一个比较条件来对列的值进行比较。通过比较的值包含在结果数据集中,以下是Inner JOIN的语法:
语法1:(ANSI 92)
Select <select_list>
FROM <table1> INNER JOIN <table2>
ON <table1>.<column name> = <table2>.<column name>
语法2:
Select <select_list>
FROM <table1>,<table2> Where <table1>.<column name> = <table2>.<column name>
在FROM 子句中可为表定义别名,并在任何地方都可用别名代替真名。
注意:如果作为连接条件的列中有空值,则空值不能和任何值匹配,因此结果中不包含有空值的行。
3、 Left Outer JOIN
在Inner JOIN中,只有在两个表中匹配的行才能在结果数据集中。但在Left Outer JOIN中,所有左边表中的行都
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)
- Access快速开发平台--让有权...(11.04)
- Access快速开发平台--审批选...(11.01)
- ACCESS两张表先各自排序,然后...(10.31)
- Access对子窗体数据进行批量+...(10.30)
- SqlServer中如何用SQL命...(10.29)
- Access报表中的分组功能用代码...(10.28)
- 用Access计算库存结余的一个方...(10.26)
- 最精简的组合框行来源数据快速输入(...(10.25)