目標:儲存和使用空值
反模式:將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 選擇下乙...