Я закончил эту книгу на 20 страницах. Первоначально я думал, что темой этой книги будет объяснение t-sql в sql server 2005, но, прочитав ее, я обнаружил, что это не так. В книге нет систематического объяснения t-sql. В первых трех главах рассказывается о принципах запросов, а в следующих шести главах распространенные проблемы SQL классифицируются по одной категории для каждой главы: глава 4 — подзапросы, табличные выражения и функции ранжирования, глава 5 — операции соединения и множества, глава 6 — агрегирование и ротация data , Глава 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 раз:
УСТАНОВИТЬ NOCOUNT ON;
ИСПОЛЬЗОВАТЬ временную базу данных;
ИДТИ
ЕСЛИ OBJECT_ID('dbo.Nums') НЕ НУЛЬ
УДАЛЕНИЕ ТАБЛИЦЫ dbo.Nums;
ИДТИ
CREATE TABLE dbo.Nums(n INT NOT NULL PRIMARY KEY);
ОБЪЯВИТЬ @max AS INT, @rc AS INT;
НАБОР @макс = 8000;
НАБОР @rc = 1;
INSERT INTO Nums VALUES(1);
ПОКА @rc * 2 <= @max
НАЧИНАТЬ
INSERT INTO dbo.Nums ВЫБЕРИТЕ n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
КОНЕЦ
ВСТАВИТЬ В dbo.Nums
ВЫБЕРИТЕ n + @rc ИЗ dbo.Nums ГДЕ n + @rc <= @max;
ИДТИ
2. Для таблиц с рекурсивной структурой автор представляет общий метод проектирования (рекурсию), а также представляет модель вложенных коллекций, предложенную Джо Селко. И дал свой более быстрый метод реализации. Эта модель устанавливает два значения в каждом узле числа: lvalue и rvalue. Левое значение меньше левого значения всех подчиненных узлов, а правое значение больше правого значения всех подчиненных узлов. Окончательный расчет рекурсивной связи происходит очень быстро. Конечно, изменение узла в этой модели приведет к тому, что в среднем половина узлов пересчитает левые и правые значения, поэтому она не подходит для таблиц данных, которые требуют частых изменений в реальном времени. Конкретный SQL относительно длинный. Если вам интересно, вы можете прочитать книгу или загрузить исходный код этой книги.