SQL 코딩의 기술
SQL, 데이터베이스에 맞게 효율적으로 사용하라!
SQL 제대로 알고 쓰자SQL은 DBMS마다 조금씩 다른데, 약간의 차이만 알면 서로 다른 DBMS에서도 쉽게 변형해 사용할 수 있다. 대표적인 DBMS인 오라클, SQL Server, MySQL, PostgreSQL, 액세스에서 SQL을 사용하는 방법을 비교해 보여준다. 또한, 더 나은 데이터 모델을 설계하는 방법, 쿼리 성능을 향상시키는 인덱스 구현, 유연한 서브쿼리 작성법, 계층적 데이터 모델링처럼 SQL을 제대로 쓰는 방법도 알려준다.
더 나은 코딩 노하우를 배우자다양한 팁과 기술을 현실성 있고 검증된 코드 예제와 함께 61가지 Better way에 수록했다. 해야 할 것과 피해야 할 것, 작업 효율을 높이는 법, 왜 이것이 최선의 선택인지 조언하며 SQL을 더 효과적으로 작성할 수 있게 해준다.
제공된 코드를 직접 실행하며 이해하자데이터베이스 디자인 최적화에서부터 계층 및 메타데이터 관리에 이르기까지 다양한 문제를 보여주고 이를 해결한다. 문제를 해결하는 데 사용된 코드를 수록했고, 코드를 직접 실행해보고 수정하며 내용을 확실하게 이해할 수 있다.
«SQL 코딩의 기술»은 Better Way 21까지 공개합니다.
전자책 구입
목차
- 1장. 데이터 모델 설계
- BETTER WAY 1 모든 테이블에 기본키가 있는지 확인하자
- BETTER WAY 2 중복으로 저장된 데이터 항목을 제거하자
- BETTER WAY 3 반복 그룹을 제거하자
- BETTER WAY 4 컬럼당 하나의 특성만 저장하자
- BETTER WAY 5 왜 계산 데이터를 저장하면 좋지 않은지 이해하자
- BETTER WAY 6 참조 무결성을 보호하려면 외래키를 정의하자
- BETTER WAY 7 테이블 간 관계를 명확히 하자
- BETTER WAY 8 제3정규화로도 부족하다면 더 정규화하자
- BETTER WAY 9 데이터 웨어하우스에는 역정규화를 사용하자
- 2장. 인덱스 설계와 프로그램적 처리
- BETTER WAY 10 인덱스를 만들 때는 널을 고려하자
- DB2
- 액세스
- SQL Server
- MySQL
- 오라클
- PostgreSQL
- BETTER WAY 11 인덱스와 데이터 스캔을 최소화하도록 인덱스는 신중히 만들자
- BETTER WAY 12 인덱스를 단순 필터링 이상의 목적으로 사용하자
- BETTER WAY 13 트리거를 남발하지 말자
- BETTER WAY 14 데이터의 부분 집합을 포함하거나 제외하려면 필터링된 인덱스를 사용하자
- BETTER WAY 15 프로그래밍으로 검사하는 대신 선언적 제약 조건을 사용하자
- BETTER WAY 16 자신이 사용하고 작성하는 SQL의 종류를 파악하자
- 결과 집합 정렬
- 반환 결과 집합의 개수 제한
- BOOLEAN 데이터 타입
- SQL 함수
- UNIQUE 제약 조건
- BETTER WAY 17 인덱스에서 계산 결과를 사용할 시기를 파악하자
- 3장. 데이터 모델 설계를 변경할 수 없는 경우
- BETTER WAY 18 설계를 변경할 수 없을 때는 뷰로 데이터를 간소화하자
- BETTER WAY 19 비관계형 데이터를 정보성 데이터로 변환할 때는 ETL을 사용하자
- BETTER WAY 20 요약 테이블을 만들어 관리하자
- BETTER WAY 21 비정규화된 데이터를 ‘언피벗’하려면 UNION 문을 사용하자
- 4장. 데이터 필터링과 검색
- BETTER WAY 22 관계 대수와 이를 SQL로 구현하는 방법을 이해하자
- 선택(제한)
- 추출
- 조인
- 교집합
- 카티전 곱
- 합집합
- 나누기
- 차집합
- BETTER WAY 23 일치하지 않거나 누락된 레코드를 찾아내자
- BETTER WAY 24 CASE로 문제를 해결해야 할 때를 파악하자
- BETTER WAY 25 다중 조건 문제를 해결하는 기법을 파악하자
- BETTER WAY 26 완전히 일치하는 데이터가 필요할 때는 데이터를 분할하자
- BETTER WAY 27 날짜와 시간을 모두 포함하는 컬럼에서 날짜 범위를 올바르게 검색하는 방법을 알아 두자
- BETTER WAY 28 데이터베이스 엔진이 인덱스를 사용하도록 사거블 쿼리를 작성하자
- BETTER WAY 29 LEFT 조인의 오른쪽 데이터를 올바르게 걸러 내자
- 5장. 집계
- BETTER WAY 30 GROUP BY 절의 작동 원리를 이해하자
- BETTER WAY 31 GROUP BY 절은 간단하게 만들자
- BETTER WAY 32 복잡한 문제를 해결하려면 GROUP BY나 HAVING 절을 사용하자
- BETTER WAY 33 GROUP BY 절 없이 최댓값, 최솟값을 찾자
- BETTER WAY 34 OUTER JOIN에서는 잘못된 결과를 내는 COUNT( ) 함수를 사용하지 말자
- BETTER WAY 35 ‘HAVING COUNT(x) < 숫자’를 검사할 때는 제로 값을 가진 로우를 포함하자
- BETTER WAY 36 겹치지 않는 개수를 얻으려면 DISTINCT를 사용하자
- BETTER WAY 37 윈도우 함수 사용법을 알아 두자
- BETTER WAY 38 로우 번호를 만들어 다른 로우 대비 순위를 매기자
- BETTER WAY 39 이동 집계를 만들자
- 6장. 서브쿼리
- BETTER WAY 40 서브쿼리를 어디에 사용할 수 있는지 알아 두자
- 테이블 서브쿼리
- 단일 컬럼 테이블 서브쿼리
- 스칼라 서브쿼리
- BETTER WAY 41 연관성 있는 서브쿼리와 연관성 없는 서브쿼리의 차이점을 파악하자
- 연관성 없는 서브쿼리
- 연관성 있는 서브쿼리
- BETTER WAY 42 가능하면 서브쿼리 대신 공통 테이블 표현식을 사용하자
- CTE로 쿼리를 단순하게 만들기
- 재귀 CTE 사용하기
- BETTER WAY 43 서브쿼리 대신 조인을 사용해 더 효율적인 쿼리를 작성하자
- 7장. 메타데이터 획득 및 분석
- BETTER WAY 44 사용 중인 시스템의 쿼리 분석기 사용법을 파악하자
- DB2
- 액세스
- SQL Server
- MySQL
- 오라클
- PostgreSQL
- BETTER WAY 45 데이터베이스 관련 메타데이터를 수집하는 방법을 배우자
- BETTER WAY 46 실행 계획의 작동 원리를 이해하자
- 8장. 카티전 곱
- BETTER WAY 47 두 테이블에서 로우 조합을 만들어 한 테이블과 간접적으로 관련된 다른 테이블 로우에 표시를 남기자
- BETTER WAY 48 등분위로 로우 순위를 매기는 방법을 이해하자
- BETTER WAY 49 한 테이블에서 각 로우와 다른 모든 로우를 쌍으로 만드는 방법을 알아 두자
- BETTER WAY 50 카테고리별 목록을 만들어 첫 번째, 두 번째, 세 번째 순위의 정보를 참조하는 방법을 파악하자
- 9장. 탤리 테이블
- BETTER WAY 51 매개변수를 기준으로 널 로우를 만들려면 탤리 테이블을 사용하자
- BETTER WAY 52 순번을 생성할 때는 탤리 테이블과 윈도우 함수를 사용하자
- BETTER WAY 53 탤리 테이블에 있는 범위 값을 기준으로 여러 로우를 만들자
- BETTER WAY 54 탤리 테이블에 있는 값 범위를 기준으로 한 테이블에 있는 값을 변환하자
- BETTER WAY 55 날짜 계산을 쉽게 하려면 날짜 테이블을 사용하자
- BETTER WAY 56 특정 범위에 있는 모든 날짜를 나열한 일정 달력을 만들자
- BETTER WAY 57 탤리 테이블로 데이터를 피벗하자
- 10장. 계층형 데이터 모델링
- BETTER WAY 58 인접 리스트 모델을 시작점으로 사용하자
- BETTER WAY 59 자주 갱신되지 않는 데이터의 쿼리 성능을 빠르게 하려면 중첩 집합을 사용하자
- BETTER WAY 60 제한된 검색과 간단한 설정에는 구체화된 경로를 사용하자
- BETTER WAY 61 복잡한 검색에는 계통 순회 폐쇄 구조를 사용하자
- 부록. 날짜와 시간 타입, 연산, 함수
- DB2
- 데이터 타입
- 산술 연산
- 함수
- 액세스
- 데이터 타입
- 산술 연산
- 함수
- SQL Server
- 데이터 타입
- 산술 연산
- 함수
- MySQL
- 데이터 타입
- 산술 연산
- 함수
- 오라클
- 데이터 타입
- 산술 연산
- 함수
- PostgreSQL
- 데이터 타입
- 산술 연산
- 함수