常见的单行函数
1.decode()函数相当于if else语句
2.case job when 'PRESIDENT' then sal+1000
3.coalesce(a,b,c,...,n) 从左到右找到第一个不为null的值
4.nullif(a,b) 当a=b的时候,返回null;否则返回a
5.nvl2(a,b,c) 当a=null的时候,返回c;否则返回b
6.next_day的应用:设定每个星期一自动备份,同步,调度数据
7.last_day 本月的最后一天
8.add_months 在指定日期中加上若干月数
9.months_between 两个日期相差的月数
10. select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
11.trunc --截断
12.--replace 替换
13--trim 去掉前后指定的字符
14. --lpad 左填充 rpad 右填充
15.length('北京') 字符,lengthb('北京') 字节
16.--instr(a,b) 从字符串a中查找b字符串的位置(下标从1开始)
17.--substr(a,b,c) 从字符串a中,第b位开始取,取c位
18.--substr(a,b) 从字符串a中,第b位开始取
19.lower('Hello World') 大写转小写,upper('Hello World') 小写转大写,initcap('hello world') 首字母大写
https://www.cnblogs.com/chenmingjun/p/9637127.html#_labelTop(原文地址)
常见的多行函数
--常用的组函数:sum()、count()、avg()、max()、min()
--null值 5.对于组函数/多行函数,会自动滤空。我们可以嵌套滤空函数,来屏蔽该函数的滤空功能
--注意:Oracle中的规定,在select列表中所有未包含在组函数中的列都应该包含在 group by 子句中。
--注意:Oracle中的规定,包含在 group by 子句中的列不必包含在select列表中。
--多个列的分组:如果第一个列相同,再按照第二列进行分组...
--where和having的区别:where子句不能使用多行函数。
--用到Oracle的滤空函数nvl()和nvl2(),准确的说法叫做通用函数
过滤和排序
SQL> --修改日期格式(system表示在全局有效)
SQL> alter system set NLS_DATE_FORMAT='yyyy-mm-dd';
SQL> --修改日期格式(session表示在当前会话中有效)
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd';
--查询Oracle的日期格式
SQL> select * from v$nls_parameters;
--比较运算(比较运算符)
SQL> --特别注意:
SQL> -- java中:int a = 0;
SQL> -- pl/sql中:a number := 0;
--between xxx and xxx 1. 含有边界 2. 小值在前 大值在后
--in 在集合中
--null 值 3. 如果集合中含有null,不能使用not in; 但可以使用in
1 select *
2 from emp
3* where ename like '%\_%' escape '\' --使用escape声明转义字符,前后一致即可
--MySQL中通过start transaction开启事务的,属于手动开启事务。
SQL> --Oracle中是自动开启事务的。
where的解析顺序:从右 --> 到左,所以我们应该尽量把为假的条件放在右边,让它先被解析
--原因:order by 升序作用于后面的所有的列
--原因:order by 降序只作用于距离desc最近的列
set pagesize 20 --设置每页显示的行数
nulls last --降序排序时,使得所有的空值在后面
-为什么降序排序时,null值默认排在前面呢?
SQL> --原因:在Oracle中null值最大。
SQL 语句的类型
delete和truncate的区别:
SQL> --创建一个视图
SQL> create view empinfoview
2 as
3 select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname
4 from emp e,dept d
5 where e.deptno=d.deptno;