掌握oracle的常规命令巴黎人手机版:,需要首先
分类:巴黎人-数据库

摘自:

利用nullif函数

01-基本的查询语句

01-基本的询问语句

SQL常用函数总结

那是自己在品种费用中选拔db2数据库写存储进度的时候时临时使用的sql函数。希望对大家全部扶助;

摘要:
下文介绍sql server中,sql脚本防止现身除零荒谬的方法分享

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

A:一些发令

A:一些下令

sql cast函数

(1).CAST()函数的参数是二个表明式,它回顾用AS关键字分隔的源值和对象数据类型。以下例子用于将文本字符串'12'转变为整型:

 SELECT CAST('12' AS int)

(2).再次来到值是整型值12。若是准备将贰个意味小数的字符串转换为整型值,又会现出哪些景况呢?

SELECT CAST('12.5' AS int)  

(3).CAST()函数和CONVERT()函数都不能够推行四舍五入或截断操作。由于12.5不能够用int数据类型来表示,所以对这一个函数调用将生出三个张冠李戴:

Server: Msg 245, Level 16, State 1, Line 1

Syntax error converting the varchar value

'12.5' to a column of data type int.

(4).要回来三个法定的数值,就非得选择能处理那几个值的数据类型。对于那一个例子,存在七个可用的数据类型。若是经过CAST()函数将那几个值调换为decimal类型,须求首先定义decimal值的精度与小数位数。在本例中,精度与小数位数分别为9 与2。精度是总的数字位数,包蕴小数点左侧和左边位数的总和。而小数位数是小数点侧面的位数。那意味着本例能够扶助的最大的整数值是9999999,而细小的小数是0.01。

SELECT CAST('12.5' AS decimal(9,2))

decimal数据类型在结果网格元帅体现存效小数位: 12.50

(5).精度和小数位数的暗中同意值分别是18与0。假诺在decimal类型中不提供那八个值,SQL Server将截断数字的小数部分,而不会生出错误。

SELECT CAST('12.5' AS decimal)

    结果是三个整数值:12

还只怕有多少个动静我们亟须用到cast函数转变数据,那正是当大家在同三个select语句中对sum()的值总括比时,必需用cast转变。如下:

select sum(a),sum(b),case when sum(b) = 0 then 0 else (cast sum(a) as double)/sum(b) end from table

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. 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终止写入文件中。

sql case函数

在上面的口舌中,我们就用到了case函数来做决断,当sum(b) =0是无法做分母,我们就令这几个字段的值为0,不然,总结出sum(a)和sum(b)的比;

在各类业务种类开荒中,日常会遇见除零的一无所长,下文分享了三种管理方式:
方法1: case when end 

其效果便是:假诺七个内定的表达式相等,就回去null值。

B:sql优化原则

B:sql优化原则

 sql中COALESCE()函数的意义

再次回到其参数中的第贰个非空表明式。这些函数是对null举办判别,并不是‘’。

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. 能够不要采用会集运算就毫无使用群集运算。
  1. 询问的时候尽量使用列名;如:select ename,sal from emp; 
  2. 分组查询未有多行函数(聚合函数),假若运用过滤,思索使用where依旧having
  3. 在子查询和多表查询之间接选举取,尽量使用多表查询
  4. 在集合运算中,假若union 和union all都足以,思考选取union all 。因为union须要去掉重复的。
  5. 可见不要使用集结运算就无须采取集结运算。

 sql trim()函数

去掉五头空格
sql语法中从不一贯删除四头空格的函数,但有ltrim()去除左空格rtrim()去除右空格。
合起来用正是sql的trim()函数,即select ltrim(rtrim(UsrName))


select nullif(0,0)

留心:驾驭oracle的例行命令,在上学进度中总括一些优化原则;

留心:明白oracle的常规命令,在学习进度中计算一些优化原则;

sql NULLIF函数

借使三个钦命的表明式相等,则赶回空值。
语法NULLIF ( expression1 , expression2 )
参数expression1,expression2
常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的专断己创立合。
回到类型再次来到类型与第一个 expression1 平等。
输出结果:
假诺多少个表达式不等于,NULLIF 再次回到第二个 expression1 的值。
假设七个表达式相等,NULLIF 再次回到空值NULL。  
SQLServer函数是平等的机能
例子: PRINT NULLIF('222','') --返回222
PLANDINT ISNULL(NULLIF('222','222'),'23') --再次来到23 声明再次来到的是null

方法2:nullif
nullif(表达式A,表达式B)
—-假若表达式A不对等表明式B,则赶回表明式A
—-反之重返NULL 

运营结果:null

02-空值和小名

02-空值和别称

sql char函数

char(current date,ISO)——转换成yyyy-mm-dd
char(current date,USA)——转换成mm/dd/yyyy
char(current date,EUR)——转换成dd.mm.yyyy

 

大家清楚,null与其它数进行别的运算,其结果都特别null,利用那一点,我们能够将地点的sql改写为:

A:管理列值为null

A:管理列值为null

sql Date函数

DATE()函数是领取日期或日期/时间表明式的日子部分。
MySQL 使用下列数据类型在数据库中存款和储蓄日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: YYYY-MM-DD HH:MM:SS
YEAR - 格式 YYYY 或 YY

SQL Server 使用下列数据类型在数据库中存放日期或日期/时间值:
DATE - 格式 YYYY-MM-DD
DATETIME - 格式: YYYY-MM-DD HH:MM:SS
SMALLDATETIME - 格式: YYYY-MM-DD HH:MM:SS
TIMESTAMP - 格式: 独一的数字

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

declare @a int;

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

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

 SQL 中ROLLUP 用法

ROLLUP 运算符生成的结果集类似于 CUBE 运算符生成的结果集。
下面是 CUBE 和 ROLLUP 之间的有血有肉差异:
CUBE 生成的结果集显示了所选列中值的具备组成的集纳。
ROLLUP 生成的结果集展现了所选列中值的某一等级次序结构的汇聚。
ROLLUP 优点:
(1)ROLLUP 重回单个结果集,而 COMPUTE BY 再次来到八个结实集,而七个结实集会扩张应用程序代码的复杂。
(2)ROLLUP 能够在服务器游标中选用,而 COMPUTE BY 则不得以。
(3)不常,查询优化器为 ROLLUP 生成的实施陈设比为 COMPUTE BY 生成的更是高效。

下面对比一下GROUP BY 、CUBE 和 ROLLUP后的结果
创建表:

CREATE TABLE DEPART 
(部门 char(10),员工 char(6),工资 int)
INSERT INTO DEPART SELECT 'A','ZHANG',100 
INSERT INTO DEPART SELECT 'A','LI',200 
INSERT INTO DEPART SELECT 'A','WANG',300 
INSERT INTO DEPART SELECT 'A','ZHAO',400 
INSERT INTO DEPART SELECT 'A','DUAN',500 
INSERT INTO DEPART SELECT 'B','DUAN',600 
INSERT INTO DEPART SELECT 'B','DUAN',700

部门 员工 工资
A ZHANG 100
A LI 200
A WANG 300
A ZHAO 400
A DUAN 500
B DUAN 600
B DUAN 700

(1)GROUP BY

SELECT 部门,员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门,员工

结果:
A DUAN 500
B DUAN 1300
A LI 200
A WANG 300
A ZHANG 100
A ZHAO 400
(2)ROLLUP

SELECT 部门,员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门,员工 WITH ROLLUP

结果如下:

A DUAN 500 
A LI 200 
A WANG 300 
A ZHANG 100 
A ZHAO 400 
A NULL 1500 
B DUAN 1300 
B NULL 1300 
NULL NULL 2800

ROLLUP结果集中多了三条聚集国国投息:即部门A的商业事务,部门B的商业事务以及总合同。其军长单位B中的DUAN合计。
等价于下列SQL语句

SELECT 部门,员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门,员工 
union 
SELECT 部门,'NULL',SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门 
union 
SELECT 'NULL','NULL',SUM(工资)AS TOTAL 
FROM DEPART

结果:
A DUAN 500
A LI 200
A NULL 1500
A WANG 300
A ZHANG 100
A ZHAO 400
B DUAN 1300
B NULL 1300
NULL NULL 2800
(3)CUBE

SELECT 部门,员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门,员工 WITH CUBE

结果:
A DUAN 500
A LI 200
A WANG 300
A ZHANG 100
A ZHAO 400
A NULL 1500
B DUAN 1300
B NULL 1300
NULL NULL 2800
NULL DUAN 1800
NULL LI 200
NULL WANG 300
NULL ZHANG 100
NULL ZHAO 400
CUBE的结果集是在 ROLLUP结果集的基础上多了5行,那5行也就是在ROLLUP结果集上在union 上以职员和工人(即CUBE)为 GROUP BY的结果。

SELECT 部门,员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门,员工 WITH CUBE

等价于下列的SQL语句:

SELECT 部门,员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 部门,员工 WITH ROLLUP
union
SELECT 'NULL',员工,SUM(工资)AS TOTAL 
FROM DEPART 
GROUP BY 员工

结果:
NULL NULL 2800
A NULL 1500
A DUAN 500
A LI 200
A WANG 300
A ZHANG 100
A ZHAO 400
B NULL 1300
B DUAN 1300
NULL DUAN 1800
NULL LI 200
NULL WANG 300
NULL ZHANG 100
NULL ZHAO 400

 

declare @b int;

B:判别列值为null

B:推断列值为null

sql UNION 操作符

UNION 操作符用于合併五个或多个 SELECT 语句的结果集。
请小心,UNION 内部的 SELECT 语句必得怀有同样数量的列。列也必需有所相似的数据类型。同一时间,每条 SELECT 语句中的列的相继必需一致。
SQL UNION 语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

解说:暗中同意地,UNION 操作符选择不一致的值,即UNION是去了重的。假如允许再度的值,请使用 UNION ALL。
SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

其余,UNION 结果集中的列名总是等于 UNION 中第三个 SELECT 语句中的列名。

set @a=10

oracle中决断二个列值为null使用is null 可能is not null

oracle中判别多少个列值为null使用is null 或许is not null

sql Merge函数

透过那几个merge你可见在三个SQL语句中对多个表同期实行inserts和updates操作. 自然是update照旧insert是基于于您的钦点的条件决断的,Merge into能够兑现用B表来更新A表数据,借使A表中并没有,则把B表的数额插入A表. ME科雷傲GE命令从三个或多少个数据源中选拔行来updating或inserting到一个或多少个表

语法如下

MERGE INTO [your table-name] [rename your table here] 
USING ( [write your query here] )[rename your query-sql and using just like a table] 
ON ([conditional expression here] AND [...]...) 
WHEN MATHED THEN [here you can execute some update sql or something else ] 
WHEN NOT MATHED THEN [execute something else here ! ] 

咱俩先看看一个轻易易行的例子,来介绍二个merge into的用法

merge into products p using newproducts np on (p.product_id = np.product_id) 
when matched then 
update set p.product_name = np.product_name 
when not matched then 
insert values(np.product_id, np.product_name, np.category) 

在那么些事例里。前面的merger into products using newproducts 表示的用newproducts表来merge到products表,merge的同盟关系正是on后边的标准子句的源委,这里依照三个表的product_id来举办相称,那么相配上了大家的操作是正是when matched then的子句里的动作了,这里的动作是update set p.product_name = np.product_name, 很显明正是把newproduct里的从头到尾的经过,赋值到product的product_name里。若无匹配上则insert那样的一条语句进去。 我们看看那么些merget inot的用法是还是不是侦查破案了哟。这里merger的效劳,好比比较,然后选取翻新可能是插入,是一多种的组合拳,在做merge的时候,那样同样的事态下,merge的习性是优化同等效劳的update/insert语句的。

set @b=0

C:给贰个列取一个小名能够选拔as 抑或容易as

C:给叁个列取多少个小名能够运用as 抑或简单as

sql substr函数

substr(字符串,截取起首地点,截取长度) //重返截取的字

substr('Hello World',0,1) //再次来到结果为 'H'  *从字符串第壹个字符初阶截取长度为1的字符串

substr('Hello World',1,1) //再次来到结果为 'H'  *0和1都以表示截取的起始地点为率先个字符

substr('Hello World',2,4) //再次来到结果为 'ello'

substr('Hello World',-3,3)//重返结果为 'rld' *负数(-i)表示截取的初始地点为字符串右端向左数第i个字符

测试:

select substr('Hello World',-3,3) value from dual;

 

附:java中substring(index1,index2)的简便用法

功效:从字符串索引(下标)为index1的字符开端截取长度为index2-index1 的字符串。

String str="Hello World";

System.out.println(str.substring(0,5));

打字与印刷结果为:Hello

select @a/nullif(@b,0)

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

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

sql REPLACE函数

REPLACE
用第二个表达式替换第二个字符串表明式中出现的享有第一个给定字符串表明式。

语法
REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' )

参数
''string_replace1''

待搜索的字符串表明式。string_replace1 能够是字符数据或二进制数据。

''string_replace2''

待查找的字符串表明式。string_replace2 能够是字符数据或二进制数据。

''string_replace3''

轮换用的字符串表达式。string_replace3 能够是字符数据或二进制数据。

归来类型
如果 string_replace(1、2 或 3)是永葆的字符数据类型之一,则赶回字符数据。借使 string_replace(1、2 或 3)是扶助的 binary 数据类型之一,则赶回二进制数据。

示例
下例用 xxx 替换 abcdefghi 中的字符串 cde。

SELECT REPLACE(''abcdefghicde'',''cde'',''xxx'')GO
下边是结果集:

------------abxxxfghixxx(1 row(s) affected)

其运作结果本来为null了。

     注意:别称必要选用“”,只怕不加“”。小名高级中学级有空格的要求“”;

     注意:别称要求利用“”,或许不加“”。别称中级有空格的内需“”;

sql PARTITION BY 函数

SQL的partition by 字段(可达成全自动分配组号跟归组合併)

先看例子:

if object_id('TESTDB') is not null drop table TESTDB

create table TESTDB(A varchar(8), B varchar(8))

insert into TESTDB

select 'A1', 'B1' union all

select 'A1', 'B2' union all

select 'A1', 'B3' union all

select 'A2', 'B4' union all

select 'A2', 'B5' union all

select 'A2', 'B6' union all

select 'A3', 'B7' union all

select 'A3', 'B3' union all

select 'A3', 'B4'

-- 全部的消息

SELECT * FROM TESTDB

A    B


A1  B1

A1  B2

A1  B3

A2  B4

A2  B5

A2  B6

A3  B7

A3  B3

A3  B4

-- 使用PARTITION BY 函数后

SELECT *,ROW_NUMBER() OVER(PARTITION BY A ORDER BY A DESC) NUM FROM TESTDB

A   B   NUM


A1  B1  1

A1  B2  2

A1  B3  3

A2  B4  1

A2  B5  2

A2  B6  3

A3  B7  1

A3  B3  2

A3  B4  3

 

可以看到结果中多出一列NUM 这么些NUM正是认证了同样行的个数,举例A1有3个,他就给种种A1标上是第多少个。

-- 仅仅使用ROW_NUMBER() OVER的结果

SELECT *,ROW_NUMBER() OVER(ORDER BY A DESC)NUM FROM TESTDB

 A   B     NUM


A3  B7   1

A3  B3   2

A3  B4   3

A2  B4   4

A2  B5   5

A2  B6   6

A1  B1   7

A1  B2   8

A1  B3   9

能够看来它只是单独标出了行号。

再选取isnull函数,大家就足以实现当@b=0的时候,结果再次回到1的急需了。最后的sql改写如下:

不能够运用单引号;

不能选用单引号;

sql 循环函数

 sql 的循环函数是天崩地裂震慑数据库查询速度的,大家在查询的时,尽量制止使用;

本文由巴黎人手机版发布于巴黎人-数据库,转载请注明出处:掌握oracle的常规命令巴黎人手机版:,需要首先

上一篇:统计分页一些sql巴黎人澳门官网 下一篇:没有了
猜你喜欢
热门排行
精彩图文