私はこの本を20ページで書き終えました。当初、この本のテーマは SQL Server 2005 の t-sql の説明だと思っていましたが、読んでみるとそうではないことが分かりました。この本には t-sql の体系的な説明はありません。最初の 3 章ではクエリの原理について説明し、次の 6 章では一般的な SQL の問題を各章の 1 つのカテゴリに分類します。第 4 章はサブクエリ、テーブル式とランキング関数、第 5 章は結合と集合演算、第 6 章は集計とローテーションデータ、第 7 章 TOP と ALLPY、第 8 章データ変更、第 9 章グラフ、ツリー、階層、および再帰クエリ。
著者ははしがきで、この本をよく読み、本書に書かれている演習を時間をかけてやれば、著者が10年以上蓄積してきた経験を短期間でマスターできる、と述べています。私はこの本を読み、基本的に本の中のコードを読んで、著者の経験から多くのことを学んだように感じました。著者は非常に経験豊富です。多くのソリューションでは、作成者の SQL スキルが示されるだけでなく、アルゴリズムも学ぶ価値があります。さらに、多くの質問では SQL Server 2000 での解決策と SQL Server 2005 での解決策が示されています。以下に 2 つの例を示します。
1.この列の値の範囲は 1 ~ 8000 です。SQL は 14 回実行するだけで済みます (最初の SQL ではデータ 1 が挿入され、次の 12 回では 2 の累乗以内のデータが挿入されます)。 12 4096 のうち、残りの次の 8000 ~ 4096 の数値は、8000 回ではなく一度に生成されます。
ノーカウントをオンに設定します。
tempdb を使用します。
行く
OBJECT_ID('dbo.Nums') が NULL でない場合
DROP TABLE dbo.Nums;
行く
CREATE TABLE dbo.Nums(n INT NOT NULL 主キー);
@max AS INT、@rc AS INT を宣言します。
SET @max = 8000;
SET @rc = 1;
INSERT INTO Nums VALUES(1);
WHILE @rc * 2 <= @max
始める
INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
終わり
INSERT INTO dbo.Nums
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
行く
2.再帰構造を持つテーブルについて、著者は一般的な設計手法 (再帰) を紹介し、Joe Celko によって提案された入れ子になったコレクション モデルも紹介します。そして彼自身のより高速な実装方法を提供しました。このモデルは、数値の各ノードに 2 つの値 (左辺値と右辺値) を設定します。左の値はすべての下位ノードの左の値より小さく、右の値はすべての下位ノードの右の値より大きくなります。再帰関係の最終計算は非常に高速です。もちろん、このモデルでノードを変更すると、平均して半分のノードで左右の値が再計算されるため、頻繁にリアルタイムで変更する必要があるデータ テーブルには適していません。特定の SQL は比較的長いので、興味がある場合は、本を読むか、この本のソース コードをダウンロードしてください。