----------数据表中的null
如果含有null值,需要特别注意
1.在计算表达式中,如果某列的值为空,则计算的结果都为空。
select monthSal*12+奖金 as yearMoney from emp;
如果某个人没有奖金,此行值为null,则 yearMoney 为空。
解决方案使用 滤空函数 nvl: monthSal*12+nvl(奖金,0) as yearMoney from emp;
2. 判断是否为空 用 is null / is not null
-----------关于distinct
distinct如果作用于多列,只有多列值全部相同时,才会被认为相同
在这里我要介绍一下很重要的函数,转换函数 to_char();
用命令 select sysdate from dual 可以得到系统时间 2012/2/26。在oracle中日期格式默认是是yyyy-dd-mm,因此有些不符合中国人的yyyy-mm-dd习惯,如何修改,用to_char,即 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual,得到
2012-02-26 10:35:15,其中的hh24表示24小时制,hh12表示的是12小时制。有add_month(,dn),last_day(n)几个日期函数,这在做报表的时候特别有用的。
to_char()不仅可以转换日期,还可以转换薪水,to_char(columnName,'L99999.99'),L99999.99中的L表示本地货币,前面5个9表示小数点前有5个位数,不足的不显示,小数点后面2个9表示两位小数。其中L可以被C(国际货币符号)、$(美元)。具体用法可以查看其他资料,太多了。
在微软的SQL Server 也有类似的函数,为了便于自己学习,也总结了一下,对照学习有好处
select upper('abc')
select power(3,3) ---27 a的b次方
select round(3.513,2)
select substring('abc',1,2) ---截取字符串长度
select len('avbc') --获得字符串长度
select getdate()
select dateadd(d,3,getdate()) --在时间上加上几天,其中d可以换成yy,m等
select year(getdate()) --获得年份
select day(getdate()) --获得天
select month(getdate()) --获得月份
select convert(nvarchar(100),getdate(),111); ---2012/02/28 转换函数,其中,111是可以改变的,可以看参考文章
接下里是oracle中一些常用的字段类型,这都是很基础的啦!
char:字符类型,虽然比较占用空间, 但效率很高,查询速度极快,因为是整个匹配,常用于存放长度一定的数据,比如身份证,学号。
varchar2: 变长字符类型,虽然节约空间,但查询速度比较慢,可以存放文章、新闻等等。
number:数字类型之一,最大值的是10的38次方,如果是number(5,2)则表示的是该数字 5位有效数,2位小数,如果是number(5) 表示一个五位有效数字的整数。事件类型date,起哄timestamp是对date的扩展。blob 是用来存储二进制数据,如图片、声音,但通常我们是用来存储这些数据的地址的,如果这些图片声音特别重要,我们则可以直接存放在数据库中。