《SQL反模式之“對未知的恐懼”》,sql反模式

來源:互聯網
上載者:User

《SQL反模式之“對未知的恐懼”》,sql反模式

對NULL的探討

1、select A || B from table;

若欄位A或者B有一個為null,則A||B結果為null;

2、NULL的用處(辨別懸空值):

(1)代替不確定的值

(2)代替可能沒有意義的,不合適的值

(3)當傳入無效參數時的返回值

(4)外查詢時,未匹配列的預留位置

3、對於大多數資料庫,Null是一個特殊值,不同於0、false或者Null 字元串,但是在oracle和sybase中,Null是長度為0的Null 字元串。

4、null在標量運算式中的值

運算式 實際值 原因
NULL=0 NULL NULL不是0
NULL=12345 NULL 如果未指定值和所給值相等,則未知
NULL<>12345 NULL 不相等則未知
NULL+12345 NULL 未指定值和一直數座和則未知
NULL||"string" NULL Null不是Null 字元串,未知
NULL=NULL NULL 未指定值和另一個值相等則未知
NULL<>NULL NULL 如不同則未知

5、null在布林運算式中的值

運算式 實際值 原因
NULL AND TRUE NULL NULL不是false
NULL AND FALSE FALSE 對於and,一假則假
NULL OR FALSE NULL null不是true
NULL OR TRUE TRUE 對於or,一真則真
NOT(NULL) NULL Null不是true,也不是flase

6、在where條件中添加is null或者is not Null會使查詢放棄使用索引,增加查詢時間,Null的設計初衷是作為懸空值


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.