黑马程序员——sql基础

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


一、数据分组:group by    只能写在where后面
   select age,count(*) from 表名
    group by age                      //根据age相同的数据进行分组,取出每组的个数
二、聚合函数不能出现在where语句中;
    Having后面可以跟聚合函数
三、having与where:where是对分组前信息的过滤,其后不可以跟聚合函数;
                   having是对分组后信息的过滤,其后可以跟聚合函数;能用的列是和select中能用的列是一样的
四、限制结果集行数:top(用于分页)
    1)select top 3 * from 表名 order by salary Desc //取出工资最高的前三名(top 3 表示取出前三行的信息)
五、数据的修改
    1)alter table 表名 add  字段 类型
        //alter  table  修改表;  add 加
六、消除重复的数据:distinct:它是针对整行字段的;如果删除的是多个字段,那么只删除完全相同的;
    如:select distinct age from 表名   //将age中重复的信息删除掉
七、联合结果集:union(将两个数据结果合并,默认将重复的数据删除)
                union all 将不会删除重复的数据  //使用union时,一般不要省略all
八、数字函数:
   1)ABS();求绝对值
   2)(ceiling英文意思为:天花板)ceiling(); 舍入为最大整数(也就是进一法)
   3)(floor英文意思为地板)floor();舍入到最小整数;
   4)round:(英文意思为:半径;也就是离我最近的数)round();四舍五入;
九、字符串函数:
  1)len:计算字符串的长度 
  2)lower(); //转为小写
  3)upper();//转为大写
  4)Ltrim();//字符串左侧的空格去掉
  5)Rtrim();//字符串右侧的空格去掉
  6)substring(string,start_position,length);截取字符串
      //string表示被截取的字符串;start_position表示开始的位置;length表示长度
十、日期函数;
    1)getdate();获取当前日期时间
    2)dateadd(datepart,number,date);计算增加以后的日期
         注:datepart为计量单位;number为增量;date为待计算的日期
         如:dateadd(month,3,getdate()):表示在当前日期上加三个月;
    3)datediff(datepart,startdate,enddate);//计算两个日期之间的差额;
       注意:datepart表示计量单位;startdate表示开始日期;enddate表示结束日期;
    4)datepart(datepart,date);返回一个日期的特定部分
十一、类型转换函数:cast  /  convert
      1)cast(expression AS date_type);  //注:expression表示被转换的表达式;  date_type表示被转换的类型
      2)convert(date_type,expression);//同上
十二、空值处理函数:isnull
       isnull(expression,value);//expression表示被判断的值;value表示:如果expression为空,则它的值就为value;否则为它本身;
十三、case函数(非常重要的函数)
      1)第一种用法:单值判断,相当于switch case
         case expression
         When value1   then   returnvalue1
         When value2   then   returnvalue2
         When value3   then   returnvalue3
         else   defaultreturnvalue
         end
        //注:expression表示需要判断的值;value1表示当它的值等于value1时,则返回returnvalue1; 
               else否则返回默认的值(defaultvalue)
      2)第二种:范围值判断
         case
         when age<18  then '未成年'
         when age>=18 and age<50  then '中年人'
         else ‘老年人’
         end
十四、全表扫描:对数据进行检索(select)效率最差的是全表扫描;也就是一条条的找;
十五、为了提高检索的速度,可以为经常进行检索的列添加索引,相当于创建目录;、(一般在where后面经常出现的字段,才添加索引) 
十六、索引的优缺点:
       1)优点:提高查询效率
       2)缺点:占据空间,添加、更新、删除数据的时候也需要同步更新索引,所以会降低Insert、Upate、delete的速度;
十七、即使创建了索引,仍然有可能进行全表扫描;比如:like、函数、类型转换
十八、表连接:join on
例子: select name,score from stu_info as a join stu_score as b on a.number=b.number
十九、子查询:将一个查询语句做为一个结果集供其他SQL语句使用;




练习

输出所有数据中通话时间最长的5条记录
select top 5 *
from call_record1
order by datediff(second,StartDateTime,EndDateTime) desc

输出所有数据中拨打长途电话号码(以0开头的)的总时长
select sum(datediff(second,StartDateTime,EndDateTime)) from call_record1
where TelNum like '0%'

输出本月通话总时长最多的前三个呼叫员的编号
select top 3 CallerNumber
from call_record1
where datediff(month,StartDateTime,EndDateTime)=0
group by  CallerNumber
order by sum(datediff(second,StartDateTime,EndDateTime)) desc

--输出本月通话次数最多的前三个呼叫员的编号
select top 3 CallerNumber,count(*)
from call_record1
where datediff(month,StartDateTime,EndDateTime)=0
group by  CallerNumber
order by  count(*) desc

输出所有数据的拨号流水,并且在最后一行添加总时长时长

--市内号码总时长
select '汇总',
convert(varchar(50),sum((case 
 when TelNum like '0%'
 then datediff(second,StartDateTime,EndDateTime)
 else 0
 end
)))as 长途通话时间,
convert(varchar(50),sum((case 
 when TelNum not like '0%'
 then datediff(second,StartDateTime,EndDateTime)
 else 0
 end
)))as 市内通话时间
from  call_record1
union all
select CallerNumber,TelNum,datediff(second,StartDateTime,EndDateTime) from call_record1

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值