亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

深入詳解SQL中的Null
來源:易賢網 閱讀:1694 次 日期:2015-05-04 14:29:20
溫馨提示:易賢網小編為您整理了“深入詳解SQL中的Null”,方便廣大網友查閱!

雖然熟練掌握SQL的人對于Null不會有什么疑問,但總結得很全的文章還是很難找,看到一篇英文版的, 感覺還不錯。

Tony Hoare 在1965年發明了 null 引用, 并認為這是他犯下的“幾十億美元的錯誤”. 即便是50年后的今天, SQL中的 null 值還是導致許多常見錯誤的罪魁禍首.

我們一起來看那些最令人震驚的情況。

Null不支持大小/相等判斷

下面的2個查詢,不管表 users 中有多少條記錄,返回的記錄都是0行:

select * from users where deleted_at = null;

– result: 0 rows

select * from users where deleted_at != null;

– result: 0 rows

怎么會這樣子? 一切只因為 null 是表示一種“未知”的類型。也就是說,用常規的比較操作符(normal conditional operators)來將 null 與其他值比較是沒有意義的。 Null 也不等于 Null(近似理解: 未知的值不能等于未知的值,兩者間的關系也是未知,否則數學和邏輯上就亂套了)。

– 注意: 下面的SQL適合于MySQL,如果是Oracle,你需要加上 … from dual;

select null > 0;

– result: null

select null < 0;

– result: null

select null = 0;

– result: null

select null = null;

– result: null

select null != null;

– result: null

將某個值與 null 進行比較的正確方法是使用 is 關鍵字, 以及 is not 操作符:

select * from users

where deleted_at is null;

– result: 所有被標記為刪除的 users

如果想要判斷兩列的值是否不相同,則可以使用 is distinct from:

select * from users

where has_address is distinct from has_photo

– result: 地址(address)或照片(photo)兩者只有其一的用戶

not in 與 Null

子查詢(subselect)是一種很方便的過濾數據的方法。例如,如果想要查詢沒有任何包的用戶,可以編寫下面這樣一個查詢:

select * from users

where id not in (select user_id from packages)

但此時假若 packages 表中某一行的 user_id 是 null 的話,問題就來了: 返回結果是空的! 要理解為什么會發生這種古怪的事情, 我們需要理解SQL編譯器究竟干了些什么. 下面是一個更簡單的示例:

select * from users

where id not in (1, 2, null)

這個SQL語句會被轉換為:

select * from users

where id != 1 and id != 2 and id != null

我們知道,id != null 結果是個未知值, null. 而任意值和 null 進行 and 運算的結果都是 null, 所以相當于沒有其他條件. 那么出這種結果的原因就是 null 的邏輯值不為 true.

如果條件調換過來, 查詢結果就沒有問題。 現在我們查詢有package的用戶.

select * from users

where id in (select user_id from packages)

同樣我們可以使用簡單的例子:

select * from users

where id in (1, 2, null)

這條SQL被轉換為:

select * from users

where id = 1 or id = 2 or id = null

因為 where 子句中是一串的 or 條件,所以其中某個的結果為 null 也是無關緊要的。非真(non-true)值并不影響子句中其他部分的計算結果,相當于被忽略了。

Null與排序

在排序時, null 值被認為是最大的. 在降序排序時(descending)這會讓你非常頭大,因為 null值排在了最前面。

下面這個查詢是為了根據得分顯示用戶排名, 但它將沒有得分的用戶排到了最前面!

select name, points

from users

order by 2 desc;

– points 為 null 的記錄排在所有記錄之前!

解決這類問題有兩種思路。最簡單的一種是用 coalesce 消除 null的影響:

– 在輸出時將 null 轉換為 0 :

select name, coalesce(points, 0)

from users

order by 2 desc;

– 輸出時保留 null, 但排序時轉換為 0 :

select name, points

from users

order by coalesce(points, 0) desc;

還有一種方式需要數據庫的支持,指定排序時將 null 值放在最前面還是最后面:

select name, coalesce(points, 0)

from users

order by 2 desc nulls last;

當然, null 也可以用來防止錯誤的發生,比如處理除數為0的數學運算錯誤。

被 0 除

除數為0是一個非常 egg-painfull 的錯誤。昨天還運行得好好的SQL,突然被0除一下子就出錯了。一個常用的解決方法是先用 case 語句判斷分母(denominator)是否為0,再進行除法運算。

select case when num_users = 0 then 0

else total_sales/num_users end;

ase 語句的方式其實很難看,而且分母被重復使用了。如果是簡單的情況還好,如果分母是個很復雜的表達式,那么悲劇就來了: 很難讀,很難維護和修改,一不小心就是一堆BUG.

這時候我們可以看看 null 的好處. 使用 nullif 使得分母為0時變成 null. 這樣就不再報錯, num_users = 0 時返回結果變為 null.

select total_sales/nullif(num_users, 0);

nullif 是將其他值轉為 null, 而Oracle的 nvl 是將 null 轉換為其他值。

如果不想要 null,而是希望轉換為 0 或者其他數, 則可以在前一個SQL的基礎上使用 coalesce函數:

select coalesce(total_sales/nullif(num_users, 0), 0);

null 再轉換回0

Conclusion

Tony Hoare 也許會后悔自己的錯誤, 但至少 null 存在的問題很容易地就解決了. 那么快去練練新的大招吧,從此遠離 null 挖出來的無效大坑(nullifying)!

更多信息請查看IT技術專欄

更多信息請查看數據庫
易賢網手機網站地址:深入詳解SQL中的Null
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
午夜在线a亚洲v天堂网2018| 久久av最新网址| 99热免费精品| 亚洲伊人网站| 欧美精品97| 黄色av一区| 亚洲一区精品视频| 欧美视频日韩| 亚洲一区二区三区免费在线观看| 免费在线国产精品| 国产精品草草| 午夜亚洲福利在线老司机| 欧美精品偷拍| 日韩视频在线观看国产| 久久国产精品高清| 99精品免费视频| 国产精品hd| 西西人体一区二区| 亚洲乱码久久| 欧美日韩国产精品一区二区亚洲 | 亚洲一区二三| 国产一区二区三区无遮挡| 国产精品久久久久9999高清| 亚洲图色在线| 久久久www| 一区二区三区精品国产| 韩日精品在线| 欧美日韩1区| 老司机精品久久| 亚洲一区在线直播| 国产精品免费一区二区三区在线观看| 极品日韩久久| 欧美日本中文| 欧美高清视频一区| 欧美一区免费视频| 久久国产88| 香蕉视频成人在线观看| 亚洲一区二区三区精品动漫| 99在线热播精品免费99热| 亚洲视频狠狠| 亚洲福利一区| 伊人色综合久久天天五月婷| 欧美日韩中文| 欧美日韩国产综合视频在线| 欧美1区2区3区| 久久综合一区| 欧美国内亚洲| 极品少妇一区二区三区| 亚洲精品1区2区| 亚洲精品一区二| 国产欧美日韩一区二区三区| 日韩一区二区免费看| 在线亚洲观看| 亚洲综合另类| 欧美在线3区| 国内综合精品午夜久久资源| 在线日本高清免费不卡| 99精品视频免费全部在线| 日韩午夜黄色| 久久精品91| 黄色在线成人| 午夜欧美精品| 久久天堂成人| 国产综合第一页| 亚洲欧洲精品一区| 亚洲欧美久久久久一区二区三区| 亚洲一区二区三区精品在线观看| 欧美亚洲免费| 欧美体内she精视频在线观看| 国色天香一区二区| 亚洲精品女人| 久久综合九色综合久99| 国模精品一区二区三区| 国产亚洲精品bv在线观看| 欧美国产91| 一区二区三区国产盗摄| 欧美福利一区| 国产精品视区| 亚洲无玛一区| 久久精品卡一| 精品电影一区| 久久精品伊人| 99人久久精品视频最新地址| 久久精品亚洲| 亚洲区一区二区三区| 乱码第一页成人| 亚洲国产1区| 欧美一区免费| 国产欧美日韩在线播放| 午夜在线一区| 亚洲高清资源| 欧美精品免费观看二区| 亚洲一区黄色| 99热免费精品| 伊人色综合久久天天五月婷| 久久激情久久| 亚洲欧美大片| 国产欧美另类| 999在线观看精品免费不卡网站| 亚洲欧美一区在线| 久久av最新网址| 国产一区二区三区奇米久涩| 一区视频在线看| 欧美在线亚洲| 久久天堂成人| 另类国产ts人妖高潮视频| 99xxxx成人网| 亚洲久久一区二区| 在线成人黄色| 亚洲国产精品www| 精品不卡一区二区三区| 欧美激情无毛| 欧美日韩一卡| 亚洲一二三区在线| 国内精品久久久久久久果冻传媒| 欧美国产精品| 欧美人与禽猛交乱配视频| 欧美一区高清| 国产精品红桃| 永久域名在线精品| 亚洲国产一区在线| 一区二区三区高清视频在线观看| 99香蕉国产精品偷在线观看 | 91久久极品少妇xxxxⅹ软件| 欧美午夜视频| 韩日精品在线| 亚洲国产日韩综合一区| aa国产精品| 国产精品乱码| 久久综合影音| 黄色av日韩| 一区二区毛片| 久久精品女人天堂| 欧美日韩三级电影在线| 极品少妇一区二区三区| 一区二区三区四区五区视频| 国产精品视频福利| 午夜久久资源| 亚洲欧洲精品一区二区| 亚洲一区二区毛片| 欧美在线视频一区二区三区| 国产精品久久7| 日韩亚洲不卡在线| 久久蜜桃资源一区二区老牛| 国内成+人亚洲| 国产午夜精品一区二区三区欧美 | 久久资源在线| 亚洲午夜电影| 性高湖久久久久久久久| 欧美欧美天天天天操| 在线观看欧美亚洲| 另类图片国产| 在线日韩中文| 欧美高清视频一区| 国产日韩一区二区三区| 欧美另类视频| 国产农村妇女毛片精品久久莱园子| 美女精品网站| 亚洲精品在线二区| 欧美精品导航| 国产模特精品视频久久久久| 亚洲手机视频| 模特精品在线| 一区二区精品在线| 黄色工厂这里只有精品| 久久亚洲国产精品一区二区| 一本色道久久综合亚洲精品高清| 欧美福利一区| 亚久久调教视频| 日韩午夜在线| 亚洲国产精品一区二区第四页av| 欧美.日韩.国产.一区.二区| 国产九区一区在线| 亚洲激情网站| 好吊日精品视频| 欧美一区二区三区四区在线观看地址 | 欧美影视一区| 午夜一区在线| 国产亚洲毛片在线| 国产手机视频一区二区| 99精品福利视频| 怡红院精品视频在线观看极品| 欧美激情日韩| 欧美一区二视频在线免费观看| 国产日本精品| 国产日韩高清一区二区三区在线| 亚洲欧洲一区二区在线观看| 亚洲黄色高清| 国产一级久久| 免费在线一区二区| 久久av最新网址| 久久国产日韩欧美| 老司机久久99久久精品播放免费| 久久久久se| 欧美黄色免费| 欧美午夜精品久久久久免费视| 国产精品v一区二区三区| 欧美日一区二区在线观看 | 国产精品久久久久久久久久直播| 亚洲精品国产日韩| 99国产精品私拍| 国产欧美日韩一级| 亚洲中字在线| 欧美伊人久久| 激情另类综合| 中文精品一区二区三区| 亚洲在线黄色| 欧美欧美全黄| 亚洲精品一区二| 国产精品美女久久久| 麻豆av福利av久久av| 你懂的国产精品| 在线不卡欧美| 亚洲欧美99| 欧美体内she精视频在线观看| 精品1区2区3区4区| 国产精品资源| 欧美日韩免费观看一区| 亚洲精品在线二区| 久久精品一二三区| 亚洲第一黄色| 香蕉久久a毛片| 韩日成人av| 亚洲在线网站| 在线日韩欧美| 欧美在线资源| 一区二区冒白浆视频| 午夜亚洲福利| 国产精品久久亚洲7777 | 亚洲区一区二| 性8sex亚洲区入口| 一区国产精品| 欧美福利视频| 亚洲综合国产| 亚洲精品字幕| 激情91久久| 欧美一区免费| 亚洲资源av| 99riav国产精品| 好看的亚洲午夜视频在线| 性欧美精品高清| 夜夜爽av福利精品导航| 黄色亚洲在线| 国产精品yjizz| 欧美影视一区| 久久久成人网| 亚洲欧美bt| 国产伦理一区| 一区二区三区四区国产| 亚洲国产免费看| 国内自拍一区| 黄色一区二区三区四区| 欧美日韩精品免费观看| 你懂的成人av| 午夜久久99| 午夜精品美女久久久久av福利| 欧美综合77777色婷婷| 一区二区三区四区国产| 精品福利av| 亚洲小说欧美另类社区| 国产在线欧美| 欧美三级黄美女| 欧美日韩精品综合| 欧美久久在线| 亚洲性感美女99在线| 伊人精品在线| 日韩视频精品| 国产精品区一区| 亚洲男人影院| 欧美成人精品| 黄色精品免费| 一区二区三区四区国产| 在线综合亚洲| 免费久久久一本精品久久区 | 国产精品一区在线观看| 国产日韩欧美三级| 亚洲欧美国产精品桃花| 另类激情亚洲| 欧美精品成人| 精品福利电影| 国产精品久久久对白| 男人的天堂成人在线| 欧美成人一品| 亚洲高清在线观看一区| 夜夜嗨一区二区三区| 亚洲女同同性videoxma| 欧美一区二区三区在线免费观看 | 在线综合亚洲| 午夜在线一区二区| 午夜精品网站| 99热免费精品在线观看| 久久精品女人天堂| 欧美三级不卡| 国产精品免费一区二区三区在线观看| 久久riav二区三区| 国自产拍偷拍福利精品免费一 | 欧美一区国产一区| 国产综合亚洲精品一区二| 亚洲三级视频| 国产精品日韩欧美一区二区三区| 麻豆成人精品| 欧美日韩国产综合在线| 一区二区三区国产盗摄 | 男女精品视频| 激情成人亚洲| 久久精品人人做人人爽电影蜜月| 海角社区69精品视频| 午夜亚洲影视| 亚洲丰满在线| 欧美在线视频一区二区三区| 亚洲精品激情| 欧美日韩三区四区| 欧美专区一区二区三区| 亚洲国产精品综合| 午夜久久黄色| 久久精品一本| 国产伦精品一区二区三区照片91 | 一区二区三区高清视频在线观看| 欧美中文字幕| 国产欧美二区| 亚洲黄色免费| 欧美日韩日本国产亚洲在线| 欧美亚洲免费高清在线观看| 亚洲欧洲日韩综合二区| 国产精品成人观看视频免费| 久久激情网站| 性色av一区二区怡红| 国产日韩欧美精品| 亚洲美女毛片| 亚洲精品系列| 亚洲欧洲视频| 亚洲乱码久久| 亚洲日本无吗高清不卡| 亚洲午夜精品国产| 亚洲网站啪啪| 亚洲国产日本| 亚洲免费高清| 国产日韩亚洲| 国产女优一区| 亚洲欧美日韩另类精品一区二区三区| 一本色道久久| 国产亚洲精品bv在线观看| 国产日韩欧美| 午夜影院日韩| 久久久久久国产精品mv| 久久九九精品| 午夜激情一区| 国语精品一区| 亚洲国产高清一区| 一区二区久久| 免费在线欧美黄色| 欧美国产日本| 精品999网站| 国产一区二区三区免费不卡 | 欧美日韩一区在线视频| 欧美午夜国产| 亚洲区第一页| 免费视频一区| 欧美精品99| 亚洲成色最大综合在线| 亚洲久色影视| 免费视频一区二区三区在线观看| 久久综合福利| 狠狠色噜噜狠狠色综合久| 亚洲人成网站在线观看播放| 国产精品毛片在线看| 欧美在线网站| 亚洲人成毛片在线播放女女| 国产视频一区三区| 欧美一区二区| 亚洲经典自拍| 免费久久99精品国产自在现线| 欧美精品亚洲| 国产一区二区高清| 欧美在线二区| 一区二区精品国产| 欧美理论在线| 国产精品久久777777毛茸茸| 久久亚洲风情| 亚洲精品护士| 欧美国产三区| 国产精品美女xx| 黄色日韩精品| 久久国产一区二区| 亚洲国产日韩欧美| 狼狼综合久久久久综合网| 亚洲精品极品| 欧美久久久久| 小嫩嫩精品导航| 亚洲精品视频一区二区三区 | 欧美成人有码| 99精品久久久| 亚洲视频中文| 亚洲欧美综合国产精品一区| 国产精品亚洲欧美| 18成人免费观看视频| 欧美精品观看| 欧美亚洲专区| av不卡在线看| 亚洲国产99|