高级sql学习——null详解,字符格式详解,随机值查询!!!

一。null详解
null 是oracle 中一个特殊的值,它的含义是”unknown”。如果一个列的内容是null,则说这个列是空值。截止到oracle最新版本,oracle一直将null和空字符串’’<长度为0>同等对待<如’’ is null是true,’’=null为false,如果声明a varchar2:=’’,那么a is null为true,a=’’为false>。

 

null基本知识:

1.限制一个列不能是null 值,可以通过not null 和primary key(相当于not nullunique)约束实现,当然也可以通过check约束<比如a 列不能是null,则是check(a is notnull)>。如果修改一个表的not null 约束,只能通过alter table table_name modify column is null 或alter table table_name modify column is not null 来实现,只能对修改后的列有效。

 

2.null 和空字符串的比较,如果是变长字符类型,传入’’和null 一样,如果是定长的则分情况:在sql 中定长类型和变长一样当作null,但是在PL/SQL 中定长字符类型传入’’,则长度固定,不是null。

 

3.算术表达式和null 运算总为null,实际上所有的操作符除了||连接操作符外,只要有一个操作符为null,则结果为null。

 

4.null 在函数中的使用,除了replace,concat,nvl,nvl2 中有参数为null,返回结果不一定是null外,其他的函数只要有参数为null,则返回null,另外组函数有时候会忽略null。

5.null在值比较中的使用。测试一个值是不是null,只能通过is null或is not null来比较。=null是错误的,null和其他任何值都不相等,包括null,如1=null,’a’=null,null=null,’’=null都是返回unkown。null的含义就是lack of data。

 

6.null 在条件中的使用。一个条件的结果是“unknow”相当于false。如select 语句的where条件如果返回UNKOWN,则结果返回0 行。虽然unknow相当于false,但是有一定的区别,比如not false返回true,not unkown还是返回unkown。

 

二。字符格式详解

字符格式
oracle中字符串的比较有两类
1.填补空格的语义比较
2.非填补空格的语义比较

 

填补空格的语义比较:
如果两个字符串有不同的长度,oracle首先会在短的字符串那边末尾添加空格,直到两个字符串长度相等。
oracle然后按字符顺序比较两个字符串的值,如果发现到不同的字符,则按字段顺序认定大小,如果没有发现不同字符,oracle则认为两个字符串相等。这个规则意味着,如果只是尾号中有不同数目的空格,那么则认为两个字符串是相等的。如'a '='a'.

 

非填补空格的语义比较:

oracle通过字符顺序比较两个字符串的值。如果发现到字符值大的则大。如果两个字符串长度不同,则发现到字符值大的则大,否则长度大的则大,比如'b'>'ab','ab'>'a'.如果长度相等,并且各个位置字符相同,则认定为相等。

 

三。随机值查询

DBMS_RANDOM.random        

返回[-2^^31, 2^^31)范围内的整数随机值


DBMS_RANDOM.value

DBMS_RANDOM.value (low IN NUMBER,high IN NUMBER)
无参数返回[0,1)精度最多为38 位的数字(返回小数),经常使用此函数有参数返回为low<=result<high


DBMS_RADNOM.string(opt char,len number)

返回随机字符串。其中:
opt 是下列字符中的一个(长度只能是1):
■ 'u', 'U' – 返回字符串是大写希腊字母
■ 'l', 'L' – 返回字符串是小写希腊字母
■ 'a', 'A' – 返回字符串混合大小写希腊字母
■ 'x', 'X' – 返回字符串混合大写希腊字母和数字
■ 'p', 'P' –返回字符串是任何可打印字符串
其他字母返回的是大写希腊字母
len 返回的字符串长度


DBMS_RANDOM.normal

返回标准正态分布结果

 

 

sys_guid函数:返回32 位的16 进制表示,RAW 类型。

 

sample 按行的百分比来读,sample 就是读全部,不加一样sample(n),n为[0.000001,100)当然读的也不是严格的百分比,有一定的误差。
sample block 按表的块来读sample block中的sample不可加值,block必须加值,和单独的sample不同sample block(n), n为[0.000001,100)。

 

使用例子:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值