sql-2
sql-2
排序
排序用order by ,排序是对获取的集合进行排序,而不是改变存储结构顺序
-
升序排序: asc(默认)
--默认升序所以可以不写asc select* from emp order by sal; select* from emp order by sal asc;
-
降序排序: desc
seletc * from emp order by sal desc;
- 多字段:在前面字段相等时,使用后面的字段排序
select ename, sal, comm
from emp
where deptno in (20, 30)
order by sal + nvl(comm, 0), ename desc;
输出结果:
空排序
- null在前面(first 变成last则null 在最后面)
select sal ,comm from emp order by comm nulls first;
函数
函数分为系统内置函数 自定义函数
- 单行函数:一条记录返回一个结果
- 多行函数 组函数 聚合函数 (重点) :多条记录 返回一个结果
单行函数
-
日期函数
-
日期函数: 注意区分 db数据库时间 ,java应用服务器的
时间。以一方为准-
oracle以内部数字格式存储日期年月日小时分钟秒
select sysdate from dual;
-
sysday /current_date以date 类型返回当前的日期
select sysdate from dual;
-
add_months(d,x)返回加上x月后的日期d的值
select add_months(sysdate,5)from dual ;
-
months_between(date1,date2) 返回date1和date2之间月的数目
select ename,months_between(sysdate,hiredate) from emp;
-
next_day(sysdate,星期一) 下周星期一(返回下一个周几)
select next_day (sysdate ,'星期三')from dual;
-
转换函数
-
to_date(c,m)->字符串指定形式转换成日期
- yyyy代表年yer
- mm代表月months
- dd 代表天day
- hh24代表24小时hh12 代表12小时
- mi 代表分钟
- ss代表秒
select to_date ('1998-01-10 00:00:00','yyyy-mm-dd hh24:mi:ss')time from dual
-
to_char(d,m)日期指定格式转换为字符串
select to_char(sysdate,'yyyy-mm-dd')from dual ;
select *from emp where hiredate like '%82%';
--82年入职的员工信息
select *from emp where to_char(hiredate,'yyyy')='1982';
其他函数
-
nvl(x,y)如果x=null输出y,否则输出x
select (sal+nvl(comm,0))*12 年薪 from emp ;
comm为null时显示为0,否则null与任何值相加都为null,无法计算年薪
-
decode 函数
书写格式
decode(条件,值1,结果1,值2 ,
结果2,….)select ename,decode(deptno, 10,'十',20,'二十')from emp;
select
ename,sal,deptno,
decode(deptno,
10,
sal * 1.1,
20,
sal * 1.08,
30,
sal * 1.15,
sal * 1.2) raisesal
from emp;
- case when then else end
select ename,
sal,
deptno,
(case deptno
when 10 then
sal * 1.1
when 20 then
sal * 1.08
when 30 then
sal * 1.15
else
sal * 1.2
end) raisesal
from emp;
多行|聚合|组函数
avg 、sum、 min、max、count
-
avg(平均值)
select avg(sal)from emp ;
-
sum(求和)
select sum(sal) from emp;
-
min(最小值)
select min (sal) from emp;
-
max(最大值)
select max (sal)from emp ;
-
count(统计记录数)
select count(comm)from emp;