数据库nvl,数据库中nvl是什么意思
大家好,今天来为大家分享数据库nvl的一些知识点,和数据库中nvl是什么意思的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
数据库常用查询操作
--注释
--select*|字段名1,字段名2... from表名;
--1)
--查询|检索|获取所有员工的所有信息
--查询的数据:员工的所有信息
--数据的来源:员工表 emp
--条件:
select* from emp;
--2)
--查询所有的员工名字
select ename from emp;
--3)
--查询所有的员工编号和员工名称,员工上级的编号
--查询的数据: empno,ename,mgr
--数据的来源:员工表 emp
select empno,ename,mgr from emp;
--4)
--查询所有部门部门编号
select deptno from dept;
--5)
--查询出所有员工所在的部门的部门编号
select distinct deptno from emp;
--对查询数据进行去重(非字段去重) distinct
--6)
--查询出所有存在员工的部门的部门编号,以及员工名称
select deptno,ename from emp;
select distinct sal,deptno from emp;
--7)
--查询表达式,结果是表达式的值,显示的字段名就是表达式,计算值
select 1+1 from emp;
select'a' from emp;
--8)
--给字段取别名 select字段1(as)别名1,字段2别名2 from表名别名; 表的别名不能加as
--查询所有员工的名称(别名为:名字),员工编号(编号)
--别名默认变大写,别名中的内容原封不动出现""->中的内容原封不动出现
select 123+456"get sum" from emp;
select empno as员工编号,ename"员工姓名" from emp;
--9)
--字符串'' 原封不动显示""
select distinct'哈哈'笑 from emp e;
--10)
--字符串拼接 java中使用+ 这里使用||
--查询 ab--cd 表达式
select distinct'ab-'||'-cd' from emp;
--查询所有的员工名字,给他们来一个前缀SXT
select'sxt-'||ename from emp;
--11)
--伪列:不存在的列就是伪列 比如:表达式,字符串
--12)
--虚表:在oracle中不存在的表,也可以说是这个表中没有任何数据,没有任何字段--oracle中的虚表:dual
--虚表的作用:可以不使用distinct就可以去重的效果,因为里面没有数据,不会出现多行
select* from dual;
select distinct 123*456 from emp;
select 123*456 from dual;
select sysdate from dual;
--比如查询当前时间
--13)
--给每一个员工在原来的基础上+100块钱奖金
--null空
--null与数字运算,结果还为null
--null与字符串运算,结果原串
--nvl(参数1,参数2)处理null使用 如果参数1为null,最终结果参数2,如果参数1不为null,最终的结果就是参数1
select comm原奖金,comm||'100'新奖金 from emp;
select comm原奖金,nvl(comm,0)+100新奖金 from emp
--一节结尾小练习
--查询所有员工的名字,工种,年薪(不带奖金)
select ename,job,sal*12年薪 from emp;
--查询所有员工的名字,工种,年薪(带12月奖金的)
select ename,job,(sal+nvl(comm,0))*12年薪 from emp;
--查询所有员工的名字,工种,年薪(带一次奖金的)
select ename,job,sal*12+nvl(comm,0)年薪 from emp;
--select*|表达式|字符串|伪列|字段1别名1,字段2 as别名2... from表名别名|结果集 where行过滤条件;
--执行流程: from-->where-->select确定结果集
--查询20部门的员工信息
--数据:*
--来源: emp
--条件: deptno=20
select* from emp where deptno=20;
--><>= <= =!= <>
--查询工资大于1000的员工的姓名工作岗位 工资 所属部门编号
--数据: ename,job,sal,deptno
--来源: emp
--条件: sal>1000
select ename,job,sal,deptno from emp where sal=1000;
--查询不在20部门工作的员工信息
select* from emp where deptno!= 20;
select* from emp where deptno<> 20;
--where中不能使用字段的别名
--查询员工的年薪大于20000的员工名称、岗位年薪
select ename姓名,job岗位,(sal+nvl(comm,0))*12 sum from emp where((sal+nvl(comm,0))*12)>20000;
select ename姓名,job岗位,(sal+nvl(comm,0))*12 sum from emp;
select岗位, sum
from(select ename姓名, job岗位,(sal+ nvl(comm, 0))* 12 sum from emp)
where sum> 20000;
--查询 any(任意一个) some(任意一个) all(所有)
select* from emp where deptno= any(10,20);
select* from emp where deptno= some(10,20);
--大于最小的
select* from emp where sal> any(1500,2000);--薪资>1500的就可以
--大于最大的
select* from emp where sal> all(1500,2000);--薪资>2000的就可以
--查询工种不为’SALESMAN’的员工信息(注意内容区分大小写)
select* from emp where not job='SALESMAN';
--or或 and并且|都 not取反
---检索工资 1600, 3000员工名称岗位工资
select ename,job,sal from emp where sal=1600 or sal=3000;
select ename,job,sal from emp where not(sal=1600 or sal=3000);
--工资在2000到3000之间的员工信息
select* from emp where sal>2000 and sal<3000;
--between小范围值 and大范围的值 两者之间 <=>=
select* from emp where sal between 1600 and 3000;
---查询岗位为 CLERK且部门编号为 20的员工名称部门编号,工资
select ename,deptno,sal from emp where job='CLERK' and deptno=20;
--查询岗位为 CLERK或部门编号为 20的员工名称部门编号,工资
select ename,deptno,sal,job from emp where job='CLERK' or deptno=20;
--查询岗位不是 CLERK员工名称部门编号,工资
select ename,deptno,sal,job from emp where job!='CLERK';
select ename,deptno,sal,job from emp where not job='CLERK';
select ename,deptno,sal,job from emp where job<>'CLERK';
--查询岗位不为 CLERK并且部门编号不为 20的员工名称部门编号,工资
select ename,deptno,sal,job from emp where job!='CLERK' and deptno!=20;
select ename,deptno,sal,job from emp where not(job='CLERK' or deptno=20);
--存在佣奖金的员工名称
select ename,comm from emp where not comm is null;
select ename,comm from emp where comm is not null;
--不存在奖金的员工名称
select ename,comm from emp where comm is null;
--集合
--Union,并集(去重)对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;
--Union All,全集(不去重)对两个结果集进行并集操作,包括重复行,不进行排序;
--Intersect,交集(找出重复)对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;
--Minus,差集(减去重复)对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序
--查询工资大于1500或含有佣金的人员姓名
select ename,sal,comm from emp where sal>1500 or comm is not null;
select ename,sal,comm from emp where sal>1500;
select ename,sal,comm from emp where comm is not null;
--并集
select ename,sal,comm from emp where sal>1500
Union
select ename,sal,comm from emp where comm is not null;
select ename,sal,comm from emp where sal>1500
Union all
select ename,sal,comm from emp where comm is not null;
--查询显示不存在雇员的所有部门号。
--求出所有的部门号
select deptno from dept;
--有员工的部门号
select distinct deptno from emp;
select deptno from dept
Minus
select distinct deptno from emp;
--查询显示存在雇员的所有部门号。
select deptno from dept
Intersect
select distinct deptno from emp;
--模糊匹配 like%任意任意字符 _一个任意字符 一起使用
--查询员工姓名中包含字符A的员工信息
select* from emp where ename like'%A%';
--完全匹配
select* from emp where ename like'SMITH';
--查询员工姓名以'A'结尾的员工信息
select* from emp where ename like'A%';
--查询员工姓名中第二个字母为A的员工信息
select* from emp where ename like'_A%';
insert into emp(empno,ename,sal) values(1000,'t_%test',8989);
insert into emp(empno,ename,sal) values(1200,'t_tes%t',8000);
--escape('单个字符')指定转义符
--查询员工姓名中包含字符%的员工信息
select* from emp where ename like'%B%%' escape('B');
--当执行插入数据,删除数据,修改的时候,默认开启事务
--可提交 commit
--可回滚 rollback
--多个人中任意一个值就可以
select* from emp where sal=1600 or sal=3000 or sal=1500;
select* from emp where sal in(1500,1600,3000);
--select字段.. from结果集 where行过滤条件 order by排序字段 desc降序|asc升序(默认)..;
--执行流程: from--> where-->select-->排序
select empno,ename,sal from emp order by sal desc,empno asc;
--按照奖金升序排序,如果存在null值,所有的奖金null值的数据最先显示
select empno,ename,sal,comm from emp where deptno in(10,30) order by comm asc nulls first;
数据库中nvl是什么意思
NVL是通过查询获得某个字段的合计值,如果这个值为null将给出一个预设的默认值。
如果是NULL,则取指定值。
具体使用格式如下:
NVL( string1, replace_with)
具体功能如下:
如果string1为NULL,则NVL函数返回replace_with的值,否则返回原来的值。
引申一下,此NVL的作用与SQLserver中的 ISNULL( string1, replace_with)一样。
具体使用注意事项如下:
string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数。
例:NVL(TO_CHAR(numeric_column),'some string')其中numeric_column代指某个数字类型的值。
例:nvl(yanlei777,0)> 0
NVL(yanlei777, 0)的意思是如果 yanlei777是NULL,则取 0值
在oracle数据库中nvl()是什么函数
nvl()函数
语法:
NVL(eExpression1, eExpression2);
参数:
eExpression1, eExpression2。
如果 eExpression1的计算结果为 null值,则 NVL()返回 eExpression2。如果 eExpression1的计算结果不是 null值,则返回 eExpression1。
eExpression1和 eExpression2可以是任意一种数据类型。如果 eExpression1与 eExpression2的结果皆为 null值,则 NVL()返回.NULL.。
NVL( string1, replace_with)。
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。
引申一下,此NVL的作用与SQLserver中的 ISNULL( string1, replace_with)一样。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数。
例:NVL(TO_CHAR(numeric_column),'some string')其中numeric_column代指某个数字类型的值。
例:nvl(yanlei777,0)> 0。
NVL(yanlei777, 0)的意思是如果 yanlei777是NULL,则取 0值。
通过查询获得某个字段的合计值,如果这个值为null将给出一个预设的默认值。
扩展资料:
nvl函数例子:
select nvl(sum(t.dwxhl),1)
from tb_jhde t。
就表示如果sum(t.dwxhl)= NULL就返回 1。
另一个有关的有用方法。
declare i integer。
select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1这样就可以把获得的合计值存储到变量。i中,如果查询的值为null就把它的值设置为默认的1。
oracle中:
select nvl(rulescore,0) from zwjc_graderule where rulecode='FWTD';
如果记录中不存在rulecode='FWTD'的数据.则查不出数据。
select nvl(rulescore,0) into rule_score from zwjc_graderule where rulecode='FWTD';会报查不到数据的错。
select nvl(sum(rulescore),0) from zwjc_graderule where rulecode='FWTD';
如果记录中不存在rulecode='FWTD'的数据.还是可以得到一行列名为nvl(rulescore,0),值为0的数据。
select nvl(sum(rulescore),0) rule_score from zwjc_graderule where rulecode='FWTD';不会报错。
关于数据库nvl,数据库中nvl是什么意思的介绍到此结束,希望对大家有所帮助。