文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程MSSQL怎样使用SQL Server来过滤数据
精品推荐
特别推荐
·常用SQL语句词典
·结束SQL注入隐患3招
·掌握SQL Server数据库的实用技巧
·SQL的简单查询
·快速解决SQL Server“安全疑难”相关问题
·SQL Server 2005:你应知道的13件事
·实例解析:减少SQL日志大小的三个好方法
·使用SQL2000将现有代码作为Web服务提供
·sql server 2000数据库置疑的解决方法
·SQL Server安全问题全攻略之口令
·XP上不能安装MicrosoftSQLSERVER2000吗
·解析Microsoft Sql Server中的like语句
·推荐;适合SQL初学者学习的SQL FAQ集锦
·SQL Server 2005 中的分区表和索引
·查询及删除重复记录的方法大全
·详细介绍优化SQL Server 2000的设置
·关于SQL SERVER 日志满的处理方法
·使用SQL Server 2000索引视图提高性能
·SQL server 2005安装问题汇总
·解决用sa登录sql 2005失败的问题
热点TOP10
·SQL Server 2005免费版本下载排行居首
·常用SQL语句词典
·在SQL Server 2000里设置和使用数据库复制
·SQL Server 2005 中的分区表和索引
·SQL server 2005安装问题汇总
·SQL的简单查询
·Sql数据库MDF数据文件数据库恢复
·SQL语法大全
·sql server 2005 排序规则与大小写敏感
·查询及删除重复记录的方法大全
·sql server日期时间函数
·在Windows xp系统上安装了SQL server服务器版
·sql server 2000数据库置疑的解决方法
·Sql server存储过程和C#分页类简化你的代码
·SQL Server 练习题
·SQL Server 2000安装和基本框架
·SQL安装问题总结
·SQL2000 数据库安装说明
·详细介绍优化SQL Server 2000的设置
·解决方案 用户 sa 登录失败

怎样使用SQL Server来过滤数据

日期:2007年11月4日 作者: 查看:[大字体 中字体 小字体]


我们知道,关系型数据一般以规范化的形式保存,也就是说你应该尽可能少地重复数据;在正常情况下,表与表之间仅通过各种键值实现关联。进一步地讲,规范化的含义就是:你不能在数据库中保存计算后的值,而你只能在需要的时候临时计算数据库中保存的值。

对数据进行某些分析通常是很重要的。比方说,你或许想知道哪些产品的定单最多或者哪些定单的利润最大。这些问题都要求你针对自己的SQL语句创建执行过滤规则的公式。其中最重要的语句之一就是GROUP BY子句。

◆Northwind数据库中的定单

Northwind数据库是包含在SQL Server安装软件中的两个示范数据库。这个数据库虽然谈不上完美无缺但也足够满足我们讨论GROUP BY语句的目的了。原因之一是它工作原理清晰,运行良好,包含了一整套标准的数据表,比如Customers(客户)、Orders(定单)、Order Details(定单细节)和处理定单的ProdUCts(产品)。

◆表的结构模式

如果你想查看各个定单的OrderID和ProductID ,以下的SQL命令可以满足要求:

Word-WRAP: break-word" bgColor=#fdfddf>以下为引用的内容:
SELECT o.OrderID, od.ProductID
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID

这样你就通过OrderID字段把Orders和Order Details连接了起来。给出的结果列表即显示各定货条目的OrderID和ProductID。

你可以从这个列表中找到条目数量最大的定单。可是,再想想,要能简单地要求数据库计算出需要的条目数目不更方便吗?如果你不关心单个条目而只想知道订购条目数量最大的定单,那么你可以采用以下的SQL语句:

以下为引用的内容:
SELECT o.OrderID, Count(od.ProductID) as NumItems
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID

这样就可以总计出产品的数量并用一个名为NumItems的新字段来显示总数。可是,如果你执行该语句则可能得到以下错误:

以下为引用的内容:
Server: Msg 8118, Level 16, State 1, Line 1

选择语句中的'o.OrderID'列是无效的,因为它没有包含在汇集函数之内而且没有相应的GROUP BY 子句。

在这种情况下,你实际上在总计ProductID,但OrderID却没有被计算总和或者有其他操作施加于其上。

其实这个示例中计算的并不是订购产品条目的总数而是特定订购产品条目的数目。换句话说,你可以看到某一特定定单包括三种产品,但却并不能表示客户各订购了5种。你得到的正是按照定单统计的产品总量。你应该用GROUP BY字句来查看订购产品的总数。

◆使用GROUP BY

使用GROUP BY就好比提出下面的问题:“我如何查看数据?“如果答案是“按照”某种要素来看那么你就可能用到GROUP BY。就我们的例子来说,你希望按照定单查看产品的数量,所以你就可以用OrderID字段进行分组。此外,采用ORDER BY 子句可以更容易地找出订购条目最多的定单。新的查询语句如下所示:

以下为引用的内容:
SELECT o.OrderID, Count(od.ProductID) as NumItems
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID
GROUP BY o.OrderID
ORDER BY NumItems DESC

现在你就得到问题的答案了。

◆理解规则

GROUP BY具有相当高的灵活性,当然你还得遵守相应的语法规则。比如说,你可以在ORDER BY 子句中包含多个表列。如果你想查看每一客户订购产品各个类型的数量,那么你必须通过定单创建查询把客户连接到产品。图A显示的4表连接显然就要用到了。之后你要根据客户和产品进行分组同时对Order Details表内的Quantity列计算总和。查询语句如下:

以下为引用的内容:
SELECT c.CompanyName, p.ProductName, Sum(od.Quantity) as TotalBought
FROM Customers c, Products p, Orders o, [Order Details] od
WHERE
c.CustomerID=o.CustomerID AND
o.OrderID=od.OrderID AND
od.ProductID=p.ProductID
GROUP BY c.CompanyName, p.ProductName
ORDER BY CompanyName, TotalBought DESC

查询结果显示出数据库内每一客户购买各类产品的总数。

同时,你还可以在查询中置入多个汇集列。例如,假设你想查看的定单列表要显示单一项目的最大购买量以及该定单的项目总数,那么以下的语句就可以用Max函数来显示单一项目的最大订购量。这种方法还能对所购项目总量求和。

以下为引用的内容:

SELECT o.OrderID,
Max(od.Quantity) as TopItem,
Sum(od.Quantity) as TotalBought
FROM
Orders o,
[Order Details] od,
Products p
WHERE
o.OrderID = od.OrderID AND
od.ProductID=p.ProductID
GROUP BY o.OrderID
ORDER BY TotalBought DESC

(出处:清风下载学院






上一篇:快速理解Oracle归档模式的命令及参数

下一篇:在SQL Server中处理空值时涉及的三个问题

怎样使用SQL Server来过滤数据 相关文章:
·怎样的女孩才是真正的爱你
·十进制数怎样转成十六进制数?
·我是怎么进入他人计算机的
·怎样永久激活Windows Vista?
·IE6和IE7不能显示PNG图像怎么办?
·[赚钱]教你怎么刷官职
·怎样清除硬盘及系统垃圾文件?
·怎样彻底删除多余的输入法
·高手教你怎样在网上轻松赚钱
·怎么才能知道电脑中有没有安装Directx9.0c
怎样使用SQL Server来过滤数据 相关软件:
·红太阳是怎样升起的:延安整风运动的来龙去脉
·老板是怎样炼成的
·我是怎样诱骗漂亮女孩的
·教你怎么听4
·怎样欣赏艺术摄影
·DIY--怎样安装ADSL
·怎样用ASP和COM进行Web编程 PDG
·轻功是怎样炼成的(沙子)
·我就是赖你,怎样?!
·教你怎么听2

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn