제1부. 데이터베이스 개요 1.1. 데이터베이스의 개요 ... 14 1.2. 모델의 종류 ... 19 1.2.1. 계층 데이터 모델(Hierarchical Data Model) ... 19 1.2.2. 망 데이터 모델(Network Data Model) ... 20 1.2.3. 관계 데이터 모델(Relational Data Model) ... 20 1.2.4. 객체지향 데이터 모델(Object-oriented Data Model) ... 20 1.2.5. 객체관계 데이터 모델(Object Relational Data Model) ... 21 1.3. 관계형 모델과 객체 지향형 데이터베이스 ... 21 1.3.1. 관계형 모델 ... 21 1.3.2. 관계형 모델의 용어 ... 22 1.3.3. 테이블(Table), 열(Column), 행(Row) ... 23 1.3.4. 무결성 규칙 ... 23 1.3.5. RDBMS 구성 요소들 ... 25 1.4. SQL이란 무엇인가? ... 27 1.4.1. SQL의 표준화 ... 27 1.5. 본서의 구성 ... 28 제2부. MySQL 설치와 기본 사용법 2.1. MySQL의 특징 ... 32 2.2. MySQL 설치 ... 33 2.2.1. MySQL 설치 전 점검사항 ... 33 2.2.2. 윈도우에서 MySQL 설치하기 ... 36 2.2.3. MySQL 설치 후 확인하기 ... 41 2.2.4. MySQL 한글 설정하기 ... 43 2.3. MySQL 기본 사용법 ... 44 2.3.1. 사용자 계정 추가하기 ... 44 2.3.2. 데이터베이스 생성, 수정, 삭제 ... 47 2.3.3. 테이블 생성, 수정, 삭제 ... 48 2.3.4. 테이블 삽입 ... 51 2.3.5. 데이터 검색 ... 52 2.3.6. 입력 데이터 변경 및 삭제 ... 54 2.4. MySQL의 데이터베이스 관리 툴 ... 56 제3부. 학사 관리 예제 데이터베이스 3.1. 학사 데이터베이스의 해설 ... 58 3.2. 테이블의 내용 ... 62 3.3. 무결성 규칙 ... 66 제4부. 학사관리 예제 만들기 4.1. MySQL 데이터베이스 생성 ... 70 4.1.1. 데이터베이스 및 테이블 만들기 ... 70 4.1.2. Commit/Rollback 작업 ... 72 4.1.3. Savepoint/Truncate 작업 ... 75 4.2. SQL 데이터형(Data Type) ... 77 4.2.1. SQL 데이터형 ... 77 4.2.2. NULL 값 ... 80 4.3. 학사 관리 예제 만들기 ... 80 4.3.1. 데이터베이스 및 사용자 계정 생성 ... 80 4.3.2. 테이블 생성 ... 82 4.3.3. 테이블 데이터 삽입 ... 88 4.3.4. 질의(Query) 테이블 ... 90 4.3.5. 행의 갱신과 삭제 ... 93 4.3.6. 뷰(Views) ... 95 4.4. 보안 설정 ... 98 4.4.1. ROOT 사용자의 데이터 보완 ... 98 4.4.2. 사용자 생성 및 권한부여 ... 99 제5부. 테이블 생성 5.1. MySQL RDBMS의 제한 조건 ... 108 5.2. 새로운 테이블의 생성 ... 109 5.3. 기본 키 ... 111 5.4. 테이블 명세와 소유자 ... 112 5.5. 테이블과 열의 이름 ... 113 5.6. 테이블의 삭제 ... 114 5.7. 테이블의 구조 변경(열의 추가) ... 114 5.8. 테이블 구조의 변경 ... 115 5.9. 테이블 복사 ... 116 5.10. 테이블 이름 변경 ... 118 5.11. 테이블과 데이터 사전 ... 118 제6부. SELECT 명령문과 공통 요소 6.1. 리터럴(Literal) ... 129 6.1.1. 정수 리터럴 ... 130 6.1.2. 십진 리터럴 ... 130 6.1.3. 부동 소수점 리터럴 ... 130 6.1.4. 영수치 리터럴 ... 131 6.1.5. 날짜 리터럴 ... 132 6.2. 수식 ... 132 6.2.1. 수치 수식과 숫자 처리 함수 ... 133 6.2.2. 영수치 수식 ... 135 6.2.3. 숫자 처리 함수 ... 136 6.3. 스칼라 함수 ... 140 6.4. 날짜 및 시간 처리 ... 144 6.4.1. 날짜 및 시간 관련 칼럼 타입 ... 144 6.4.2. 날자 및 시간 관련 함수 ... 144 6.5. 데이터형 변환 함수 ... 148 6.6. 사용자 정의 변수 ... 151 6.7. 시스템변수 ... 152 제7부. SELECT 명령문의 절(Clause) 7.1. 서론 ... 158 7.2. SELECT 명령문 모든 절을 포함한 수행 과정 ... 159 7.2.1. FROM 절 ... 162 7.2.2. WHERE 절 ... 163 7.2.3. GROUP BY 절 ... 163 7.2.4. HAVING 절 ... 164 7.2.5. SELECT 절 ... 165 7.2.6. ORDER BY 절 ... 166 7.3. SELECT 명령문 일부 절을 포함한 수행 과정 ... 166 7.3.1. FROM 절 ... 167 7.3.2. WHERE 절 ... 168 7.3.3. GROUP BY 절 ... 168 7.3.4. HAVING 절 ... 168 7.3.5. SELECT 절 ... 168 7.3.6. ORDER BY 절 ... 169 제8부. SELECT 명령문 : FROM 절 8.1. FROM 절에서 테이블 명세 ... 172 8.2. 열 명세 ... 173 8.3. 다중 테이블 명세 ... 174 8.4. 가명(Alias) ... 177 8.5. FROM 절의 다양한 예제 ... 178 8.6. 반드시 가명을 사용해야 하는 경우 ... 184 제9부. SELECT 명령문 : WHERE 절 9.1. 개요 ... 188 9.2. 관계 연산자를 사용하는 조건 ... 189 9.3. AND, OR, NOT을 사용한 다중 조건 ... 193 9.4. BETWEEN 연산자 ... 197 9.5. IN 연산자 ... 199 9.6. LIKE 연산자 ... 201 9.7. NULL 연산자 ... 204 9.8. 부속 질의어에서 IN 연산자 ... 206 9.9. 부속 질의어에서 관계 연산자 ... 212 9.10. ALL과 ANY 연산자 ... 214 9.11. EXISTS 연산자 ... 218 9.12. 부정 조건 ... 222 제10부. SELECT 명령문 : 통계함수 10.1. 모든 열의 선택(*) ... 232 10.2. SELECT 절의 수식 ... 234 10.3. DISTINCT을 사용한 중복된 행의 제거 ... 235 10.4. 언제 2개의 행이 동등한가? ... 238 10.5. 통계 함수의 소개 ... 240 10.6. COUNT 함수 ... 241 10.7. MAX와 MIN 함수 ... 244 10.8. SUM 함수 ... 247 10.9. AVG 함수 ... 248 10.10. STDDEV와 VARIANCE 함수 ... 251 10.11. 통계 함수를 사용하는 일반적인 규칙 ... 251 10.12. 열의 표제어 사용 ... 253 제11부. GROUP BY와 HAVING 11.1. 열의 그룹화 ... 259 11.2. 2개 이상의 열에 대한 그룹화 ... 261 11.3. 수식의 그룹화 ... 265 11.4. NULL 값의 그룹화 ... 266 11.5. GROUP BY와 DISTINCT ... 267 11.6. HAVING 절의 소개 ... 267 11.7. HAVING 절의 예제 ... 268 11.8. HAVING 절에 대한 일반적인 규칙 ... 270 제12부. SELECT 명령문 : ORDER BY 절 12.1. 단일 열 정렬 ... 276 12.2. 순서 번호로 정렬 ... 277 12.3. 오름차순과 내림차순 정렬 ... 278 12.4. 하나 이상의 행 정렬 ... 279 12.5. 수식과 함수의 정렬 ... 282 12.6. NULL 값의 정렬 ... 283 제13부. SELECT 명령문의 조합 13.1. 서론 ... 288 13.2. UNION의 조합 ... 289 13.3. UNION을 사용하기 위한 규칙 ... 293 13.4. UNION ALL의 조합 ... 294 13.5. 집합 연산자와 NULL 값 ... 295 제14부. 부속 질의어 14.1. 부속 질의어 규칙 ... 300 14.2. 열의 범위 ... 301 14.3. 상호 관련 부속 질의어의 예제 ... 306 14.4. 복합키의 사용 ... 313 제15부. SELECT 명령문 : 조인(JOIN) 15.1. 조인 ... 320 15.2. 조인에서 사용되는 용어 ... 321 15.3. 조인 열 간의 관계성 ... 324 15.3.1. CROSS JOIN ... 324 15.3.2. INNER EQUI JOIN ... 326 15.3.3. OUTER EQUI-JOIN ... 329 15.3.4. FULL OUTER JOIN ... 332 15.3.5. Sell Join ... 335 15.3.6. 조인 열 모집단의 분해 ... 338 15.4. 조인 조건이 없는 조인 ... 339 15.5. 통계 함수와 조인 ... 340 제16부. 테이블의 변경 16.1. 새로운 행 삽입 ... 347 16.2. 테이블에서 테이블로 행을 복사 ... 348 16.3. 행 값의 변경 ... 352 16.4. 테이블에서 행 삭제 ... 366 제17부. 인덱스의 사용 17.1. 인덱스 작업 ... 360 17.2. SELECT 명령문의 단계적 처리 ... 363 17.3. 인덱스의 생성과 삭제 ... 367 17.4. MySQL과 인덱스 ... 368 17.5. 인덱스를 위한 열의 선택 ... 369 17.5.1. 후보 키에 대한 유일한 인덱스 ... 370 17.5.2. 외래 키에 대한 인덱스 ... 370 17.5.3. 선택 표준에 포함된 열에 대한 인덱스 ... 370 17.5.4. 정렬에 사용된 열에 대한 인덱스 ... 372 17.5.5. 그룹화에 사용된 열에 대한 인덱스 ... 372 17.5.6. DISTINCT에 대한 인덱스 ... 372 17.5.7. 인덱스를 정의하지 않을 때 ... 372 제18부. 뷰(View) 18.1. 뷰의 생성 ... 376 18.2. 뷰의 열 이름 ... 381 18.3. 뷰의 변경 : WITH CHECK OPTION ... 383 18.4. 뷰 테이블의 정보 ... 386 18.5. 뷰 테이블 통계함수 사용 ... 388 18.5.1. WHERE 절에 통계함수 사용 ... 388 18.5.2. SELECT 절에 통계함수 사용 ... 389 18.5.3. GROUP BY절을 이용한 VIEW 테이블과 다른 테이블과 JOIN ... 389 18.5.4. WHERE 절에 다른 테이블로 부속질의어로 사용하는 경우 ... 390 18.5.5. ORDER BY 절을 사용하는 경우 ... 390 18.5.6. 집합연산자를 사용하는 경우 ... 391 18.5.7. HAVING절을 사용하는 경우 ... 392 18.6. 뷰 테이블의 제약 사항 ... 393 18.7. 뷰 명령문의 처리 ... 393 18.8. 뷰의 응용 분야 ... 395 제19부. 트랜잭션(Transaction)과 락(LOCK) 19.1. 트랜잭션이란? ... 402 19.2. MySQL에서의 트랜잭션 ... 403 19.2.1. 트랜잭션의 사용 ... 404 19.3. 락(LOCK) ... 406 제20부. SQL 명령문의 최적화 20.1. OR 연산자의 사용을 피하라 ... 410 20.2. 불필요한 UNION 연산자의 사용을 피하라 ... 415 20.3. NOT 연산자를 피하라 ... 417 20.4. 조건에 열을 분리하라 ... 418 20.5. BETWEEN 연산자를 사용하라 ... 419 20.6. LIKE 연산자의 특별한 형식을 피하라 ... 420 20.7. 조인에 여분의 조건을 추가하라 ... 421 20.8. HAVING 절을 피하라 ... 421 20.9. 가능한 작은 SELECT 절을 만들어야 한다 ... 422 20.10. DISTINCT 사용을 피하라 ... 423 20.11. 자료형의 변환을 피해야 한다 ... 424 20.12. 가장 큰 테이블을 마지막에 위치하라 ... 424 20.13. ANY와 ALL 연산자의 사용을 피하라 ... 425 20.14. 미래의 최적화기 ... 427 20.15. 디스크 최적화 ... 427 20.16. 운영체제 최적화 ... 428 제21부. 데이터베이스 설계 지침 21.1. 테이블과 열에 대한 지침 ... 433 21.2. 중복 데이터의 포함 ... 436 21.3. 열에 대한 자료형의 선택 ... 439 21.4. 언제 NOT NULL을 사용해야 하는가? ... 440 제22부. MySQL 유틸리티 22.1. myisamchk ... 444 22.2. myisamlog ... 451 22.3. myisampack ... 451 22.4. mysql ... 452 22.5. mysqlaccess ... 453 22.6. mysqladmin ... 453 22.7. mysqlbinlog ... 453 22.8. mysqlcheck ... 454 22.9. mysqldump ... 455 22.10. mysqlhotcopy ... 456 22.11. mysqlimport ... 456 22.12. mysqlshow ... 456 22.13. mysql_zap ... 457 22.14. perror ... 457 22.15. replace ... 459 제23부. Trigger 23.1. CREATE TRIGGER 구문 ... 462 23.2. DROP TRIGGER 구문 ... 466 23.3. 트리거 사용하기 ... 466 부록 1. BNF ... 472 2. SQL 예약어와 ASCII 문자 집합 ... 474 2.1. SQL 1 표준에약어 ... 475 2.2. SQL 명령문의 구문 정의 ... 476 2.3. Definitions of SQL statement ... 478 2.4. Common elements ... 482 2.5. ASCII 문자 집합 ... 488 2.6. 학사데이터베이스 데이터 입력 명령 ... 494