黑马程序员-ADO.net-SQL语句复习大全(二)

来源:互联网 发布:淘宝的管理团队 编辑:程序博客网 时间:2024/05/21 10:49

                                                ------- Windows Phone 7手机开发.Net培训、期待与您交流! -------

呵呵,这次的笔记代码比较多咯,要知道用记事本写代码,你懂的,没事一如既往的努力,没有人给我加油,我自己给自己加油。我就是最棒的。噢耶

作为程序员很多时候喜欢在深夜学习,因为安静,也因为心灵的宽慰与舒坦,一个人夜深了,敲着代码,累了就听一下,高进的“夜的钢琴曲” 很好听哦,听着舒服,推荐给大家哈,好啦学习啦.


1.数据的分组 group by (放在where之后)
 select FAge,count(*) from person group by Fage根据年龄分组,然后记录不同年龄的个数
 select FAge,FName,count(*) from person group by Fage(错误),前面的字段必须在group by中出现
 select FAge,AVG(FSalary) from person group by Fage,聚合函数可以包括
 2.Having语句
 select FAge ,count(*) from person where (count(*)>1) group by FAge (where中不能包含聚合函数)
 select FAge ,count(*) from person group by fage  having count(*)>1 出现在having中的字段必须放在select中
 having是对分组后的信息的过滤所以不存在代替where
 
 3.限制结果集的行数(应用在数据分页的作用)
 select * from person order by FSalary DESC,按照工资排序
 select top 3 * from person order by FSalary DESC,按照工资排序前3名
 工资从高到低排序检索从第六名后的三个人的信息:(子查询)
 select top 3* from person where FNumber not in
 (select top 5 FNumber from person order by fsalary desc)   order by fsalary desc)
 
 休息一下,吃饭去了。出去跑了一下一个上午又快过了,家里的事情还真是多呀,好啦,开始吧,别浪费时间了,要学的还很多呢
 人呀,不逼自己是不行的,至少是学生时期。
 开始时间11:36
 
 4.去掉重复数据
 alter table person add FSubCompany vachar(20),给表增加字段alter table修改表,增加部门信息
 select distinct FDepartment from person 查找部门信息不重复的
 两个字段不加distinct,和加distnct,distinct消除完全相同的信息
 
 5.联合结果集union
 两条查询语句中间加union把查询结果汇总,上下两个字段的数量要一致,类型要相容
 select FName ,Fage,0 from person
 union (all)
 select FName,fage,Fsalary from person
 缺少的时候可以补足。
 单个字段之间的union将重复的数据合并了,容易的导致数据丢失
 不想重复数据合并,中间加union all
 
 6.案例1,要求查询员工的最低年龄和最高年龄,临时工和正式工要分别查询
 select '正式员工最高年龄',MAX(fage)  from person
 union all
 select '正式员工最低年龄',min(fage)from person
 union all
 select '临时工最高年龄', Max(fage)from person
 union all
 select '临时工最低年龄',min(fage) fage person
 7.案例2  查询每位正式员工的信息,包括工号,工资,并且在最后一行加上所有员工工资额合计
 select FNumber,FSalary from person
 union
 selecet '工资合计',sum(FSalary) from person
 
 8.数据库函数
 数字函数
 ABS() 求绝对值 select abs(-3);
 geiling():摄入到最大整数。3.33舍入为4,-3.33舍入为-3
 floor():舍入到最小整数。3.33舍入3,2.89舍入到2,-3.89舍入到-4
 round(-3.61,0)四舍五入。舍入到“离我半径最近的数”,后面0指的是精度
 
 9.字符串函数
 len():计算字符串长度
 select len('abc')或者select FName,len(FName)from person
 lower(),upper():转小写,转大写
 ltrim()字符串左侧的空格去掉
 rtrim(); 字符串右侧的空格去掉
 select ltrim('     bb      '),rtrim('     bbb         '),ltrim(rtrim('    bb    '))两边都去掉空格
 
 substring(string, start_position,length) string为主串,
 start_position为子串在主串中的起始位置,lenght为子字符串的最大长度
 例如:substring('abcdef111',2,3),2是开始的位置,3表示截取的长度
 select FName ,substring(FName,2,2) from person
 
 10.日期函数
 getdate(); 取得当前日期
 dateadd(datepart,number,date),计算增加以后的日期,daata为待选计算日期,number为增量
 select dateaaa(day,3,getdate()); 在当前日期的时间3天
 select dateadd(hh,1,getdate());  在当前日期上加1个小时
 
 datediff(datepart,startdate,enddate),计算两个日期的差额,datepart是计量单位,是天还是小时
 select datediff(hh,getdate(),dateadd(day,-3,gedate()));
 求每年入职员工的个数
 select datediff(year,FIndate,getdate()), count (*) from person
 group by datediff(year,FIndate,getdate());
 datepart(datepart,date):返回一个日期的特定部分。
 select datepart(year,FInDate),count(*) from person
 group bu Datepart(year,FInDate);计算每年入职的个数
 
 11.类型转换函数 
 cast(expression as data_type) expression是表达式,type是类型 
 convert(data_type,expression)   就是反过来写了
 right(FIdNumber,3) as 后三位
 cast(right(FidNumber,3) as integer)as 后三位的整数形式
 cast(right(FidNumber,3) as integer)+1 后三位加1
 convert(integer,right(FidNumber,3))/2 as 后三位除以2
 
 12.空值处理函数
 select isnull(FName,'佚名') as 姓名 from preson,如果是空就显示佚名
 
 13.流控制函数
 case函数用法,类似于switch case类型     例如:select FName,
 case experssion {
 when value1 then returnvalue1    case FLevel
 when value2 then returnvalue2               when 1 then '普通用户’
 else defaultreturnvalue3    when 2 then '会员'
 end     when 3 then 'VIP'
     else '未知客户类型'
     end
   }as 客户类型 from person
 select FName,
 {
 case      如果有判断条件则case后不带数据
 when FSalary<2000 then '低收入'
 when FSalary>=2000 and FSalary<5000 then '中等收入'
 else '高收入'
 end
 } as 收入水平 from person



原创粉丝点击