黑马程序员sql 函数使用下篇

来源:互联网 发布:mac隐藏dock快捷键 编辑:程序博客网 时间:2024/05/16 18:17

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

 

数字函数(收集)//一般做报表时候用
abs()求绝对值
ceiling()舍入到最大整数 (汉字意味天花板)  ceiling(3.33)=4 ceiling(-3.2)=3
floor()舍入到最小整数(汉字意味地板)
round(number,精度)四舍五入   即舍入到离我最近的数   
字符串函数
len(字符串) ;//计算字符串的长度 select name,len(name) from users
lower()  upper() //转换 小写 、大写
ltrim()  //去掉字符串左侧的空格
rtrim()//去掉字符串右侧的空格        ltrim(rtrim("         s        "))
substring(string,start_position,length)//string主字符串,start_position为子字符串在主字符串中开始位置,length为子字符串的最大长度
如:select substring("abcdefg",2,4)

 

日期函数
getdate() 获取当前日期
dateadd(datepart,number,date) //计算增加以后的日期 参数date为待计算的日期,参数Number为要增加的量,参数datepart为以这个计量单位开始加 Number个量
datepart 年,季度,周,天,小时,秒 等片段

dateadd(month,-8,getdate())

datediff(datepart,startdate,enddate)//计算两个日期之间的差额 以datepart这个时间格式表示

员工入职时间select name,indate,datediff(year,indate,gatedate()) from users
某年入职员工个数select datediff(year,indate,gatedate()) 入职年数 ,count(*) 个数 from users group by datediff(year,indate,gatedate())
datepart(datepart,date)//返回一个日期的特定部分
当前的年份 select datepart(year,getdate())
每年入职员工个数select datepart(year,indate) 年,count(*) 个数 from users group by datepart(year,indate)

 

类型转换函数
cast(被转换表达式 as 数据类型)//select cast('2008-1-2' as datetime )
convert(数据类型,被转换的数据表达式)

空值处理函数
isnull(列名,要替代的值) //如果列名为空则用 要替换的值替换 ,否则还是列名的值//select isnull(name,佚名) from users


索引
 创建方法:在表设计器中点击右键->选择 索引/健->添加->在列中选择索引包含的列
优缺点:使用索引能够提到查询效率, 但是索引是占用空间的 ,它是在磁盘上重新建了一张表 把索引字段放到里面了 所以查询比较快 而且在添加、更新、删除数据的时候也要同时更新索引表 因此针对 insert update delete 这样的语句速度是慢的,只是在经常检索的字段上如where语句条件 上创建索引
注意:并不是创建了索引查询就会快的 例如针对 (*)这样的查询,任然还要全表扫描,有如 like 函数 类型转换等都是不怎么快的

join
inner join ,left join,right join
select  o.billno,c.name,c.age
from t_order as o join t_customer as c on o.custemid=c.id

例如:要求显示出年龄大于15的客户购买的订单号,客户姓名,客户年龄
select o.orderid, c.name,c.age from t_custemers as c join t_order as on
 o.custemersid=c.id where c.age>15
显示年龄大于平均年龄的顾客买的订单
select o.orderid,c.name from t_custemers as c join t_orders as 0 on o.custenmsid=c.id where c.age>(select  avg(age) from t_custemers)//为什么不能直接用avg(age) 还要用子查询   这些函数只能放在from 之前用的

 

 

 

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------详细请查看:http://net.itheima.com/

原创粉丝点击