Top Banner
SEECT 문 문문 문문문 문문 스스스 스스 : Microsoft 스스스스 스스 스스스 1 SQL Server 2000 SQL Study Written By 스스스 1/43
43

Sql study 20101113 유혜원

Aug 06, 2015

Download

Education

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sql study 20101113 유혜원

SEECT 문 요약 정보와 조인

스터디 도서 : Microsoft 전문가로 가는 지름길 1 SQL Server 2000

SQL Study Written By 유혜원 1/43

Page 2: Sql study 20101113 유혜원

목차

책 본문 PT

요약 정보 처리 하위 질의 (subquery) IN / EXISTS 상관관계의 하위 질위 (Correlated sub-

query) SELECT INTO UNION 따라하기

JOIN GROUP BY / HAVING COMPUTE / COMPUTE

BY RLLUP 과 CUBE 하위 질의 (subquery) IN / EXISTS SELECT INTO UNION

SQL Study Written By 유혜원 2/43

Page 3: Sql study 20101113 유혜원

JOIN 개요

JOIN 이란 ? 정규화된 테이블들에 흩어져 있는 컬럼들을 필요에 의해 다시 모아 올 때 사용하는 것 .

JOIN 의 종류• INNER JOIN• OUTER JOIN• SELF JOIN• NAUTURAL JOIN• EQUI JOIN• CROSS JOIN

SQL Study Written By 유혜원 3/43

Page 4: Sql study 20101113 유혜원

INNER JOIN(1) : 개요

가장 일반적인 JOIN. 어떤 JOIN 인지 지정하지 않으면 , 자동적으로 INNER JOIN 이 됨 .

두 테이블에 있는 키 값이 일치하는 데이터만 가져 옴 .

[TIP] JOIN 은 가능한 ANSI 문법으로 작성하는 것을 권장 .

SQL Study Written By 유혜원 4/43

Page 5: Sql study 20101113 유혜원

INNER JOIN(2) : 예제 본문

책 제목과 해당 책의 가격 , 출판사 이름 데이터가 담겨 있는 목록을 출력하라 .

SELECT title, price, pub_name FROM titles (INNER) JOIN publishers ON titles.pub_id = publisher-

s.pub_id

SQL Study Written By 유혜원 5/43

Page 6: Sql study 20101113 유혜원

INNER JOIN(3) : 예제 테이블

예제 테이블들의 ER-D

SQL Study Written By 유혜원 6/43

Page 7: Sql study 20101113 유혜원

INNER JOIN(4) : 예제 실행 과정Titles 테이블 Publishers 테이블

• Titles 테이블과 Publishers 테이블의 Pub_id 가 같은지 비교한다 .

• Pub_id 가 같은 행의 내용들을합친다 .

• 합쳐진 내용들을 기준으로 title, price, pub_name 을 출력한다 .

SQL Study Written By 유혜원 7/43

Page 8: Sql study 20101113 유혜원

INNER JOIN(5) : 예제 결과

SQL Study Written By 유혜원 8/43

Page 9: Sql study 20101113 유혜원

OUTER JOIN(1) : 개요

JOIN 을 하는 테이블들 중 어느 한 쪽의 데이터를 모두 가져옴 .

실무에서 사용 빈도가 높음 .

[TIP] 긴 테이블 이름은 alias( 별명 ) 로 대체가능 .

여러 테이블에서 사용되는 컬럼의 경우 어느 테이블의 컬럼 데이터를 지칭하는지 사용자와 프로그램 모두 알 수 없기 때문에 컬럼명 앞에 테이블명을 붙여준다 .

이 때 긴 테이블명의 경우 타이핑의 편리함을 위해 별명을 지정 하여 대체 가능하다 .

SQL Study Written By 유혜원 9/43

Page 10: Sql study 20101113 유혜원

OUTER JOIN(2) : 예제 본문

책 번호와 그 책의 판매 수량 , 제목 데이터 가 담겨있는 목록을 출력하라 .

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

Page 11: Sql study 20101113 유혜원

OUTER JOIN(3) : 예제 테이블

예제 테이블들의 ER-D

SQL Study Written By 유혜원11/43

Page 12: Sql study 20101113 유혜원

OUTER JOIN(4) : 예제 실행 과정Titles 테이블 Sales 테이블

• Titles 테이블의 데이터를 가져온다 .

• Titles 테이블과 Sales 테이블의 title_id 가 같은지 비교한다 .

• title_id 가 같은 행의 내용들은 합치고 Titles 테이블에 없는 title_id는 NULL 값으로 처리한다 .

• 합쳐진 내용들을 기준으로 title_id, qty, title 을 출력한다 .

SQL Study Written By 유혜원12/43

Page 13: Sql study 20101113 유혜원

OUTER JOIN(5) : 예제 결과

SQL Study Written By 유혜원13/43

Page 14: Sql study 20101113 유혜원

SELF JOIN(1) : 개요

자기 자신을 다시 조인하는 경우 .

자기 자신을 다시 조인하여 똑같은 테이블 이름을 두 번 반복해서 사용하기 때문에 구분을 위해 반드시 alias 가 필요 .

SQL Study Written By 유혜원14/43

Page 15: Sql study 20101113 유혜원

SELF JOIN(2) : 예제본문

작가가 두 명 이상인 책 목록을 출력하라 .

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

Page 16: Sql study 20101113 유혜원

SELF JOIN(3) : 예제 실행 과정

• Titlesauthor 테이블을 2 번 불러온다 .

• 이 때 구분을 위해 각각 다른 별명을 붙여준다 .

• 서로 title_id 가 같은지 비교한 후 ,그 결과값의 au_id 를 비교하여 더 큰 au_id 값을 가진 경우 출력한다 .

SQL Study Written By 유혜원16/43

Page 17: Sql study 20101113 유혜원

SELF JOIN(4) : 예제 결과

SQL Study Written By 유혜원17/43

Page 18: Sql study 20101113 유혜원

GROUP BY / HAVING(1) : 개요

GROUP BY 특정 컬럼을 기준으로 데이터들을 그룹 으로 묶음 .

HAVING GROUP BY 된 데이터들 중 특정 조건을 만족하는 값을 가져옴 .

GROUP BY ALL WHERE 절 조건을 만족시키지 못한 데이터도 결과에 포함하여 출력 .

SQL Study Written By 유혜원18/43

Page 19: Sql study 20101113 유혜원

GROUP BY / HAVING(2) : 예제 본문 책 제목에 따라 전체 팔린 개수의 합을 출력하라 .

이 중 팔린 개수의 합이 30 권 이상인 것만 출력하라 .

SELECT title_id, sum(qty) AS ‘sum’ FROM sales GROUP BY title_id HAVING sum(qty) >= 30

SQL Study Written By 유혜원19/43

Page 20: Sql study 20101113 유혜원

GROUP BY / HAVING(3) : 예제 결과

• Title_id 기준으로 그룹핑 한 후 ,각 Title_id 별 총 수량을 구한다 .

• 그 중 총 수량이 30 이상인 것만 출력한다 .

SQL Study Written By 유혜원20/43

Page 21: Sql study 20101113 유혜원

GROUP BY ALL(1) : 예제 본문 책 목록 중에서 책 판매 수량이 40 권을

초과하는 책의 판매 수량 총 합을 출력하라 .

SELECT title_id, sum(qty) AS ‘sum’ FROM sales WHERE qty > 40 GROUP BY ALL title_id

SQL Study Written By 유혜원21/43

Page 22: Sql study 20101113 유혜원

GROUP BY ALL(2) : 예제 결과

• title_id 기준으로 그룹핑 한다 .

• 수량이 40 을 초과하는 경우에만 수량의 총 합을 계산한다 .

• 그룹핑 된 title_id 전체 목록이 출력된다 .

• 총 합의 경우 수량이 40 을 초과하는 조건을 만족한 경우에만 그 값을 출력하고 , 나머지는 NULL 값으로 한다 .

SQL Study Written By 유혜원22/43

Page 23: Sql study 20101113 유혜원

COMPUTE / COMPUTE BY : 개요 상세 내역과 함께 평균이나 합계 등을 같이 출력 하고 싶을 때 사용 .

COMPUTE 는 전체에 대한 상세 내용과 산술식 계산값을 , COMPUTE BY 는 BY 뒤에 오는 컬럼 그룹을 기준으로 그룹핑하여 상세 내역과 산술식 계산값을 출력 .

COMPUTE BY 를 사용하려면 ORDER BY 가 COMPUTE BY 앞에 반드시 와야만 하고 , ORDER BY 에서 지정된 순서 또는 그 일부분의 순서대로 COMPUTE BY 를 사용 해야 함 .

SQL Study Written By 유혜원23/43

Page 24: Sql study 20101113 유혜원

COMPUTE(1) : 예제 본문

책의 종류와 타이틀 아이디 , 가격의 상세 데이터와 전체 평균을 출력하라 .

SELECT type, title_id, price FROM titles COMPUTE avg(price)

SQL Study Written By 유혜원24/43

Page 25: Sql study 20101113 유혜원

COMPUTE(2) : 예제 결과

SQL Study Written By 유혜원25/43

Page 26: Sql study 20101113 유혜원

COMPUTE BY(1) : 예제 본문

책의 종류를 기준으로 그룹핑하여 책의 종류와 타이틀 아이디 , 가격의 상세 데이터와 각 책 종류별 평균을 출력하라 .

SELECT type, title_id, price FROM titles ORDER BY type COMPUTE avg(price) BY type

SQL Study Written By 유혜원26/43

Page 27: Sql study 20101113 유혜원

COMPUTE BY(2) : 예제 결과

SQL Study Written By 유혜원27/43

Page 28: Sql study 20101113 유혜원

ROLLUP 과 CUBE : 개요

의미 있는 데이터 통계들을 한꺼번에 볼 수 있도록 해 줌 .

데이터웨어하우징 / 데이터마트 / 데이터마이닝을 SQL 서버에서도

미약하게 나마 지원한 것 .

SQL Study Written By 유혜원28/43

Page 29: Sql study 20101113 유혜원

ROLLUP(1) : 예제 본문

책의 종류와 출판사별 평균 가격 , 책 종류별 평균 가격 , 책 전체 평균 가격을 출력하라 .

SELECT type , pub_id, AVG(price) FROM titles GROUP BY type, pub_id WITH ROLLUP

SQL Study Written By 유혜원29/43

Page 30: Sql study 20101113 유혜원

ROLLUP(2) : 예제 결과

SQL Study Written By 유혜원30/43

Page 31: Sql study 20101113 유혜원

CUBE(1) : 예제 본문

책의 종류와 출판사별 평균 가격 , 책 종류별 평균 가격 , 책 출판사별 평균

가격 , 책 전체 평균 가격을 출력하라 .

SELECT type , pub_id, AVG(price) FROM titles GROUP BY type, pub_id WITH CUBE

SQL Study Written By 유혜원31/43

Page 32: Sql study 20101113 유혜원

CUBE(2) : 예제 결과

SQL Study Written By 유혜원32/43

Page 33: Sql study 20101113 유혜원

하위 질의 (subquery)(1) : 개요

SELECT 혹은 INSERT, UPDATE, DELETE 문 안에 들어가 있는 SELECT.

중첩된 SELECT(Nested SELECT) 라고도 함 .

괄호로 묶이고 , 하위 질의만 수행해도 수행되며 , 안쪽 질의가 먼저 , 바깥쪽 질의가 나중에 실행되는 특징을 가짐 .

SQL Study Written By 유혜원33/43

Page 34: Sql study 20101113 유혜원

하위 질의 (subquery)(2) : 예제 본문 서점 별 판매 총 수량과 판매 비율을 출력하라 .

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

Page 35: Sql study 20101113 유혜원

하위 질의 (subquery)(3) : 예제 결과

SQL Study Written By 유혜원35/43

Page 36: Sql study 20101113 유혜원

IN / EXISTS : 개요

하위 질의의 한 형태 .

JOIN 으로 대체할 수 있음 .

IN 은 괄호 안의 항목과 일치하는 것이 있어야 참이 되지만 , EXISTS 는 괄호안에 어떤 것이든 결과만 돌려지면 ( 행만 존재하면 ) 참이 됨 .

SQL Study Written By 유혜원36/43

Page 37: Sql study 20101113 유혜원

IN(1) : 예제 본문

판매된 책 이름 목록을 출력하라 .

SELECT title FROM titles WHERE title_id IN( SELECT DISTINCT title_id FROM sales )

SQL Study Written By 유혜원37/43

Page 38: Sql study 20101113 유혜원

IN(2) : 예제 결과

SQL Study Written By 유혜원38/43

Page 39: Sql study 20101113 유혜원

EXISTS(1) : 예제 본문 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

Page 40: Sql study 20101113 유혜원

EXISTS(1) : 예제 결과

SQL Study Written By 유혜원40/43

Page 41: Sql study 20101113 유혜원

SELECT INTO(1) : 개요

현재 있는 테이블의 내용 전체나 일부를 선택하여 새로운 테이블로 만들 때 사용 .

새로운 테이블은 임시 테이블과 영구 테이블 두 종류로 만들 수 있음 .

SQL Study Written By 유혜원

만드는 방법 사용할 수 있는 범위 삭제되는 시기

일반 테이블 CREATE TA-BLE

다른 세션에서도 DROP TABLE

세션 임시 테이블 #tablename 해당 세션에서만 세션이 끊어질 때

전역 임시 테이블 ##table-name

다른 세션에서도 세션이 끊어질 때

Tempdh 의 일반 테이블 CREATE TA-BLE

다른 세션에서도 SQL 서버가 시작될 때 41/43

Page 42: Sql study 20101113 유혜원

UNION(1) : 개요

비 정규화된 테이블을 연결시키기 위해 사용 .

비 정규화의 기법 중 자주 사용하는 행들의 성능을 높여주기 위해 하나의 테이블을 행을 기준으로 둘 또는 그 이상으로 나누어 사용하는 방법이 있음 .

이렇게 나누어진 테이블을 합칠 때 사용 .SQL Study Written By 유혜원

42/43

Page 43: Sql study 20101113 유혜원

감사합니다 .

SQL Study Written By 유혜원43/43