Oracle数据库查询select 续
exists 存在即保留,存在即合法
select *
from emp
where exists (select deptno from dept where dname = 'SALES');
select *
from emp
where exists (select deptno
from dept
where dname in ('SALES', 'ACCOUNTING')
and emp.deptno =dept.deptno);
–单行函数:一条数据返回一个结果
当前时间
select sysdate from dual;
select current_date from dual;
加减日期
select sysdate+2 from dual;
add_months() 月份相加
add_months(hiredate,3)
months_between度过几个月
months_between(sysdate,hiredate)
last_day前月的最后一天
select last_day(sysdate) from dual
下一个星期几是几号
select next_day(sysdate,‘星期几’) from dual;
to_date(‘字符串’,‘识别日期字符串模板’)
select to_date(‘2019-07-30 10:11:13’,‘yyyy-mm-dd hh24:mi:ss’)+3 from dual;
设定一个特定的时间(用一个特定的时间字符串转换为日期)
select to_date(‘2019年07月30日 10:11:13’,‘yyyy"年"mm"月"dd"日" hh24:mi:ss’) from dual;
将日期转为特定格式的字符串 to_char()
select to_char(sysdate,‘yyyy"年"mm"月"dd"日" hh24:mi:ss’) from dual;
组函数: count() sum() max() min() avg()
对确定的结果集使用函数得结果
注意: select后 组函数不能和非组函数或分组字段一起使用
注意: where 不能使用组函数
分组
select 数据 from 数据源 where 行过滤条件 group by 分组字段 having 组过滤信息 order by 排序字段;
执行顺序: from --where–group by–having–select–order by
如果有分组,select后只能跟分组字段和组函数
行转列
select name,
min(decode(course, '语文', score)) "语文",
max(decode(course, '数学', score)) "数学",
avg(decode(course, '英语', score)) "英文"
from tb_student
group by name;
rowid
去重,没有主键,没有唯一的字段,可以存在多条数据重复,想要达到去重,可以使用rowid
例:
delete from tb_student
where not rowid in
(select min(rowid) from tb_student group by name, course, score);
rownum
分页查询.
例:
select empno, ename, sal,n
from (select empno, ename, sal, rownum n
from (select empno, ename, sal, rownum from emp order by sal))
where n >= 5
and n <= 8;