這本書差20頁就看完了。本來以為這本書的主題是sql server 2005的t-sql的講解,讀完后發現不是。書中并沒有系統講解t-sql。前三章講查詢的原理,后面六章把常見的sql問題分類,每章一類:第4章子查詢、表表達式和排名函數,第5章聯接和集合操作,第6章聚合和旋轉數據,第7章TOP和ALLPY,第8章數據修改,第9章圖、樹、層次結構和遞歸查詢。 作者在序言中說過,仔細閱讀本書,并且花些時間做書中的練習,可以在短時間內掌握作者十幾年積累的經驗。我看完本書并且基本把書中的代碼看過一遍,感覺確實學到了作者的許多經驗,作者經驗非常豐富。許多解決方案表現出來的不光是作者在sql上的技巧,其中的算法也很值得學習。另外許多問題都給出sql server 2000下的解決方案和sql server 2005下的解決方案。下面舉兩個例子: 1??焖偕梢粋€數據表,只有一列,這一列的值從1到8000,sql只需要執行14次(第一條sql插入數據1,后面12次把2的12次方4096以內的數據插入,后面剩下的8000-4096個數字一次生成)而不是8000次: SET NOCOUNT ON; USE tempdb; GO IF OBJECT_ID('dbo.Nums') IS NOT NULL DROP TABLE dbo.Nums; GO CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY); DECLARE @max AS INT, @rc AS INT; SET @max = 8000; SET @rc = 1;
INSERT INTO Nums VALUES(1); WHILE @rc * 2 <= @max BEGIN INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums; SET @rc = @rc * 2; END
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max; GO 2。對于遞歸結構的表,作者介紹了常見的設計方式(遞歸)之外,還介紹了Joe Celko提出的嵌套集合模型。并給出了自己的更快速的實現方法。這個模型在數的每個節點上設置兩個值:左值和右值。左值小于所有的下級節點的左值,右值大于所有的下級節點的右值,最終計算遞歸關系非??臁.斎贿@種模型中一個節點的改變會導致平均一半的節點需要重新計算左值和右值,因此不適合需要經常實時變化的數據表。具體的sql比較長,有興趣可以看書或者下載本書的源代碼。