這本書差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比較長,有興趣可以看書或下載本書的原始碼。