1. 스터디 도서: Microsoft 전문가로 가는 지름길 1 SQL Server 2000
SQL Study Written By 유혜원 1/43
2. 책 본문 PT
요약 정보 처리
하위 질의(subquery)
IN / EXISTS
상관관계의 하위 질위
(Correlated subquery)
SELECT INTO
UNION
따라하기
JOIN
GROUP BY / HAVING
COMPUTE / COMPUTE BY
RLLUP 과 CUBE
하위 질의(subquery)
IN / EXISTS
SELECT INTO
UNION
SQL Study Written By 유혜원 2/43
3. JOIN 이란?
정규화된 테이블들에 흩어져 있는 컬럼들을
필요에 의해 다시 모아 올 때 사용하는 것.
JOIN의 종류
• INNER JOIN
• OUTER JOIN
• SELF JOIN
• NAUTURAL JOIN
• EQUI JOIN
• CROSS JOIN
SQL Study Written By 유혜원 3/43
4. 가장 일반적인 JOIN.
어떤 JOIN인지 지정하지 않으면,
자동적으로 INNER JOIN이 됨.
두 테이블에 있는 키 값이 일치하는
데이터만 가져 옴.
[TIP] JOIN은 가능한 ANSI 문법으로 작성하는
것을 권장.
SQL Study Written By 유혜원 4/43
5. 책 제목과 해당 책의 가격, 출판사 이름
데이터가 담겨 있는 목록을 출력하라.
SELECT title, price, pub_name
FROM titles (INNER) JOIN publishers
ON titles.pub_id = publishers.pub_id
SQL Study Written By 유혜원 5/43
7. Titles 테이블 Publishers 테이블
•Titles 테이블과 Publishers 테이블의
Pub_id가 같은지 비교한다.
• Pub_id가 같은 행의 내용들을
합친다.
• 합쳐진 내용들을 기준으로
title, price, pub_name 을 출력한다.
SQL Study Written By 유혜원 7/43
9. JOIN을 하는 테이블들 중 어느 한 쪽의
데이터를 모두 가져옴.
실무에서 사용 빈도가 높음.
[TIP] 긴 테이블 이름은 alias(별명)로 대체가능.
여러 테이블에서 사용되는 컬럼의 경우 어느 테이블의 컬럼
데이터를 지칭하는지 사용자와 프로그램 모두 알 수 없기
때문에 컬럼명 앞에 테이블명을 붙여준다.
이 때 긴 테이블명의 경우 타이핑의 편리함을 위해 별명을 지정
하여 대체 가능하다.
SQL Study Written By 유혜원 9/43
10. 책 번호와 그 책의 판매 수량, 제목 데이터
가 담겨있는 목록을 출력하라.
SELECT t.title_id, qty, title
FROM titles t LEFT OUTER JOIN sales s
ON t.title_id = s.title_id
SQL Study Written By 유혜원 10/43
11. 예제 테이블들의 ER-D
SQL Study Written By 유혜원 11/43
12. Titles 테이블 Sales 테이블
•Titles 테이블의 데이터를 가져온다.
•Titles 테이블과 Sales 테이블의
title_id가 같은지 비교한다.
• title_id가 같은 행의 내용들은 합치
고Titles 테이블에 없는 title_id는
NULL값으로 처리한다.
• 합쳐진 내용들을 기준으로
title_id, qty, title 을 출력한다.
SQL Study Written By 유혜원 12/43
14. 자기 자신을 다시 조인하는 경우.
자기 자신을 다시 조인하여 똑같은 테이블
이름을 두 번 반복해서 사용하기 때문에
구분을 위해 반드시 alias가 필요.
SQL Study Written By 유혜원 14/43
15. 작가가 두 명 이상인 책 목록을 출력하라.
SELECT t1.title_id, t1.au_id, t2.au_id
FROM titleauthor t1, titleauthor t2
WHERE t1.title_id = t2.title_id
AND t1.au_id < t2.au_id
ORDER BY t1.title_id
SQL Study Written By 유혜원 15/43
16. •Titlesauthor테이블을 2번 불러온다.
• 이 때 구분을 위해 각각 다른 별명을
붙여준다.
• 서로 title_id가 같은지 비교한 후,
그 결과값의 au_id를 비교하여 더 큰
au_id값을 가진 경우 출력한다.
SQL Study Written By 유혜원 16/43
18. GROUP BY
특정 컬럼을 기준으로 데이터들을 그룹
으로 묶음.
HAVING
GROUP BY된 데이터들 중 특정 조건을
만족하는 값을 가져옴.
GROUP BY ALL
WHERE 절 조건을 만족시키지 못한 데이터도
결과에 포함하여 출력.
SQL Study Written By 유혜원 18/43
19. 책 제목에 따라 전체 팔린 개수의 합을
출력하라.
이 중 팔린 개수의 합이 30권 이상인 것만
출력하라.
SELECT title_id, sum(qty) AS ‘sum’
FROM sales
GROUP BY title_id
HAVING sum(qty) >= 30
SQL Study Written By 유혜원 19/43
20. •Title_id 기준으로 그룹핑 한 후,
각Title_id별 총 수량을 구한다.
• 그 중 총 수량이 30 이상인 것만 출력
한다.
SQL Study Written By 유혜원 20/43
21. 책 목록 중에서 책 판매 수량이 40권을 초
과하는 책의 판매 수량 총 합을 출력하라.
SELECT title_id, sum(qty) AS ‘sum’
FROM sales
WHERE qty > 40
GROUP BY ALL title_id
SQL Study Written By 유혜원 21/43
22. • title_id 기준으로 그룹핑 한다.
• 수량이 40을 초과하는 경우에만 수량
의 총 합을 계산한다.
• 그룹핑 된 title_id 전체 목록이 출력된
다.
• 총 합의 경우 수량이 40을 초과하는
조건을 만족한 경우에만 그 값을 출력
하고, 나머지는 NULL 값으로 한다.
SQL Study Written By 유혜원 22/43
23. 상세 내역과 함께 평균이나 합계 등을 같이 출력
하고 싶을 때 사용.
COMPUTE는 전체에 대한 상세 내용과
산술식 계산값을, COMPUTE BY는 BY 뒤에
오는 컬럼 그룹을 기준으로 그룹핑하여
상세 내역과 산술식 계산값을 출력.
COMPUTE BY를 사용하려면 ORDER BY가
COMPUTE BY 앞에 반드시 와야만 하고,
ORDER BY에서 지정된 순서 또는 그 일부분의
순서대로 COMPUTE BY를 사용 해야 함.
SQL Study Written By 유혜원 23/43
24. 책의 종류와 타이틀 아이디, 가격의
상세 데이터와 전체 평균을 출력하라.
SELECT type, title_id, price
FROM titles
COMPUTE avg(price)
SQL Study Written By 유혜원 24/43
26. 책의 종류를 기준으로 그룹핑하여
책의 종류와 타이틀 아이디, 가격의
상세 데이터와 각 책 종류별 평균을
출력하라.
SELECT type, title_id, price
FROM titles
ORDER BY type
COMPUTE avg(price) BY type
SQL Study Written By 유혜원 26/43
28. 의미 있는 데이터 통계들을 한꺼번에
볼 수 있도록 해 줌.
데이터웨어하우징 / 데이터마트 /
데이터마이닝을 SQL 서버에서도 미약하게
나마 지원한 것.
SQL Study Written By 유혜원 28/43
29. 책의 종류와 출판사별 평균 가격,
책 종류별 평균 가격, 책 전체 평균 가격을
출력하라.
SELECT type , pub_id, AVG(price)
FROM titles
GROUP BY type, pub_id
WITH ROLLUP
SQL Study Written By 유혜원 29/43
31. 책의 종류와 출판사별 평균 가격,
책 종류별 평균 가격, 책 출판사별 평균 가격,
책 전체 평균 가격을 출력하라.
SELECT type , pub_id, AVG(price)
FROM titles
GROUP BY type, pub_id
WITH CUBE
SQL Study Written By 유혜원 31/43
33. SELECT 혹은 INSERT, UPDATE, DELETE
문 안에 들어가 있는 SELECT.
중첩된 SELECT(Nested SELECT)라고도 함.
괄호로 묶이고,
하위 질의만 수행해도 수행되며,
안쪽 질의가 먼저, 바깥쪽 질의가 나중에
실행되는 특징을 가짐.
SQL Study Written By 유혜원 33/43
34. 서점 별 판매 총 수량과 판매 비율을
출력하라.
SELECT stor_id
, qty = sum(qty)
, ratio = round(convert(float, sum(qty))
/ (select sum(qty) from sales) * 100, 2)
FROM sales
GROUP BY stor_id
SQL Study Written By 유혜원 34/43
39. business 종류의 책을 출판한 출판사 이름을
출력하라.
SELECT pub_name
FROM publishers
WHERE EXISTS
SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = ‘business’)
SQL Study Written By 유혜원 39/43
41. 현재 있는 테이블의 내용 전체나 일부를
선택하여 새로운 테이블로 만들 때 사용.
새로운 테이블은 임시 테이블과 영구 테이블
두 종류로 만들 수 있음.
SQL Study Written By 유혜원
만드는 방법 사용할 수 있는 범위 삭제되는 시기
일반 테이블 CREATETABLE 다른 세션에서도 DROPTABLE
세션 임시 테이블 #tablename 해당 세션에서만 세션이 끊어질 때
전역 임시 테이블 ##tablename 다른 세션에서도 세션이 끊어질 때
Tempdh의 일반 테이블 CREATETABLE 다른 세션에서도 SQL 서버가 시작될 때
41/43
42. 비 정규화된 테이블을 연결시키기 위해
사용.
비 정규화의 기법 중 자주 사용하는 행들의
성능을 높여주기 위해 하나의 테이블을
행을 기준으로 둘 또는 그 이상으로 나누어
사용하는 방법이 있음.
이렇게 나누어진 테이블을 합칠 때 사용.
SQL Study Written By 유혜원 42/43
#34:상관관계의 하위 질의,줄여서 상관 하위 질의도 있다.
이것은 바깥쪽 질의와 안쪽 질의가 서로 영향을 주어, 안쪽 질의만으로는 실행이 되지 않는다.
성능향상을 위해서는 하위 질의, 상관 하위 질의는 가급적 사용하지 말아야 한다.
특히, 상관 하위 질의는 피하도록 한다.