Oracle语句学习
(1)select * from dual中的dual到底是什么?
在sql-developer中测试发现,dual只是一个包含一列,永远只返回一条数据记录的虚拟表。使用dual,是为了构成select的语法规则。当我们需要查询一些不需要表名的数据时,但为了保证sql语法正确性,我们需要添加dual。
比如:
【1】查询当前用户
select user from dual;
【2】查询Oracle的系统时间
select sysdate from dual;
(2)trunc(number)函数
trunc()的作用是按照一定的规则截取传入的参数
【1】select trunc(123.456) from dual; 返回123 即直接去除小数位
【2】select trunc(123.456,2) from dual; 返回123.45 将小数点后2位的数字截去,说减去可能更容易理解
123.456-0.006=123.45
【3】select trunc(123.456,-2) from dual; 返回100 将小数点前2位的数字减去,即123.456-23.456=100
(3)nvl(a,b)函数
如果a为null值时,则返回b。如果a不为null值时,则返回a本来的值。
用java语言来概括就是
return a==null?b:a;
(4)sign(a)函数
如果a是负数,则返回-1
如果a是0,则返回0
如果a是正数,则返回1
(5)decode(key,x1,y1,x2,y2,.....xn,yn,defaultValue)函数
含义如下:类似于switch语句
switch(key){
case x1:
return y1;
case x2:
return y2;
.......
case xn:
return yn;
default:
return defaultValue;
}
【1】查询某班男生和女生的数量
通常我们这么写:
select count(*) from 表 where 性别 = 男;
select count(*) from 表 where 性别 = 女;
之后好需要进行union
现在利用decode,可以这样写
select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表