SQL反模式筆記13 關於NULL值

2022-02-17 17:07:28 字數 1403 閱讀 3966

目標:儲存和使用空值

反模式:將null作為普通的值,或者不適用null

將null作為普通的值:

1、在表示式中使用可空列,結果都是null。

2、搜尋允許為空的列

只能使用is null、is not null,其它方法都沒法搜出null值。

3、在查詢引數中使用null,無法將null作為引數傳入。

使用not null,用乙個普通的值來代替null

無法使用乙個不是null的值(比如-1、0、『』)來表示空。

使用not null就意味著這個列的每個值都必須存在而且是有意義的。

解決方案:將null視為特殊值1、在標量表示式中使用null

進行=、<>、+、||操作時,只要有乙個null值,結果就為null。

2、在布林表示式中使用null

布林表示式中,只有:null and false結果為false,null or true結果為true,其它情況結果都是null。

3、檢索null值

使用 is null、is not null

4、宣告not null列

有時候可以通過使用default值來避免null,但有時候卻不可以這麼做。

5、使用動態預設值

sqlserver中的isnull()

目標:儲存和使用空值

反模式:將null作為普通的值,或者不適用null

將null作為普通的值:

1、在表示式中使用可空列,結果都是null。

2、搜尋允許為空的列

只能使用is null、is not null,其它方法都沒法搜出null值。

3、在查詢引數中使用null,無法將null作為引數傳入。

使用not null,用乙個普通的值來代替null

無法使用乙個不是null的值(比如-1、0、『』)來表示空。

使用not null就意味著這個列的每個值都必須存在而且是有意義的。

解決方案:將null視為特殊值1、在標量表示式中使用null

進行=、<>、+、||操作時,只要有乙個null值,結果就為null。

2、在布林表示式中使用null

布林表示式中,只有:null and false結果為false,null or true結果為true,其它情況結果都是null。

3、檢索null值

使用 is null、is not null

4、宣告not null列

有時候可以通過使用default值來避免null,但有時候卻不可以這麼做。

5、使用動態預設值

sqlserver中的isnull()

SQL反模式筆記18 使用 查詢

目標 減少輸入 反模式 使用 缺點1 傳輸的資料量大。解決方案 明確列出列名 這一章內容太簡單了,好像沒啥可說的。我想起用ibatis的時候遇到的乙個問題 最初的sql都是自動生成的,比如根據id update某個表,輸入引數是這個表對應的乙個entity,包含了這個表幾乎所有的字段。這樣使用的時候...

SQL反模式筆記16 模糊查詢

目標 模糊查詢 反模式 like 缺點 效能太差,無法使用索引,必須全表遍歷。合理使用反模式 資料量小 條件簡單時可以用。解決方案 使用特殊的搜尋引擎而不是sql 1 資料庫擴充套件,各大資料庫都有對全文檢索的解決方案,但是配置複雜。2 使用第三方搜尋引擎,比如lucene.3 實現自己的搜尋引擎 ...

SQL反模式筆記15 隨機排序

目標 隨即排序 反模式 使用rand 缺點是無法利用索引,而且是全表遍歷,效能太差 合理使用反模式 資料量很小的時候可以用 解決方案 1 使用隨機數 ceil rand select max id from t as randid 問題是,取出的id有可能是不存在的,因為id不是連續的 2 選擇下乙...