select *from emp where comm in(3000,5000) or comm is null; 这里就是将奖金里3000,5000还有为空的查询出来.
select *from emp where deptno not in(10); 这里则是将不是10部门的所有人员查询出来.
select *from emp order by sal +desc(降序); 将工资作为升序,降序排列.
select ename,sal,sal*12 年薪 from emp order by 年薪; 这里by后面可以直接用别名. 也可以用数字就是低几列.
select * from emp order by comm desc nulls last; 这里就是将那些值为null的数据也按降序排列起来.
select *from emp where ename like 'A%';这里就是将姓名为A开头的人员查询出来,还有一个'%a%',这个就是将名字中有A的人员查询出来. select *from emp where ename like 'K___'; 这里就是将K开头名字长度为4的查询出来. _代表字符. 名字注意要大写.
select *from emp where ename like '%\%%' escape '\'; escape 转义符. 因为\他在oracle中有其他意义通过转义拿到他本身的含义.
函数
select upper/lower('sds') from dual; 大小写的转化.
select substr('what happened just now',5) from dual; 从第四个开始截取字符串.
select substr('what happened just now',5,9) from dual 截取字符串中5-9的字符.
select length('aaaa') from dual; 查询前面字符串的长度为多少.
select instr('whsb happened just now','st') from dual; 查询后面st在前面字符串中所在的位置. 他查询的是S的位置.加T是给它具体的信息.找到T前面那个S.而不是B前面那个S.
select round(192.168,0),round(192.268,1),round(192.168,2)round(192.168,-1)from dual; 四舍五入. -1时结果为190.也要四舍五入
select trunc(192.168,0),trunc(192.168,1),trunc(192.168,-1) from dual; 截取多少位.-1时为190.
select sysdate from dual; 获取当前系统的时间.
select trunc(sysdate,'yyyy') from dual; 截取一系列的时间.
select trunc(sysdate,'mm') from dual;
select trunc(sysdate,'d') from dual;
select trunc(sysdate,'dd') from dual;
select trunc(sysdate,'hh') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 将当前时间的格式改为字符型.
select systimestamp from dual; 查询系统时间. 包括微秒.时区.
select sysdate+1/-1 from dual; 当前日期加一天或者减一天.
select last_day(sysdate) from dual; 查询当前时间的最后天是多久.
select ename,round((sysdate-hireddate)/365) from emp; 查询工作了多久.
select ename,months_between(sysdate,hiredate) from emp; 查询在他入职到现在有多少个月.
select add_months(sysdate,10) from dual; 这里查询的是10个月后的今天.
select next_day(sysdate,'星期一') from dual; 这里就是下个星期一是什么时候.
select nullif('aa','aa'/'cc'); 这里就是判断他们是否相等,相等返回true不相等返回第一个.
select ename,sal,comm,coalesce(comm,sal) from emp; 先看comm是否为空.为空的话再看sal是否为空. 如果不是为空那就输出.
1 select ename,job,sal,
2 case job when 'PRESIDENT' then sal+1000
3 when 'MANAGER'then sal+800
4 else sal+400
5 end
6* from emp
1 select ename,job,sal,decode(job,'PRESIDENT',nvl2(sal,sal,0)+1000,
2 'MANAGER',nvl2(sal,sal,0)+800,nvl2(sal,sal,0)+400
3 )
4* from emp
select count(*) from emp; emp 表中多少行.*所有.
select count(ename) from emp; 所有的名字. 但是为空的都不行.
select sum(sal)/avg(sal) from emp; 总和与平均数的函数.
select *from emp where deptno not in(10); 这里则是将不是10部门的所有人员查询出来.
select *from emp order by sal +desc(降序); 将工资作为升序,降序排列.
select ename,sal,sal*12 年薪 from emp order by 年薪; 这里by后面可以直接用别名. 也可以用数字就是低几列.
select * from emp order by comm desc nulls last; 这里就是将那些值为null的数据也按降序排列起来.
select *from emp where ename like 'A%';这里就是将姓名为A开头的人员查询出来,还有一个'%a%',这个就是将名字中有A的人员查询出来. select *from emp where ename like 'K___'; 这里就是将K开头名字长度为4的查询出来. _代表字符. 名字注意要大写.
select *from emp where ename like '%\%%' escape '\'; escape 转义符. 因为\他在oracle中有其他意义通过转义拿到他本身的含义.
函数
select upper/lower('sds') from dual; 大小写的转化.
select substr('what happened just now',5) from dual; 从第四个开始截取字符串.
select substr('what happened just now',5,9) from dual 截取字符串中5-9的字符.
select length('aaaa') from dual; 查询前面字符串的长度为多少.
select instr('whsb happened just now','st') from dual; 查询后面st在前面字符串中所在的位置. 他查询的是S的位置.加T是给它具体的信息.找到T前面那个S.而不是B前面那个S.
select round(192.168,0),round(192.268,1),round(192.168,2)round(192.168,-1)from dual; 四舍五入. -1时结果为190.也要四舍五入
select trunc(192.168,0),trunc(192.168,1),trunc(192.168,-1) from dual; 截取多少位.-1时为190.
select sysdate from dual; 获取当前系统的时间.
select trunc(sysdate,'yyyy') from dual; 截取一系列的时间.
select trunc(sysdate,'mm') from dual;
select trunc(sysdate,'d') from dual;
select trunc(sysdate,'dd') from dual;
select trunc(sysdate,'hh') from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; 将当前时间的格式改为字符型.
select systimestamp from dual; 查询系统时间. 包括微秒.时区.
select sysdate+1/-1 from dual; 当前日期加一天或者减一天.
select last_day(sysdate) from dual; 查询当前时间的最后天是多久.
select ename,round((sysdate-hireddate)/365) from emp; 查询工作了多久.
select ename,months_between(sysdate,hiredate) from emp; 查询在他入职到现在有多少个月.
select add_months(sysdate,10) from dual; 这里查询的是10个月后的今天.
select next_day(sysdate,'星期一') from dual; 这里就是下个星期一是什么时候.
select nullif('aa','aa'/'cc'); 这里就是判断他们是否相等,相等返回true不相等返回第一个.
select ename,sal,comm,coalesce(comm,sal) from emp; 先看comm是否为空.为空的话再看sal是否为空. 如果不是为空那就输出.
1 select ename,job,sal,
2 case job when 'PRESIDENT' then sal+1000
3 when 'MANAGER'then sal+800
4 else sal+400
5 end
6* from emp
1 select ename,job,sal,decode(job,'PRESIDENT',nvl2(sal,sal,0)+1000,
2 'MANAGER',nvl2(sal,sal,0)+800,nvl2(sal,sal,0)+400
3 )
4* from emp
select count(*) from emp; emp 表中多少行.*所有.
select count(ename) from emp; 所有的名字. 但是为空的都不行.
select sum(sal)/avg(sal) from emp; 总和与平均数的函数.