oracle的学习笔记–NVL()函数的使用技巧

一、给列起别名的规则:特殊字符(#$除外)、数字、空格需要加双引号处理;中文加不加双引号都可以;as关键字可以省略。

— 查询员工姓名,员工编号,员工的工作。
SELECT empno AS “员工编号”,ename “员工姓名”,job 工作 FROM emp;
select empno as “员工编号”,ename “员工姓名”,job 工 作 from emp;–语法错误 ,别名“工 作”中出现空格没有加双引号
select empno as “员工编号”,ename “员工姓名”,job “工 作” from emp;–正确,出现空格加双引号
select empno as “员工编号”,ename “员工@姓名”,job “工 作” from emp;–正确,出现特殊字符加双引号
select empno as “员工编号”,ename “123”,job “工 作” from emp;–正确,出现数字加双引号
select empno as 员工$编号,ename “123”,job “工 作” from emp;–正确,特殊字符中(#,$)除外

二、NVL()函数的使用:要记住一点,null值参与运算,结果为空

emp表:有员工没有奖金

–计算一下员工的年薪(月薪x12+奖金)
SELECT sal*12+comm 年薪 FROM emp;

未使用nvl函数的情况,查询结果如下:

–nvl(v1,v2),其中v1是原始值,v2是当为空时参与计算的值
SELECT sal*12+NVL(comm,0) AS 年薪 FROM emp;

使用nvl函数的情况下,查询结果如下:

三、distinct关键字和oracle特有的连接符“||”

需求:在一列中显示员工编号和员工姓名;方法:使用oracle特有的连接符

select ’empno:’||empno||’ ‘||’ename:’||ename 个人简介 from emp;

查询结果:

distinct去重关键字,在查询结果中去掉重复的

select distinct job from emp;

四、条件查询(目的是过滤出满足条件的结果)

where是条件关键字,后面加条件

比较运算符:> < >= <= = <> !=

逻辑运算符:and or not

其余运算表达式:like模糊查询 % 匹配0个或多个字符

in not in 判断范围

between and 判断区间,包含边界

is null,is not null 判断是否为空值

—查询工作不是 MANAGER 的员工信息
SELECT * FROM emp WHERE job !=’MANAGER’;
SELECT * FROM emp WHERE job <>’MANAGER’;
–查询工作是领导MANAGER 并且工资> 2000的员工信息
SELECT * FROM emp WHERE job=’MANAGER’ AND sal>2000;
–查询工资>2000 或者 工作是MANAGER的员工信息
SELECT * FROM emp WHERE sal>2000 OR job=’MANAGER’;
–查询员工姓名包含M的员工信息
SELECT * FROM emp WHERE ename LIKE ‘%M%’;
–查询员工姓名第二位M的员工信息
SELECT * FROM emp WHERE ename LIKE ‘_M%’;
–查询员工工作是MANAGER 或者工作室PRESIDENT
SELECT * FROM emp WHERE job=’MANAGER’ OR job=’MANAGER’;
–使用in来实现
SELECT * FROM emp WHERE job IN(‘MANAGER’,’PRESIDENT’);
–查询工资在1500 和3000之间的员工信息
SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000;
–查询有奖金的员工信息
SELECT * FROM emp WHERE comm IS NOT NULL;
–null不等于任何值 如果对null判断 比较判断 UNKUOW
SELECT * FROM emp WHERE comm=NULL;

五、排序关键字order by关键字的使用

–将员工的数据按照工资从小到大排序
SELECT * FROM emp ORDER BY sal;
–将员工数据按照奖金倒叙排序
SELECT * FROM emp ORDER BY comm DESC;
–null倒序排序 null在上面 指定null到末尾 nulls last
SELECT * FROM emp ORDER BY comm DESC NULLS LAST;

六、数据库函数:单行函数(数值、字符、日期、转换、通用函数),多行函数(max,min,sum,count,avg)

1.四舍五入 round(v1,v2) v1是原始的数值 v2是保留的小数位数(v2默认数值是0)
select round(43.726) from dual;
select round(43.726,0) from dual;–44
select round(43.726,1) from dual;–43.7
select round(43.726,2) from dual;–43.73
select round(43.726,-1) from dual;–40
select round(43.726,-2) from dual;–0
select round(53.726,-2) from dual;–100

2.–截取 trunc(v1,v2) v1是原始的数值 v2是保留的小数位数( v2默认数值是0)
–43.726
select trunc(43.726) from dual;
select trunc(43.726,0) from dual;–43
select trunc(43.726,1) from dual;–43.7
select trunc(43.726,2) from dual;–43.72
select trunc(43.726,-1) from dual;–40
select trunc(43.726,-2) from dual;–0
select trunc(53.726,-2) from dual;–0

3.–mod取余数
select mod(10,3) from dual; –1

4.获取字符的长度 length(v1)
–abcde
select length(‘abcde’) from dual;

5.截取字符串 substr(v1,v2,v3) v1原始字符串 v2开始截取位置 v3截取长度
–截取字符串 从0开始和1开始都是第一位开始截取
select substr(‘abcde’,0,2) from dual; — ab
select substr(‘abcde’,1,2) from dual; –ab
select substr(‘abcde’,-1,2) from dual; — e
select substr(‘abcde’,-2,2) from dual; — de

6.替换字符串 replace(v1,v2,v3)v1原始字符串 v2被替换的字符 v3替换后的字符
–替换字符串 hello 替换匹配的所有字符
select replace(‘hello’,’l’,’o’) from dual; — heooo
select replace(‘hello’,’he’,’l’) from dual; — lllo
select replace(‘hello’,’he’,”) from dual; — llo

7.大小写转换 upper() lower()
select * from emp;
select * from emp where ename = ‘smith’
select * from emp where ename = ‘sMIth’
select * from emp where ename = upper(‘smith’);
select * from emp where ename = upper(‘Smith’);
select * from emp where ename = upper(‘SMITH’);

8.去除空格 trim()

–去除空格__abc_de__ 去除字符串两端的空格
select trim(‘ abc de ‘) from dual;–abc_de

七、日期函数

–查看系统当前时间

SELECT SYSDATE FROM dual;

–增加月份,查询3个月以后的日期
SELECT add_months(SYSDATE,3) FROM dual;
–计算所有员工到目前为止,入职了多少个月
SELECT months_between(SYSDATE,hiredate) FROM emp;
—-计算所有员工入职的天数 日期和日期做计算 结果为天数
SELECT ROUND(SYSDATE-hiredate) FROM emp;

八、转换函数

–字符串转数字
SELECT to_number(‘123’)+1 FROM dual;
–数字转字符串
select to_char(sal,’$99,999.00′) from emp;
–日期转字符串
SELECT to_char(SYSDATE,’yyyy-mm-dd’) FROM dual;
SELECT to_char(SYSDATE,’hh:mi:ss’) FROM dual;
SELECT to_char(SYSDATE,’yyyy-MM-dd HH:mi:ss’) FROM dual;
–字符串转日期
SELECT to_date(‘2017-05-03′,’yyyy-mm-dd’) FROM dual;
SELECT to_date(‘2017-05-03 6:08:32′,’yyyy-mm-dd hh:mi:ss’) FROM dual;–小时只能取1-12的值
SELECT to_date(‘2017-05-03 16:08:32′,’yyyy-mm-dd hh24:mi:ss’) FROM dual;–小时可以取1-24的值

九、聚合函数和分组函数的使用

—查询每个部门的平均工资
select * from emp;
SELECT avg(sal) from emp group by deptno;
–显示部门编号
select deptno,avg(sal) from emp group by deptno;
–加入其余的列是不可以的,使用group by,select语句只能查询分组的列和聚合函数
select job,deptno,avg(sal) from emp group by deptno;
–使用多个列做分组 必须多个列的数值一致 才为一组
select job,deptno,count(*) from emp group by deptno,job;
–查询部门平均工资>2000的部门编号
select deptno,avg(sal) from emp group by deptno having avg(sal)>2000;
–mySql分组可以起别名过滤
select deptno,avg(sal) s from emp group by deptno having s >2000;

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐