一些命令,sql脚本避免出现除零错误的方法分享

2019-11-06 15:38栏目:网络数据
TAG:

摘自:

利用nullif函数

01-基本的询问语句

摘要:
下文介绍sql server中,sql脚本防止现身除零不当的不二等秘书籍分享

nullif函数有四个参数,定义如下:

A:一些发令


NULLIF( expression , expression )

  1. sqlplus sys/sys@192.168.22.220:1521/orcl as sysdba;
  2. conn scott/123456@192.168.22.210:1521/orcl; 从当下客商更改来scott客商
  3. show user; 展现当前客户名
  4. show linesize; 显示的行宽
  5. set linesize 150; 设置行宽
  6. col ename for a8; col sal for 9999;设置列ename为字符长度为8个长度;设置列sal为4位数字;
  7. c 命令字符替换,如: c /form/from 也许c!form!from
  8. host cls;清屏幕
  9. spool d:/1.sql 将下令写入到1.sql文本中。spool off终止写入文件中。

在种种职业系统开垦中,平日会遇见除零的荒唐,下文分享了两种管理措施:
方法1: case when end 

其效能正是:即使两个钦命的表明式相等,就回去null值。

B:sql优化原则

declare @a int ---分子
declare @b int ---分母
select  case  when @b=0 then NULL else @a/@b end  as [a除以b]

看意气风发示范:

  1. 查询的时候尽量利用列名;如:select ename,sal from emp; 
  2. 分组查询没有多行函数(聚合函数卡塔尔,假如选择过滤,构思选拔where依然having
  3. 在子查询和多表查询之间采纳,尽量利用多表查询
  4. 在集合运算中,假设union 和union all都得以,构思选取union all 。因为union供给去掉重复的。
  5. 能够不要接纳集结运算就不用选取会集运算。

select nullif(0,0)

留意:明白oracle的正规命令,在念书进程香港中华总商会结一些优化原则;

方法2:nullif
nullif(表达式A,表达式B)
—-要是表达式A不对等表明式B,则赶回表达式A
—-反之再次回到NULL 

运作结果:null

02-空值和外号

 

我们精晓,null与别的数实行任何运算,其结果都等于null,利用那一点,大家能够将方面包车型地铁sql改写为:

A:处理列值为null

declare @a int ---分子
declare @b int ---分母
select @a/nullif(@b,0) as [a除以b]

declare @a int;

oracle中的列值为null做四则运算结果都为null。管理方式:nvl(null,0) 

 

declare @b int;

B:判定列值为null

set @a=10

oracle中决断二个列值为null使用is null 只怕is not null

set @b=0

C:给贰个列取四个别称能够运用as 如故轻巧as

select @a/nullif(@b,0)

     select empno as “工作者编号” , ename 职员和工人姓名 from emp;

其运作结果当然为null了。

     注意:别称须要运用“”,也许不加“”。外号中级有空格的急需“”;

再采纳isnull函数,大家就可以完毕当@b=0的时候,结果回到1的需要了。最后的sql改写如下:

不可能运用单引号;

declare @a int;

D:distinct 收取前边的全数列唯后生可畏值

declare @b int;

select distinct job,deptno from emp;这里的distinct功能于后边的具备的列。

set @a=10

            select distinct(job) from emp;能够将加()

set @b=0

E:|| 和concat() 将字符连接起来

select isnull(@a/nullif(@b,0),1)

select concat(‘hello’,’world’) from dual;使用concat()前面须要加表。mysql并严词依据sql一九八六行业内部;

OK,三种形式介绍达成,绝对于方法风华正茂,作者更推荐大家利用方法二,因为方法二的代码更简省。

            select ‘hello’ || ‘world’ from dual;

(如若有情人对isnull函数不精晓的话,这里能够解释一下。

         注意:字符串使用单引号‘’,不能够选拔双引号“”,使用双引号的是别名。

isnull的概念如下:

dual是伪表;

isnull(参数1,参数2)

03-SQL和iSQLPLUS

其职能正是,当参数1分外null时,就回来参数2的值。)

A:sql、sqlplus、isqlplus区别

  1. sql:insert update delete等周边的sql语句,关键词没有缩写。命令能够调控表中定义和数码;
  2. sqlplus:desc/ed/c/col/for等一声令下都以sqlplus命令,关键词有缩写,命令不可能改革数据库中的数据;访问sqlplus服务端口是1158;
  3. isqlplus:是sqlplus是网页版本的sqlplus。能够进行脚本,也得以运营脚本;访谈isqlplus服务供给拜望5560端口;

04-过滤where

A:where 背后相比较运算符(>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null)

  1. 后边=能够接数据还是字符串,个中国和东瀛期格式供给介意

    如果select * from emp where hiredate=’81-09-08’ 试行会身不由己谬误;

 因为该日期字符串格式与oracle当前格式分化等,oralce不能够处理成日期类型。但是能够修改日期格式;alter session|system set NLS_DATE_FORMATE=’yy-mm-dd’.select * from v$nls_parameters; 能够查阅到系统的全数变量;

  1. between and (包涵边界,小值在前,大值在后)
  2. in前面集合中能够加null,not in()集合中不可能有null
  3. 留意:where 前边用于过滤可能三番五次别的表的尺度,注重通晓常用>,<,!=,>=,<=,between and ,in,like,not like,is null,is not null操作;

05-逻辑运算符和排序

A:where 前边使用逻辑运算符(and ,or ,not)

瞩目:condition1 and condition2 和condition2 and condition1的分别;剖析的各样是从侧面到左侧;explain plan for select * from emp where condition1 and condition2;

B:查询排序(order by卡塔尔

order by 列名/表明式/小名/连串. 且order by 前面能够接多少个列

生机勃勃经列中有值为null,则desc排序会并发null值行在前null最大,为了肃清该难点:

select * from emp order by comm desc nulls last;

留心:order by 八个列参加排序的特殊性。

 06-函数简单介绍

A:单行函数和多行函数

 注意:操作再次回到后生可畏行数据的函数叫单行函数,操作再次来到的多行数据的函数叫多行函数;

07-字符函数和数值函数

A:字符函数

  1. 高低写调整

B:数值函数

  1. round():四舍五入
  1. truncate():截断

留意:入眼精晓length(),substr(),instr(),round().

08-日期函数

A:日期函数

Oracle中提供了数不尽和日期相关的函数,包括日期的加减,在日期加减时有一点点法规

日期 – 数字 = 日期

日期 + 数字 = 日期

日期 – 日期 = 数字

09-调换函数

A:oracle中隐式转换(查百度)

B:to_char():日期调换来字符串,数字转变成字符

C:to_number():字符串转变来数字

D:to_date():字符串转变来日期

注意:掌握to_char(),to_number(),to_date() ,3个转移函数;

10-通用函数和原则表明式

A:通用函数

  1. nvl(expr1,expr2) 如果repr1是null则把expr1处理成expr2
  2. nvl2(expr1,expr2,expr3),如果repr1不为null,则值为expr2,为null则返回expr3
  3. nullif(expr1,expr2),假诺repr1=repr2,则赶回null,不然重临expr1
  4. coalesce(expr1,expr2….), 依次参谋各参数表明式,遭逢非null值即结束并重返该值。
    比方具备的表明式都以空值,最后将回来一个空值B:条件表达式
    1. case  xx when xx then xx  when xxx  then xx else xx end;
    2. decode()

留意:nvl(),nvlif()和2个条件语句必得领会。

11-多行函数

A:分组函数(avg(),max(),min(),count(),sum()卡塔 尔(阿拉伯语:قطر‎

B:分组

       group by  having  order by

瞩目:多行函数在sql中的使用;

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于网络数据,转载请注明出处:一些命令,sql脚本避免出现除零错误的方法分享