나는 이 책을 20페이지 만에 끝냈다. 원래 이 책의 주제는 SQL Server 2005의 t-sql에 대한 설명인 줄 알았는데, 읽어보니 그렇지 않았다. 책에는 t-sql에 대한 체계적인 설명이 없습니다. 처음 세 장에서는 쿼리의 원리에 대해 설명하고 다음 여섯 장에서는 일반적인 SQL 문제를 각 장마다 하나의 범주로 분류합니다. 4장 하위 쿼리, 테이블 표현식 및 순위 함수, 5장 조인 및 집합 연산, 6장 집계 및 회전 data , 7장 TOP 및 ALLPY, 8장 데이터 수정, 9장 그래프, 트리, 계층 및 재귀 쿼리.
저자는 서문에서 이 책을 주의 깊게 읽고, 책에 담긴 연습을 시간을 투자하면 짧은 시간 안에 저자가 10년 이상 쌓아온 경험을 터득할 수 있다고 말했다. 나는 이 책을 읽고 기본적으로 책에 있는 코드를 읽었으며, 저자의 경험을 통해 많은 것을 배웠고, 저자는 경험이 풍부하다는 느낌을 받았습니다. 많은 솔루션은 작성자의 SQL 기술을 보여줄 뿐만 아니라 알고리즘도 학습할 가치가 있습니다. 또한 많은 질문이 SQL Server 2000의 솔루션과 SQL Server 2005의 솔루션을 제공합니다. 다음은 두 가지 예입니다.
1. 컬럼이 1개인 데이터 테이블을 빠르게 생성합니다. 이 컬럼의 값은 1~8000입니다. SQL은 14번만 실행하면 됩니다(첫 번째 SQL은 데이터 1을 삽입하고 다음 12번은 2 안에 데이터를 거듭제곱합니다. 12 4096개 중 8000번 대신 나머지 8000~4096개의 숫자가 한 번에 생성됩니다.
NOCOUNT를 ON으로 설정하세요.
tempdb를 사용하십시오.
가다
IF OBJECT_ID('dbo.Nums')가 NULL이 아닌 경우
드롭 테이블 dbo.Nums;
가다
CREATE TABLE dbo.Nums(n INT NOT NULL 기본 키);
@max를 INT로, @rc를 INT로 선언합니다.
SET @max = 8000;
SET @rc = 1;
숫자 값(1)에 삽입;
WHILE @rc * 2 <= @max
시작하다
dbo.Nums에 삽입 SELECT n + @rc FROM dbo.Nums;
SET @rc = @rc * 2;
끝
dbo.Nums에 삽입
SELECT n + @rc FROM dbo.Nums WHERE n + @rc <= @max;
가다
2. 재귀적 구조를 갖는 테이블에 대해 저자는 공통 설계 방법(재귀)을 소개하고 Joe Celko가 제안한 중첩 컬렉션 모델도 소개합니다. 그리고 자신만의 더 빠른 구현 방법을 제시했습니다. 이 모델은 숫자의 각 노드에 lvalue와 rvalue라는 두 가지 값을 설정합니다. 왼쪽 값은 모든 하위 노드의 왼쪽 값보다 작고 오른쪽 값은 모든 하위 노드의 오른쪽 값보다 큽니다. 재귀 관계의 최종 계산은 매우 빠릅니다. 물론, 이 모델에서 노드가 변경되면 평균 절반의 노드가 왼쪽 및 오른쪽 값을 다시 계산하게 되므로 실시간 변경이 자주 필요한 데이터 테이블에는 적합하지 않습니다. 구체적인 SQL 내용은 비교적 길다. 관심이 있는 분은 책을 읽어보시거나 이 책의 소스코드를 다운로드 받으시기 바랍니다.