您的位置:首页 > 职场人生

黑马程序员—学习笔记之SQL数据分组、限制结果集行数

2011-11-29 09:58 316 查看
---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
一、数据分组

(一)GROUP BY子句

1.按年龄进行分组统计人数:SELECT Fage,Count(*) FROM T_Employee GROUP BY Fage

2.GROUP BY 子句必须放到WHERE语句之后

3.没有出现在GROUP BY子句中的列是不能放到SELECT雨具后的列名列表中的(聚合函数中除外)

a)错误:SELECT FAge,FSalay FROM T_Employee GROUP BY FAge

b)正确:SELECT FAge,AVG(FSalay) FROM T_Employee GROUP BY FAge

(二)Having语句

SELECT Fage,Count(*) FROM T_Employee GROUP BY Fage HAVING COUNT(*)>1

HAVING不能代替WHERE。因为WHERE对原始数据过滤,HAVING对分组后的数据进行过滤。

二、限制结果集的行数

(一)查询语句

1.取工资排名前三的信息

SELECT TOP 3 * FROM T_Employee ORDER BY FSalary DESC

2.取工资排名第六到第九的信息

SELECT TOP 4 * FROM T_Employee WHERE FNumber NOT IN (SELECT TOP 5 FNumber FROM T_Employee ORDER BY FSalary DESC) ORDER BY FSalary DESC

3.Row_Number函数

SELECT * FROM

(

SELECT ROW_NUMBER() OVER(ORDER BY FSalary DESC) AS rownumber,

FNumber,FSalary,FAge, FROM T_Employee

)AS a

WHERE a.rownumber>=3 AND a.rownumber<=5

三、抑制重复数据

(一)修改表

1.给T_Employee表增加一个FSubCompany列

ALTER TABLE T_Employee ADD FSubCompany VARCHAR(20)

(二)关键词DISTINCT

DISTINCT不是针对一个列进行重复处理,而是消除完全重复的结果集

SELECT DISTINCT FDepartment,FSubCompany FROM T_Employee

(三)联合结果集(UNION ALL)

1.要求:上下两个表的查询的列的数目相同、对应的数据类型相容,列名可以不同

SELECT FName,FAge FROM T_Employee

UNION ALL

SELECT FName,FAge FROM T_TempEmployee

2.UNION查询的结果会自动去掉重复数据,效率很低。取消重复的方法是在UNION后加关键词ALL

3.实例:

a)查询正式工和临时工的最高年龄,代码如下:

SELECT '正式工最高年龄',MAX(FAge) FROM T_Employee

UNION ALL

SELECT '临时工最高年龄',MAX(FAge) FROM T_TempEmployee

b)查询员工工资与合计

SELECT FNumber,FSalary FROM T_Employee

UNION ALL

SELECT '工资合计',SUM(FSalary) FROM T_TempEmployee


---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ---------------------- 详细请查看:http://net.itheima.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: