oracle知识点
1.select ename,(salary+bonus)*12 from emp_hiloo;
如果算术表达式中有null值(无穷大),结果为null.任何和空值做运算结果都为null
2.select ename,(salary+nvl(bonus,0))*12 from emp_hiloo;
函数 nvl(p1,p2)是有返回值,空值转换函数
3.select * from emp where name ='cjq'
sql语句大小写不敏感,数据大小写敏感,如果数据是CJQ,则查不出结果
4.select * from emp where upper(name) ='CJQ'
忽略大小写,查找name为cjq的员工
5.时间between …and 包含边界值,not between and 比小的小,比大的大
6.slelect * from emp where name= 'cjq' and name = 'hll'
等同于
slelect * from emp where name in ('cjq','hll')
7.每个部门有哪些不同的职位?
select distinct deptno,job from emp_hiloo;
当distinct后面跟多列,去重后的结果是联合唯一.
8.where后面不可以跟列别名
9.select empno,job from emp where job like '_\_%' escape '\'
哪些职位的第二个字符是’_’?
这里_被看做下划线本身.
10.select ename,bonus from emp where bonus in (500,1000,null)
哪些员工的奖金是500,1000或没有奖金。
对于not in,集合里的值不能包含null,否则结果是no rows selected.
11 .数值函数
四舍五入
round(12.345,2) 12.35 小数点后面保留2位
round(12.545) round(12.545,0) 13
round(12.345,-1) 10
截取
trunc(12.345,2) 12.34
trunc(12.545) 12
trunc(12.545,-1) 10
日期函数
to_date—- to_char (date和字符之间的转换)
to_number —–to_char(number和字符之间的转换)
insert into test values (to_date('2008 08 08 08:08:08','yyyy mm dd hh24:mi:ss'))
select to_char(c1,'yyyy mm dd hh24:mi:ss') c1 from test;
select ename,hiredate from emp_hiloo where to_char(hiredate,'mon') = 'mar'
select ename,hiredate from emp_hiloo where to_char(hiredate,'mm') = '03'
12.
select max(age),min(salary)
from emp group by dep;
grouy by中的列不出现在select中,结果集不全,不会报错
13.select name ,age from emp where salary is not null group by dep having avg(nav(salary,0))>5000
where 是对表数据进行过滤,having是对分组后的数据进一步过滤
14.组函数忽略null,avg/sum针对数字操作,max/min对所有数据类型操作
15.selcet month_between(create_date,end_date) from emp
16.select add_month(end_date,-12) from emp
计算12个月之前的时间点
17.select last_day(create_date) from emp
计算本月最后一天
18.select coalesce(salary,name,100) from emp
如果salary不是空则返回其值,是空则返回name,都为空则返回100
19.decode函数和case when含义一样