分享
 
 
 

SQL Server 7.0 入门(三)

王朝mssql·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

数据排序

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中,所有左边表中的行都出现在结果数据集中,如果左边表中的某一行在右边表中没有匹配的行,则以空值取代右边表中的值和它连接。

语法如下:(ANSI 92)

Select <select_list>

FROM <table1> LEFT OUTER JOIN <table2>

ON <table1>.<column name> = <table2>.<column name>

4、 Right Outer JOIN

Right Out JOIN和Left Outer JOIN相似,不同的是把右边的表作为外部表(所有右边表中的行包含在结果数据集中)。

语法如下:

Select <select_list>

FROM <table1> RIGHT OUTER JOIN <table2>

ON <table1>.<column name> = <table2>.<column name>

5、 Full Outer JOIN

在Full Outer JOIN中,所有两个表中的行都包含在结果数据集中。

语法如下:

Select <select_list>

FROM <table1> FULL OUTER JOIN <table2>

ON <table1>.<column name> = <table2>.<column name>

Case语句

当对不同条件产生不同的结果值时,可使用Case语句。

Case语句计算所有定义的条件,并按条件是否为真而返回结果。

语法如下:

CASE [<input_expression>]

WHEN <when_expression> THEN <result_expression>

[ELSE <else_expression>]

END

Input_expression是任何有效的SQL Server表达式或布尔表达式。

When_expression是任何有效的SQL Server表达式或布尔表达式。这个表达式和Input_expression比较,如果Input_expression没有定义,则When_expression应该是一个布尔表达式。

Result_expression是任何有效的SQL Server表达式。如果When_expression和Input_expression的比较返回TRUE(如果定义了Input_expression)或When_expression的值为TRUE,则计算表达式,并返回其结果。否则计算Else_expression中的表达式,并返回其结果。

例如:

SELECT au_fname,au_lname,

State=CASE state

WHEN ‘CA’ THEN ‘California’

WHEN ‘KS’ THEN ‘Kansas’

END

FROM authors

UNION

UNION语句把两个或多个查询的结果组合成一个结果集。

语法如下:

SELECT <select_list>

FROM <table_list>

WHERE <join_condition>

UNION [ALL]

SELECT <table_list>

FROM <table_list>

WHERE <join_condition>

ALL关键字指定重复的数据也将包含在最终结果数据集中。如果需要,一个查询中可以有许多UNION语句。所有Select_list应该有相同数目的列,且是相同或兼容的数据类型。

Go命令 Go命令用来标志一个查询批处理(query batch)的结束。查询批处理是TSQL语句的集合,这些语句集合在一起执行。Go与Osql或SQL Server Query Analyzer一起使用。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有