----start 在SQL語句的 WHERE 子句中應該盡量避免在欄位上使用函數,因為這樣做會使該欄位上的索引失效,影響SQL語句的效能。即使該欄位上沒有索引,也應該避免在欄位上使用函數。考慮下面的情況:CREATE TABLE USER(NAME VARCHAR(20) NOT NULL,---姓名REGISTERDATE TIMESTAMP---註冊時間); 現在要求你把2009.9.24註冊的使用者都查出來,怎麼辦?可能有人會這麼寫:SELECT * FROM USER
----start提起分頁查詢,除了那些還不知道什麼是分頁的人,大多數人的都會想到一個詞,那就是LIMIT,不過很可惜,DB2不支援這個關鍵字,那麼DB2的分頁查詢到底該怎麼寫呢?只要你學會了OLAP函數,分頁查詢是非常簡單的。即使你不會OLAP函數,按照下面的SQL照貓畫虎也可以,如下:SELECT * FROM(SELECT B.*, ROWNUMBER() OVER() AS RN FROM(SELECT * FROM <TABLE_NAME>) AS B)AS A
----start DB2 SQL error: SQLCODE: -911, SQLSTATE: 40001, SQLERRMC: 2 Message: The current transaction has been rolled back because of a deadlock or timeout. Reason code "2".
-- Start我們已經知道了在正常情況下,點號(.)能夠匹配除分行符號以外的任何字元。事實上這句話並不準確,確切的說,點號(.)能夠匹配除分行符號以外的任何單個代碼點。由於處於輔助平面內的字元由兩個代碼點構成,所以,為了匹配這些字元,我們需要兩個點號。幸運的是,這些字元我們很少使用,基本上我們可以不考慮。看到這裡,如果你此時的想法是 what the hell are you talking about? 說明你還不瞭解 Unicode 編碼, 請參考本人的另一篇部落格UTF-16 編碼簡介#
----start 前面,我們介紹了 盡量避免在SQL語句的WHERE子句中使用函數,因為這樣做會使該欄位上的索引失效,影響SQL語句的效能。基於同樣的道理,我們也應該避免使用LIKE。考慮下面的情況:CREATE TABLE USER(NAME VARCHAR(20) NOT NULL,---姓名MYNUMBER VARCHAR(18)---社會安全號碼碼); 現在要求你把社會安全號碼碼開頭是2102(大連人)查出來,怎麼辦?我們很自然的會這麼寫:SELECT * FROM USER
----start 在SQL語句中應該盡量避免使用OR,因為這樣做會影響SQL語句的效能。考慮下面的情況:CREATE TABLE USER(NAME VARCHAR(20) NOT NULL,---姓名BIRTHDAY DATE---生日); 現在有這樣一個問題:讓你尋找一下生日是1949-10-1(共和國同齡人)或1978-12-18(十一屆三中全會召開時間)的人,怎麼辦?我們很自然就會把這句話翻譯成如下SQL語句:SELECT * FROM USER WHERE BIRTHDAY='