寫在前面的話:之前做的一個項目,資料庫及系統整體構架設計完成之後,和弟兄們經過一段時間的編碼,系統如期上線,剛開始運作一切良好,後來随着數 據量的急劇膨脹,慢慢出現了很多莫名其妙的問題,經過調試,修改了資料庫中幾個存儲過程的一些問題。有意思的是,有一個存儲過程裡,為了實作一個小的功 能,寫了好多好多的代碼,又是遊标又是循環的,其實用系統的一個預設函數就能解決掉。這裡想說的是,學習工作之餘,在沒有要解決問題的壓力之下,還是建議系統的看看書,對于一些認為沒啥用的知識點,也建議去仔細的看看,練練手,說不定什麼時候就用到了,到時也好有針對性的去查,不至于盲目的按照自己的思路,重複的創造一些低效的解決方法。
======正文開始===========
1.[]的使用
當我們所要查的表是系統關鍵字或者表名中含有空格時,需要用[]括起來,例如建立了兩個表,分别為user,user info,那麼select * from user和select * from user info就要報錯,需要寫成:select * from [user] 和 select * from [user info],不過千萬不要因為有[]的幫助,就随意起名了,那是自找麻煩,不過我确實看到有人把使用者表起名為user的。
2.NULLIF函數
NULLIF(Expression1,Expression2):給定兩個參數Expression1和Expression2,如果兩個參數相等,則傳回NULL;否則就傳回第一個參數。
等價于:Case WHEN Expression1=Expression2 Then NULL ELSE Expression1。
例如Select NULLIF(1,1)傳回NULL,Select NULLIF(1,2)傳回1。
有一個實際的應用,例如防止除0操作的放生,可以使用a/NULLIF(b,0),這樣就不怕b是0了,當然除0操作也可以通過别的方式判斷。
3.NULL
NULL是個神奇的東西,表示空值,未知值,任何數與它加減乘除都傳回NULL。
4.ISNULL函數
ISNULL(Expression1,Expression2):給定兩個參數Expression1和Expression2,如果Expression1是NULL,那麼傳回Expression2,否則傳回Expression1。
等價于:Case WHEN Expression1 is NULL Then Expression2 ELSE Expression1。
例如Select ISNULL(NULL,1)傳回1,Select ISNULL(1,2)傳回1。
有一個實際的應用,可以對空值進行預設值替代,例如SELECT ISNULL(email,’沒有填寫email’) from table1,所有email為null的,用’沒有填寫email’來替代。
5.COALESCE函數
COALESCE(Expression1,Expression2,Expression3,……):接受一系列的表達式或列,傳回第一個非空的值。
例如SELECT COALESCE(NULL,NULL,4,NULL,NULL,5),那麼傳回4,如果裡面的參數都為NULL,那麼會報錯。
6.WITH TIES
與top()和order by 一起用,可以傳回多于top的行。防止丢失想要的資訊。
例如:有個表table1
(1)select * from table1 order by name desc :結果如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5yclVWNihzYhlGNvwFOzEDOyMTMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
(2)select top(3) * from table1 order by name desc:結果如下:(隻有三條)
(3)select top(3) with ties * from table1 order by name desc:結果如下:
7.ORDER BY NEWID():傳回随機排序結果。
8.BETWEEN a AND b:傳回大于等于a,小于等于b的結果。如果a>b,那麼傳回NULL。
9.不要在where條件中使用函數,會強制每一行都計算該函數,無法使用索引查找。
例如:select * from table1 where id+3>5和select * from table1 where id>5-3,後者效率比前者高。
10.許多以_desc結尾的列,是為了更友好的表示一個列的含義。
例如:SELECT * FROM sys.databases
11.推薦一個小插件,SQL Prompt,配合Microsoft SQL Server Management Studio,使用起來非常友善,同時再加上以下幾個快捷鍵:
(1)ctrl+5或F5,運作代碼,如果想運作特定的語句,那麼隻是選中該語句,然後F5或ctrl+E即可。
(2)ctrl+L:顯示執行計劃。
(3)ctrl+R:顯示隐藏下面的結果視窗,增大自己書寫sql的空間。
(4)ctrl+K,然後按Y,格式化SQL代碼。
(原文出處:http://www.cnblogs.com/wuguanglei/p/4205976.html)