말 그대로 기초에 충실한 기초만을 다지기 위한 책입니다.
SQL에 대해서 아직 배우지 않으신 분,
어떤 책으로 시작해야될지 고민이시라면..
이 책을 추천합니다 .^^;
서문
1. 데이터와 테이블: 모든 정보는 여기에
뭔가 잃어버리는 것은 짜증나죠? 그것이 차 열쇠이든, 25% 할인쿠폰이든, 프로그램의 데이터든 필요한 것들을 잘 보관하는 것은 중요합니다. 프로그램의 중요한 정보는 테이블에 보관하는 것이 좋습니다. 이제 페이지를 넘겨 관계형 데이터베이스의 세계로 빠져봅시다.
데이터 정의
카테고리로 데이터를 살펴보기
데이터베이스에는 무엇이 들어있나요?
투시경을 통해 본 데이터베이스
데이터베이스는 연결된 데이터를 가지고 있습니다.
테이블 자세히 들여다보기
명령어 입력!
테이블 설정: CREATE TABLE 문
더 복잡한 테이블 만들기
작성이 얼마나 쉬운지 보세요.
마침내 my_contacts 테이블 생성
테이블이 준비되었습니다.
데이터 타입들과 회의 한번 하죠.
여러분의 테이블, DESCribed(기술되었습니다).
이미 존재하는 데이터베이스나 테이블은 다시 생성할 수 없습니다!
예전 테이블은 버리고, 새로운 테이블로
테이블에 데이터를 추가하려면, INSERT 문을 써야 합니다.
INSERT 문 만들기
INSERT 문의 변형
SELECT 문으로 테이블을 들여다 보세요.
SQL 파헤치기 NULL의 고백
NULL 제어하기
NOT NULL은 DESC 결과에 표시됩니다.
빈 칸을 디폴트 값으로 채우기
SQL 도구상자
2. SELECT 문: 데이터 가져오기의 축복
정말 가져오는 것보다 주는 것이 더 낫나요? 데이터베이스에서는 데이터를 추가하기보다는 가져올 일이 더 많을 거예요. 이 장이 그래서 필요한 거지요. 여러분은 강력한 SELECT 문을 경험하고, 테이블 안의 중요한 정보에 대한 접근 방법을 배울 것입니다. WHERE, AND 그리고 OR를 사용해서 원하는 데이터를 얻고 필요없는 데이터는 표시하지 않는 방법을 배울 것입니다.
데이트를 할 수 있을까?
더 나은 SELECT 문
*는 뭐죠?
데이터 타입을 알아내는 방법
구두점 문제 추가
작은 따옴표가 짝이 안 맞아요.
작은 따옴표는 특수 문자입니다.
작은 따옴표를 포함함 데이터 삽입하기
특정 열을 SELECT하여 결과 제한하기
더 빠른 결과를 위해 원하는 열을 SELECT하세요.
쿼리들의 결합
숫자형 값 찾기
편리한 비교 연산자
비교 연산자를 사용하여 숫자형 데이터 찾기
비교 연산자를 이용한 문자열 처리
죽느냐 사느냐(To be OR not to be)
AND와 OR의 차이
NULL을 찾으려면 IS NULL을 사용하세요.
한 단어를 써서 시간을 아껴야죠: LIKE
와일드 카드의 사용
비교 연산자와 AND를 사용하여 범위 정하기
사실.. 더 좋은 방법이 있어요.
데이트 후 여러분에 대한 평가는..
..좋지 않게 평가받습니다.
NOT에 대해 좀 더
SQL 도구 상자
3. DELETE와 UPDATE: 바꾸면 나아질 거예요.
계속 마음이 바뀐다구요? 이제 괜찮아요! 지금부터 배울 명령어 DELETE와 UPDATE가 있으면 예전에 추가한 데이터의 내용이 바뀌어도 고민할 필요가 없어요. UPDATE로 데이터의 변경이 가능하고 DELETE로 필요 없는 데이터는 지울 수 있어요. 뿐만 아니고 이러한 도구를 사용하여 버려야 할 데이터만을 선택적으로 버리는 방법도 배웁니다.
광대들이 무서워요.
광대 추적
광대들이 이동하고 있어요.
광대 정보 입력 방식
본조(Bonzo), 문제가 있어요.
DELETE를 이용한 레코드의 삭제
새 DELETE 문 사용
DELETE 규칙
INSERT-DELETE 두 단계
DELETE를 사용할 때는 조심하세요.
정확하지 않은 DELETE의 걱정
UPDATE로 데이터를 변경하세요.
UPDATE 규칙들
UPDATE는 새로운 INSERT-DELETE입니다.
UPDATE 동작
광대들의 이동을 변경하기
가격 UPDATE
우리가 필요한 것은 하나의 UPDATE 문입니다.
SQL 도구 상자
4. 좋은 테이블 설계: 정규화는 왜 하죠?
지금까지 별 생각없이 테이블을 만들었습니다. 잘 동작하는데 무슨 문제냐구요? 데이터가 많아지면 원하는 데이터를 찾기 위한 WHERE 절이 점점 복잡해지기 시작합니다. 테이블을 정규화하여 이 문제를 해결할 수 있습니다.
낚시 관련 테이블 두 개
테이블은 관계에 관한 것
원자적 데이터
원자적 데이터와 테이블
원자적 데이터 규칙
정규화의 이유
정규 테이블의 이점
광대 테이블은 정규화되어 있지 않습니다.
1NF로 가는 중
기본키 규칙
정규화의 세계로
그렉의 테이블 수정
예전에 작성한 CREATE TABLE
테이블을 보여주세요.
시간을 아껴주는 명령어
기본키가 있는 테이블 생성하기
1, 2, 3.. 자동 증가
존 테이블에 기본키 추가하기
테이블을 변경하고 기본키 추가하기
SQL 도구 상자
5. ALTER: 과거 다시 쓰기
예전의 실수를 고치고 싶다구요? 기회가 왔습니다. ALTER 명령어를 사용해서 지금까지 배운 내용을 예전 테이블에 적용할 수 있습니다. 예전 데이터에는 영향을 주지 않으면서 말이죠. 이 장을 마치면 정규형의 의미를 더 명확히 알고 예전과 현재의 모든 테이블에 적용할 수 있을거예요.
변경이 필요합니다.
테이블 변경
테이블 완전 수리
테이블 이름 바꾸기
어떻게 할지 결정해야 합니다.
열 변경
구조 변경
ALTER와 CHANGE
하나의 SQL 문으로 두 개의 열 변경
잠깐요! 그 열은 버리세요.
원자적이지 않은 장소(location) 열을 자세히 들여다 보기
패턴 찾기
도움되는 문자 함수들
현재의 열로 새 열을 채우기
UPDATE 문과 SET이 함께 동작하는 방식
SQL 도구 상자
6. 고급 SELECT: 새로운 시각으로 데이터 살펴보기
여러분의 도구상자에 기발한 도구들을 채울 차례입니다. SELECT와 WHERE절의 사용 방법은 이미 알고 있습니다. 하지만 그것만으로는 부족한 경우가 종종 있습니다. 이번 장에서는 순서를 정하고 데이터를 그룹핑하고 결과에 수학 연산을 수행하는 방법을 배웁니다.
데이터 마을 비디오 가게가 새롭게 태어납니다.
현 테이블의 문제점
기존 데이터 변경
새로운 열 채우기
CASE식을 포함한 UPDATE
문제가 있어요.
테이블이 지저분해질 수 있습니다.
찾는 데이터를 정리할 방법이 필요해요.
ORDER BY를 사용해 보세요.
하나의 열로 순서 매기기
두 개의 열을 이용하여 정렬하기
여러 열로 정렬
정렬된 movie_table
DESC를 사용하여 역순으로 정렬
걸스카우트 과자 판매왕 문제
SUM이 대신 더하기를 수행할 수 있어요.
Sales 열의 값을 모두 더합니다.
GROUP BY를 사용한 AVG
MIN과 MAX
날 세어보기
SELECT DISTINCT 값
결과의 갯수를 제한하기
두번째 수상자만으로 제한
SQL 도구 상자
7. 테이블이 여러개인 테이블 데이터베이스 설계: 테이블이 점점 커지네요.
테이블 하나로는 충분하지 않은 경우가 대부분입니다. 여러분의 데이터는 더 복잡해졌고, 지금까지 사용한 하나의 테이블로는 문제가 있습니다. 중복 데이터가 많아 공간 낭비가 심하고 쿼리도 느려집니다. 하나의 테이블로는 한계가 있습니다. 하지만 더 큰 세상이 있습니다. 데이터를 저장, 제어하여 데이터베이스를 한껏 활용하려면 테이블이 여러 개 필요합니다.
나이젤에게 사랑 찾아주기
좋아진 것이 없네요.
테이블 하나의 틀에서 벗어나 보세요.
여러 테이블로 구성한 광대 추적 데이터베이스
광대 추적(clown_tracking) 데이터베이스 스키마
하나의 테이블을 두 개로 만드는 법
테이블의 연결
참조키 제약조건
굳이 참조키를 만들어야 하나요?
참조키가 있는 테이블 생성
테이블간의 관계
데이터 패턴: 일대일
데이터의 패턴: 일대일 관계의 테이블은 언제 사용하죠?
데이터의 패턴: 일대다 관계
데이터의 패턴: 다대다 관계
데이터의 패턴: 연결 테이블이 필요해요.
데이터의 패턴: 다대다
마침내 1NF
합성키는 여러 개의 열을 사용합니다.
간편한 표기법
부분적 함수 종속
이행적 함수 종속(transitive functional dependency)
제 2 정규형
(마침내) 3NF로
그래서 레기스(와 gregs_list)는 행복하게 살았답니다.
SQL 도구 상자
8. 조인과 다중 테이블 오퍼레이션: 우리 그냥 잘 지낼수 없을까요?
다중 테이블의 세계에 오신 걸 환영합니다. 데이터베이스에 테이블이 하나 이상 있는 것이 좋긴 하지만, 그 테이블들을 조작하려면 새로운 도구와 기술을 익혀야 합니다. 여러 테이블의 사용으로 인한 혼란 때문에 테이블을 지칭하는 별명(alias)이 필요할 때도 있고, 원하는 데이터들을 모두 얻으려 할 때, 조인을 사용하여 테이블을 연결하면 많은 도움이 되기도 합니다. 준비하세요. 다시 데이터베이스를 제어할 시간입니다.
같은 데이터가 계속 반복되네요, 여전히..
테이블을 미리 채워 넣으세요.
테이블을 정규화하는 것은 어렵습니다.
특별한 관심사 열
관심사(interests) 열 변경
interests 업데이트
모든 관심사 가져오기
같은 결과를 내는 여러 가지 방법
(거의) 동시에 CREATE, SELECT 그리고 INSERT 문을 사용하기
동시에 CREATE, SELECT 그리고 INSERT하기
AS가 왜 있는 거죠?
열에 대한 별명
테이블 별명은 누가 사용하죠?
내부 조인에 관한 모든 것
카티젼 조인
내부 조인 파헤치기
내부 조인: 동등 조인
내부 조인: 비동등 조인
마지막 내부 조인: 자연 조인
조인을 이용한 쿼리?
테이블과 열 별명 파헤치기
SQL 도구 상자
9. 서브 쿼리: 쿼리 안의 쿼리
질문을 두 부분으로 나눠서 하고 싶어요. 조인이 좋지만 데이터베이스에 하나 이상의 질문을 해야 할 경우가 있어요. 쿼리의 결과를 가져다 다른 쿼리의 입력으로 사용해야 할 경우도 있구요. 서브 쿼리가 이 경우에 필요합니다. 서브 쿼리를 사용하면 데이터의 중복을 피할 수 있고, 쿼리를 좀더 동적으로 할 수 있고, 고급 콘서트 파티에도 갈 수 있어요(고급 콘서트 파티는 농담이예요!).
그렉이 직업 소개업에 뛰어 들었습니다.
그렉의 리스트에 테이블이 많아집니다.
그렉이 내부 조인을 사용합니다.
하지만 좀 다른 쿼리를 원합니다.
서브 쿼리
두 개의 쿼리를 합쳐 서브 쿼리를 포함한 쿼리 하나로 만들기
한 쿼리로는 충분하지 않으면: 서브 쿼리를 사용하세요.
서브 쿼리의 동작
서브 쿼리의 법칙
서브 쿼리 생성 따라하기
서브 쿼리를 SELECT 열에서 사용
다른 예: 자연 조인을 포함한 서브 쿼리
비상관 서브 쿼리
SQL 파헤치기
여러 값을 반환하는 비상관 서브 쿼리: IN, NOT IN
상관 서브 쿼리
NOT EXISTS를 포함한 (유용한) 상관 서브 쿼리
EXISTS와 NOT EXISTS
그렉의 구직 서비스가 오픈되었습니다.
파티로 가는 길에
SQL 도구 상자
10. 외부 조인, 셀프 조인, 유니온: 새로운 조작법
여러분은 조인의 반쪽만을 알고 있습니다. 행의 가능한 모든 조합을 반환하는 크로스 조인, 두 테이블에서 일치하는 행을 반환하는 내부 조인을 살펴 보았습니다. 하지만 다른 테이블에 일치하는 행이 없는 행도 반환하는 외부 조인, 자신과 조인하는(좀 이상하긴 하지만) 셀프 조인 그리고 쿼리의 결과를 합하는 유니온은 다루지 않았습니다. 이 방법들을 배우고 나면, 원하는 데이터를 여러분 마음대로 가져올 수 있습니다(그리고 서브 쿼리의 진실을 밝히는 것도 잊지 않았습니다!).
예전 데이터 정리하기
왼쪽과 오른쪽이 있습니다.
왼쪽 외부 조인입니다.
외부 조인과 여러 개의 일치
오른쪽 외부 조인
당신이 외부 조인으로 정신없는 동안
새 테이블을 만들 수 있습니다.
새 테이블과 다른 테이블의 관계
자신을 참조하는 참조키
같은 테이블로 조인
우리는 셀프 조인이 필요합니다.
여러 테이블에서 정보를 얻는 또다른 방법
유니온을 사용할 수 있습니다.
유니온에는 한계가 있습니다.
유니온 규칙
UNION ALL
유니온으로 테이블 만들기
INTERSECT와 EXCEPT
조인은 모두 마쳤으니 다음으로 넘어갑시다.
서브 쿼리와 조인 비교
서브 쿼리를 조인으로 바꾸기
셀프 조인을 서브 쿼리로
그렉의 회사가 번창하고 있습니다.
SQL 도구 상자
11. 제약사항, 뷰, 트랜잭션: 요리사가 많으면 데이터베이스를 망칩니다.
여러분의 데이터베이스에 정보가 많아졌고, 다른 사람들이 사용해야 합니다. 문제는 데이터베이스를 사용할 사람들이 모두 당신처럼 SQL 전문가가 아니라는 사실입니다. 사람들이 잘못된 데이터를 입력하지 못하게 할 방법, 데이터의 일부만을 볼 수 있게 할 방법, 데이터를 동시에 입력할 때 서로 엉키지 않게 할 방법이 필요합니다. 이 장에서는 우리의 데이터를 다른 사람들의 실수로부터 보호하기 시작합니다. 데이터베이스의 방어, 1부에 오신 걸 환영합니다.
그렉이 직원을 고용했습니다.
짐의 첫째 날: 새 고객 추가
짐은 NULL을 싫어해요.
세 달 후로 가봅시다.
제발 확인(check)해 주세요: 체크 제약조건을 추가하기
성별 확인
프랭크는 일이 짜증난다고 합니다.
뷰 생성
뷰를 보기
뷰가 실제로 하는 일
뷰란 무엇인가?
뷰에 추가(INSERT), 변경(UPDATE), 삭제(DELETE)하기
핵심은 뷰가 실제 테이블인 것처럼 동작한다는 것입니다.
CHECK OPTION을 사용한 뷰
여러분의 뷰는 변경 가능합니다. 단 이러한 경우에
뷰를 사용할 필요가 없어질 때
데이터베이스에 무슨 일이 생기면
현금 인출기에서 일어난 일
현금 인출기에서의 더 심각한 문제
꿈이 아닙니다, 트랜잭션이 있으니까요.
ACID 테스트
SQL을 사용하여 트랜잭션을 쉽게 관리할 수 있어요.
일을 제대로 하는 현금 인출기
MySQL에서 트랜잭션을 수행하는 방법
이제 직접 해보세요.
SQL 도구 상자
12. 보안: 여러분의 자산 보호
엄청난 시간과 땀을 들여 데이터베이스를 만들었습니다. 데이터베이스에 문제가 생기면 실망이 크겠죠. 사람들에게 데이터에 대한 접근을 허용해야 했기 때문에, 혹시 데이터를 추가하고 업데이트할 때 값을 잘못 사용하거나, 심지어 엉뚱한 데이터를 지울까 걱정이 클 것입니다. 이번 장에서는 데이터베이스와 데이터베이스 내의 객체들을 좀더 안전하게 보호하는 법과 데이터를 누가 어떻게 사용할지 완벽히 통제하는 법을 배울 것입니다.
사용자 문제
광대 추적 데이터베이스에서 에러 피하기
루트 사용자 계정 보호
새 사용자 추가
사용자가 원하는 것을 명확히 결정하세요.
간단한 GRANT 문
GRANT의 다양한 형태
권한의 취소
이미 사용된 GRANT OPTION 없애기
권한을 정확히 없애기
계정을 공유할 때 생기는 문제점
역할 사용
역할 버리기
WITH ADMIN OPTION과 함께 역할을 사용하기
CREATE USER와 GRANT의 결합
그렉의 리스트가 세계로 진출했습니다.
SQL 도구 상자
여러분 도시에서는 그렉의 리스트가 어떻습니까?
여러분 프로젝트에서 SQL을 사용하세요, 그러면 여러분도 그렉처럼
될 수 있어요!
부록
찾아보기
자료명 | 등록일 | 다운로드 |
---|---|---|
예제소스 | 2023-09-25 | 다운로드 |