oracle基本查询用法入门示例

2020-02-20 12:00:23于海丽

2、数字函数

--ROUND 四舍五入
--TRUNC 截断
--MOD 求余
select round(25.533,2) from dual;
select trunc(25.323,2) from dual;
select mod(8, 3) from dual;

3、日期

oracle中日期型数据实际含有两个值:日期和时间。

默认格式为:DD-MON-RR

--返回系统时间
select sysdate from dual;
--两个日期相减,返回日期之间相差的天数
select ename,(sysdate-hiredate) / 7 "weeks" from emp;
--MONTHS_BETWEEN 两日期相差月数
--ADD_MONTHS 指定日期加上若干月数
--NEXT_DAY 指定日期的下一个日期
--LAST_DAY 本月的最后一天
--ROUND 日期四舍五入
--TRUNC 日期截断
select months_between(sysdate,hiredate) from emp;

4、显式数据类型转换

--TO_CHAR(date, 'format_model')
--把日期转换成字符串
select to_char(sysdate, 'YYYY MM DD HH:MI:SS') from dual;
--TO_CHAR(number, 'format_model')
select ename,sal,to_char(sal, '$99,999.00') from emp;
--TO_NUMBER(char[,'format_model'])
--TO_DATE(char[,'format_model'])

通用函数,适用于任何数据类型,也适用于空值

NVL(expr1,expr2)
NVL2(expr1,expr2,expr3)
NULLIF(expr1,expr2)
COALESCE(expr1,expr2,...)

5、条件表达式

在sql语句中使用if-then-else逻辑
case表达式,sql99语法,类似basic,比较繁锁
decode函数,oracle自已语法,类似java,比较简洁

CASE expr WHEN comparison_expr1 THEN return_expr1
     [WHEN comparison_expr2 THEN return_expr2
      WHEN comparison_expr3 THEN return_expr3
      ELSE else_expr]
END
DECODE(col|expression, search1, result1
           [,search2, result2, ..., ]
           [,defautl]
)
select ename,sal,decode(round(sal/1000),
1, '一倍',
2, '二倍',
3, '三倍',
'不知倍数'
) from emp;

6、函数嵌套

单行函数可以嵌套,嵌套函数的执行是由内到外。

四、分组函数

分组函数作用于一组数据,并对一组数据返回一个值。
常用组函数

--AVG
--COUNT
--MAX
--MIN
--SUM
select sum(sal) as "total" from emp;
select max(sal) from emp;
select count(*) from emp where deptno=10;
select count(distinct deptno) from emp;

分组数据
通过GROUP BY可以将数据分成若干组

select deptno,avg(sal) from emp group by deptno;

(*注意:在select列表中所有未包含在组函数中的列都必须包含在group by中。)

--多列分组
select deptno,job,avg(sal) from emp group by deptno,job;

过滤分组
通过HAVING子句对分组进行过滤

select deptno,avg(sal) from emp group by deptno having deptno in(10,20);

(*注意:不能在where子句中使用组函数,having子句中可以。)