国产麻豆精品视频-国产麻豆精品免费视频-国产麻豆精品免费密入口-国产麻豆精品高清在线播放-国产麻豆精品hdvideoss-国产麻豆精品

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補(bǔ)償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Oracle中的NULL和空字符串

發(fā)布時間:  2012/8/30 16:47:18

Oracle中有個關(guān)鍵字叫NULL,它表示某個值是未知的、是不確定的。既然是未知的,就有無數(shù)種的可能性。因此,NULL并不是一個確定的值。先看兩個例子吧:

例1:

declare 

v_b1 boolean:=null; --布爾值可以賦值null.當(dāng)然它另外兩種值只能是true,false了


 

v_a int := null; 
v_b int := null;      --整數(shù)可以給它賦值null
v_s  varchar2(20):= null ; --字符也可以賦值null
begin
if(v_a= v_b) then          --v_a 和v_b都是null但此處判斷的結(jié)果是它們并不相等.改成v_a =null結(jié)果仍然是一樣
dbms_output.put_line('v_a equal v_b');
else
dbms_output.put_line('v_a not equal v_b');--輸出這個結(jié)果
end if;

if(v_b1) then          --把v_b1改成not v_b1結(jié)果都一樣.也就是v_b1和把它取反都不會是true
dbms_output.put_line('v_b1 equal true');
else
dbms_output.put_line('v_b1 is not true');--輸出這個結(jié)果
end if;

if(true or v_b1) then          --輸出v_b1 equal true
dbms_output.put_line('v_b1 equal true');
else
dbms_output.put_line('v_b1 is not true'); -- 如果把前面的判斷條件改成true and v_b1 則輸入這條語句
end if;
end;


 

例2:

create table test (ename char(1),constraint ck_test check(ename in ('a',null)));

--上面的語句創(chuàng)建一個表,只有一列ename,給此列添加約束條件,它的值只能在列表('a',null)中.但實(shí)際上我們可以插入任何字符.這時貌似null可以代表所有的字符了.去掉它只能插入'a'

但如果我們這樣創(chuàng)建表

create table test1 (ename char(1),constraint ck_test check(ename not in ('a',null)));

--按我們猜想如果null能代表所有字符了那它取反就是不能輸入任何字符.但實(shí)際上不是.此處它貌似沒起任何作用.去掉它和不去掉效果一樣.都可以插入除'a'外的任何字符


1.怎么理解null的這些用法



看了上面兩個例子是不是有點(diǎn)暈了啊,其實(shí)我們可以這樣理解.既然null是個不確定的類型,就可以轉(zhuǎn)變成任何類型中的任何值.就像C#中的object類型.它是任何類型的父類.可以代表任何類型.我們可以在運(yùn)行程序時再去動態(tài)確定它的具體類型.那么null如果是處在一個條件判斷條件中得讓它取特定類型的所有值去進(jìn)行判斷.如果結(jié)果都為真才為真.

如例1中兩個整數(shù)值v_a,v_b都是null.要讓他們相等得讓null取所有的整數(shù)去判斷.那樣自然不可能都相等.所以為假.而true or v_b1之所以為真了是因?yàn)閛r前面的為真的話不去對后面的v_b1做判斷了.而v_b1和not v_b1都為假則可以認(rèn)為v_b1可以取true和false,把這兩種值都代入則不可能保證都為true所以最終結(jié)果為false.

這樣來理解了null就不難明白為什么我們在一個表中插入一個null值.但我們不能通過判斷條件=null來查詢.不過Oracle提供了關(guān)鍵字is來判斷一個值是否是null.

例2中第二種情況是有點(diǎn)反常.我們就當(dāng)作如果什么都不讓用戶插入,但建個表沒啥意義.所以不這樣
 

至于Oracle后臺是怎么存儲null值和操作null值的就不清楚了啊.


 

2.null和空字符串



其實(shí)空字符串和其他字符的操作是一樣的.只是用它的時候眼神要好點(diǎn),別搞錯了.舉個例子

先建表create table arwen(ename varchar2(1)); --此列只能插入一個字符
 

insert into arwen values(' ');--注意引號中是一個空格.如果是兩個空格會出錯的,因?yàn)槭莾蓚字符了.

select * from arwen where ename = ' '; --返回一行.這里引號中也必須是一個空格.

如果是''也就是引號中沒空格.那插入它時Oracle默認(rèn)把它變成null了.所以如果引號中沒空格我們就不能叫它空字符串了啊.不知道叫啥好啊.覺得有null了它好像有點(diǎn)多余

例如create table arwen(eno int);

insert into arwen values(44);

insert into arwen alues(''); --引號是沒有空格
 

insert into arwen alues(null);

這上面三條語句都會成功插入.

雖然''被默認(rèn)轉(zhuǎn)換成null但我們不能用is '' 或=''來用它

例如你select count(*) from arwen 或者select count(*) from arwen where ename is null--結(jié)果是3 
 

但如果是select count(*) from arwen where ename is ‘’ 或者 select count(*) from arwen where ename =‘’結(jié)果就是0


 

3.我們要用到null時常會用到函數(shù)nvl函數(shù).



就是如果碰到哪個地方是null就把它轉(zhuǎn)換成其他的東東

例如上面插入三行后我們這樣查找select nvl(ename,11) from arwen; --結(jié)果是44     11     11

ename如果是null就轉(zhuǎn)換成11如果不是null就原樣輸出


 


 

4.使用null時注意



在用avg,max,min這些函數(shù)時會把null忽略掉

比如create table arwen(eno int);

insert into arwen values(1);

insert into arwen values(2);

insert into arwen values(null);

select avg(eno) from arwen;--結(jié)果為1.5.這是因?yàn)楹雎缘鬾ull了不然應(yīng)該是1的

select max(eno) from arwen;--結(jié)果為2

如果在排序中會把null當(dāng)作最大值處理.就像無窮大一樣


 

在往表中插入數(shù)據(jù)時如果某列沒有插入值就讓它為null,這對用戶來說是非常方便的.但在其他地方用它好像沒太大必要.所以盡量別用好了.

只是在對表做些操作時多注意考慮到null判斷就好.多用nvl函數(shù)和is null判斷


本文出自:億恩科技【www.artduck.net】


 

v_a int := null; 
v_b int := null;      --整數(shù)可以給它賦值null
v_s  varchar2(20):= null ; --字符也可以賦值null
begin
if(v_a= v_b) then          --v_a 和v_b都是null但此處判斷的結(jié)果是它們并不相等.改成v_a =null結(jié)果仍然是一樣
dbms_output.put_line('v_a equal v_b');
else
dbms_output.put_line('v_a not equal v_b');--輸出這個結(jié)果
end if;

if(v_b1) then          --把v_b1改成not v_b1結(jié)果都一樣.也就是v_b1和把它取反都不會是true
dbms_output.put_line('v_b1 equal true');
else
dbms_output.put_line('v_b1 is not true');--輸出這個結(jié)果
end if;

if(true or v_b1) then          --輸出v_b1 equal true
dbms_output.put_line('v_b1 equal true');
else
dbms_output.put_line('v_b1 is not true'); -- 如果把前面的判斷條件改成true and v_b1 則輸入這條語句
end if;
end;


 

例2:

create table test (ename char(1),constraint ck_test check(ename in ('a',null)));

--上面的語句創(chuàng)建一個表,只有一列ename,給此列添加約束條件,它的值只能在列表('a',null)中.但實(shí)際上我們可以插入任何字符.這時貌似null可以代表所有的字符了.去掉它只能插入'a'

但如果我們這樣創(chuàng)建表

create table test1 (ename char(1),constraint ck_test check(ename not in ('a',null)));

--按我們猜想如果null能代表所有字符了那它取反就是不能輸入任何字符.但實(shí)際上不是.此處它貌似沒起任何作用.去掉它和不去掉效果一樣.都可以插入除'a'外的任何字符


1.怎么理解null的這些用法



看了上面兩個例子是不是有點(diǎn)暈了啊,其實(shí)我們可以這樣理解.既然null是個不確定的類型,就可以轉(zhuǎn)變成任何類型中的任何值.就像C#中的object類型.它是任何類型的父類.可以代表任何類型.我們可以在運(yùn)行程序時再去動態(tài)確定它的具體類型.那么null如果是處在一個條件判斷條件中得讓它取特定類型的所有值去進(jìn)行判斷.如果結(jié)果都為真才為真.

如例1中兩個整數(shù)值v_a,v_b都是null.要讓他們相等得讓null取所有的整數(shù)去判斷.那樣自然不可能都相等.所以為假.而true or v_b1之所以為真了是因?yàn)閛r前面的為真的話不去對后面的v_b1做判斷了.而v_b1和not v_b1都為假則可以認(rèn)為v_b1可以取true和false,把這兩種值都代入則不可能保證都為true所以最終結(jié)果為false.

這樣來理解了null就不難明白為什么我們在一個表中插入一個null值.但我們不能通過判斷條件=null來查詢.不過Oracle提供了關(guān)鍵字is來判斷一個值是否是null.

例2中第二種情況是有點(diǎn)反常.我們就當(dāng)作如果什么都不讓用戶插入,但建個表沒啥意義.所以不這樣
 

至于Oracle后臺是怎么存儲null值和操作null值的就不清楚了啊.


 

2.null和空字符串



其實(shí)空字符串和其他字符的操作是一樣的.只是用它的時候眼神要好點(diǎn),別搞錯了.舉個例子

先建表create table arwen(ename varchar2(1)); --此列只能插入一個字符
 

insert into arwen values(' ');--注意引號中是一個空格.如果是兩個空格會出錯的,因?yàn)槭莾蓚字符了.

select * from arwen where ename = ' '; --返回一行.這里引號中也必須是一個空格.

如果是''也就是引號中沒空格.那插入它時Oracle默認(rèn)把它變成null了.所以如果引號中沒空格我們就不能叫它空字符串了啊.不知道叫啥好啊.覺得有null了它好像有點(diǎn)多余

例如create table arwen(eno int);

insert into arwen values(44);

insert into arwen alues(''); --引號是沒有空格
 

insert into arwen alues(null);

這上面三條語句都會成功插入.

雖然''被默認(rèn)轉(zhuǎn)換成null但我們不能用is '' 或=''來用它

例如你select count(*) from arwen 或者select count(*) from arwen where ename is null--結(jié)果是3 
 

但如果是select count(*) from arwen where ename is ‘’ 或者 select count(*) from arwen where ename =‘’結(jié)果就是0


 

3.我們要用到null時常會用到函數(shù)nvl函數(shù).



就是如果碰到哪個地方是null就把它轉(zhuǎn)換成其他的東東

例如上面插入三行后我們這樣查找select nvl(ename,11) from arwen; --結(jié)果是44     11     11

ename如果是null就轉(zhuǎn)換成11如果不是null就原樣輸出


 


 

4.使用null時注意



在用avg,max,min這些函數(shù)時會把null忽略掉

比如create table arwen(eno int);

insert into arwen values(1);

insert into arwen values(2);

insert into arwen values(null);

select avg(eno) from arwen;--結(jié)果為1.5.這是因?yàn)楹雎缘鬾ull了不然應(yīng)該是1的

select max(eno) from arwen;--結(jié)果為2

如果在排序中會把null當(dāng)作最大值處理.就像無窮大一樣


 

在往表中插入數(shù)據(jù)時如果某列沒有插入值就讓它為null,這對用戶來說是非常方便的.但在其他地方用它好像沒太大必要.所以盡量別用好了.

只是在對表做些操作時多注意考慮到null判斷就好.多用nvl函數(shù)和is null判斷


本文出自:億恩科技【www.enidc.com】
-->

服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機(jī) 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機(jī)/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線

     
     
    深夜做爰性大片中文| 天天做日日爱| 日韩在线观看免费| 精品视频在线观看视频免费视频| 精品视频在线观看视频免费视频| 在线观看成人网| 台湾毛片| 九九九国产| 国产伦精品一区三区视频| 欧美激情一区二区三区视频高清| 四虎影视精品永久免费网站 | 99久久精品国产国产毛片| 亚洲www美色| 一本高清在线| 一级毛片视频免费| 九九精品在线| 欧美电影免费| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美一区二区三区在线观看| 国产91精品一区| 午夜在线亚洲| 亚久久伊人精品青青草原2020| 国产91素人搭讪系列天堂| 日日日夜夜操| 美女免费毛片| 999久久久免费精品国产牛牛| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产精品自拍一区| 国产不卡在线观看视频| 黄视频网站在线免费观看| 欧美激情一区二区三区在线播放 | 国产伦精品一区三区视频| 麻豆系列 在线视频| 精品国产一区二区三区国产馆| 91麻豆精品国产自产在线| 亚飞与亚基在线观看| 日韩中文字幕在线观看视频| 成人免费福利片在线观看| 免费的黄视频| 精品国产香蕉伊思人在线又爽又黄| 一本伊大人香蕉高清在线观看| 成人免费观看的视频黄页| 国产亚洲精品成人a在线| 在线观看成人网 | 精品国产一区二区三区久久久蜜臀| 999久久久免费精品国产牛牛| 欧美一级视频免费观看| 91麻豆精品国产综合久久久| 九九免费精品视频| 麻豆网站在线看| 精品国产亚一区二区三区| 欧美激情在线精品video| 天天色成人| 九九久久99综合一区二区| 国产a视频精品免费观看| 精品国产一区二区三区免费 | 国产91精品一区二区| 国产成a人片在线观看视频| 午夜家庭影院| 精品毛片视频| 日本伦理片网站| 日韩中文字幕一区| 欧美另类videosbestsex高清| 中文字幕一区二区三区精彩视频| 国产一级强片在线观看| 成人a大片高清在线观看| 国产欧美精品午夜在线播放| 你懂的福利视频| 九九九国产| 日韩免费在线观看视频| 亚洲精品中文字幕久久久久久| 国产伦精品一区二区三区无广告 | 欧美一区二区三区在线观看| 中文字幕Aⅴ资源网| 欧美日本免费| 美国一区二区三区| 国产一区二区精品久久91| 欧美一级视频免费| 亚洲 欧美 91| 四虎影视精品永久免费网站 | 国产不卡精品一区二区三区| 999久久久免费精品国产牛牛| 久草免费在线观看| 精品久久久久久免费影院| 国产不卡在线播放| 精品国产一区二区三区国产馆| 97视频免费在线| 精品久久久久久综合网| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 日本在线播放一区| 午夜激情视频在线观看 | 黄色福利| 国产高清在线精品一区二区| 99久久精品国产免费| 99色视频在线观看| 天天做日日干| 精品视频在线观看一区二区| 午夜精品国产自在现线拍| 国产精品免费精品自在线观看| 国产国语对白一级毛片| 美女免费毛片| 精品毛片视频| 国产成人啪精品| 日韩中文字幕在线播放| 国产视频一区二区在线播放| 国产不卡在线播放| 国产91丝袜在线播放0| 中文字幕一区二区三区精彩视频| 免费国产在线视频| 日本免费乱理伦片在线观看2018| 日韩在线观看免费完整版视频| 二级特黄绝大片免费视频大片| 99久久精品国产麻豆| 精品国产一区二区三区精东影业 | 韩国三级香港三级日本三级la| 91麻豆国产| 日韩在线观看免费| 欧美a级大片| 国产伦精品一区三区视频| 韩国毛片| 国产91丝袜高跟系列| 精品视频在线观看视频免费视频| 天天色色色| 一级女性大黄生活片免费| 欧美国产日韩久久久| 色综合久久手机在线| 久久福利影视| 久久国产影院| 韩国毛片基地| 色综合久久天天综线观看| 日韩欧美一二三区| 久久精品道一区二区三区| 欧美大片a一级毛片视频| 国产91素人搭讪系列天堂| 亚洲精品久久久中文字| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产福利免费视频| 午夜久久网| 亚洲第一页色| 国产亚洲精品aaa大片| 精品国产一区二区三区精东影业 | 国产不卡高清在线观看视频| 国产综合成人观看在线| 欧美日本韩国| 尤物视频网站在线观看| 久久国产精品永久免费网站| 久久久久久久免费视频| 日韩专区一区| 台湾毛片| 欧美另类videosbestsex| 日韩在线观看视频黄| 成人a大片在线观看| 精品国产一区二区三区国产馆| 国产网站免费视频| 久久精品人人做人人爽97| 四虎论坛| 在线观看成人网 | 四虎影视库国产精品一区| 台湾毛片| 二级特黄绝大片免费视频大片| 91麻豆精品国产综合久久久| 午夜在线亚洲| 亚洲精品久久久中文字| 欧美另类videosbestsex久久| 韩国三级视频网站| 一级毛片看真人在线视频| 一级女性全黄久久生活片| 亚洲女初尝黑人巨高清在线观看| 在线观看成人网| 免费的黄视频| 青青久在线视频| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 高清一级毛片一本到免费观看| 欧美一级视频高清片| 国产91丝袜高跟系列| 精品久久久久久中文字幕一区| 九九九网站| 美女免费精品视频在线观看| 国产成人啪精品| 高清一级淫片a级中文字幕| 韩国妈妈的朋友在线播放| 亚洲精品中文一区不卡| 久草免费在线观看| 九九九网站| 成人免费观看的视频黄页| 二级特黄绝大片免费视频大片| 九九免费精品视频| 欧美国产日韩精品| 成人免费高清视频| 国产不卡福利| 日本伦理片网站| 成人影视在线播放| 午夜欧美福利| 日韩专区亚洲综合久久| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产高清在线精品一区a| 高清一级毛片一本到免费观看| 黄色免费三级| 青青久在线视频| 高清一级片|