View
566
Download
0
Category
Preview:
Citation preview
SEECT 문 요약 정보와 조인
스터디 도서 : Microsoft 전문가로 가는 지름길 1 SQL Server 2000
SQL Study Written By 유혜원 1/43
목차
책 본문 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
JOIN 개요
JOIN 이란 ? 정규화된 테이블들에 흩어져 있는 컬럼들을 필요에 의해 다시 모아 올 때 사용하는 것 .
JOIN 의 종류• INNER JOIN• OUTER JOIN• SELF JOIN• NAUTURAL JOIN• EQUI JOIN• CROSS JOIN
SQL Study Written By 유혜원 3/43
INNER JOIN(1) : 개요
가장 일반적인 JOIN. 어떤 JOIN 인지 지정하지 않으면 , 자동적으로 INNER JOIN 이 됨 .
두 테이블에 있는 키 값이 일치하는 데이터만 가져 옴 .
[TIP] JOIN 은 가능한 ANSI 문법으로 작성하는 것을 권장 .
SQL Study Written By 유혜원 4/43
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
INNER JOIN(3) : 예제 테이블
예제 테이블들의 ER-D
SQL Study Written By 유혜원 6/43
INNER JOIN(4) : 예제 실행 과정Titles 테이블 Publishers 테이블
• Titles 테이블과 Publishers 테이블의 Pub_id 가 같은지 비교한다 .
• Pub_id 가 같은 행의 내용들을합친다 .
• 합쳐진 내용들을 기준으로 title, price, pub_name 을 출력한다 .
SQL Study Written By 유혜원 7/43
INNER JOIN(5) : 예제 결과
SQL Study Written By 유혜원 8/43
OUTER JOIN(1) : 개요
JOIN 을 하는 테이블들 중 어느 한 쪽의 데이터를 모두 가져옴 .
실무에서 사용 빈도가 높음 .
[TIP] 긴 테이블 이름은 alias( 별명 ) 로 대체가능 .
여러 테이블에서 사용되는 컬럼의 경우 어느 테이블의 컬럼 데이터를 지칭하는지 사용자와 프로그램 모두 알 수 없기 때문에 컬럼명 앞에 테이블명을 붙여준다 .
이 때 긴 테이블명의 경우 타이핑의 편리함을 위해 별명을 지정 하여 대체 가능하다 .
SQL Study Written By 유혜원 9/43
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
OUTER JOIN(3) : 예제 테이블
예제 테이블들의 ER-D
SQL Study Written By 유혜원11/43
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
OUTER JOIN(5) : 예제 결과
SQL Study Written By 유혜원13/43
SELF JOIN(1) : 개요
자기 자신을 다시 조인하는 경우 .
자기 자신을 다시 조인하여 똑같은 테이블 이름을 두 번 반복해서 사용하기 때문에 구분을 위해 반드시 alias 가 필요 .
SQL Study Written By 유혜원14/43
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
SELF JOIN(3) : 예제 실행 과정
• Titlesauthor 테이블을 2 번 불러온다 .
• 이 때 구분을 위해 각각 다른 별명을 붙여준다 .
• 서로 title_id 가 같은지 비교한 후 ,그 결과값의 au_id 를 비교하여 더 큰 au_id 값을 가진 경우 출력한다 .
SQL Study Written By 유혜원16/43
SELF JOIN(4) : 예제 결과
SQL Study Written By 유혜원17/43
GROUP BY / HAVING(1) : 개요
GROUP BY 특정 컬럼을 기준으로 데이터들을 그룹 으로 묶음 .
HAVING GROUP BY 된 데이터들 중 특정 조건을 만족하는 값을 가져옴 .
GROUP BY ALL WHERE 절 조건을 만족시키지 못한 데이터도 결과에 포함하여 출력 .
SQL Study Written By 유혜원18/43
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
GROUP BY / HAVING(3) : 예제 결과
• Title_id 기준으로 그룹핑 한 후 ,각 Title_id 별 총 수량을 구한다 .
• 그 중 총 수량이 30 이상인 것만 출력한다 .
SQL Study Written By 유혜원20/43
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
GROUP BY ALL(2) : 예제 결과
• title_id 기준으로 그룹핑 한다 .
• 수량이 40 을 초과하는 경우에만 수량의 총 합을 계산한다 .
• 그룹핑 된 title_id 전체 목록이 출력된다 .
• 총 합의 경우 수량이 40 을 초과하는 조건을 만족한 경우에만 그 값을 출력하고 , 나머지는 NULL 값으로 한다 .
SQL Study Written By 유혜원22/43
COMPUTE / COMPUTE BY : 개요 상세 내역과 함께 평균이나 합계 등을 같이 출력 하고 싶을 때 사용 .
COMPUTE 는 전체에 대한 상세 내용과 산술식 계산값을 , COMPUTE BY 는 BY 뒤에 오는 컬럼 그룹을 기준으로 그룹핑하여 상세 내역과 산술식 계산값을 출력 .
COMPUTE BY 를 사용하려면 ORDER BY 가 COMPUTE BY 앞에 반드시 와야만 하고 , ORDER BY 에서 지정된 순서 또는 그 일부분의 순서대로 COMPUTE BY 를 사용 해야 함 .
SQL Study Written By 유혜원23/43
COMPUTE(1) : 예제 본문
책의 종류와 타이틀 아이디 , 가격의 상세 데이터와 전체 평균을 출력하라 .
SELECT type, title_id, price FROM titles COMPUTE avg(price)
SQL Study Written By 유혜원24/43
COMPUTE(2) : 예제 결과
SQL Study Written By 유혜원25/43
COMPUTE BY(1) : 예제 본문
책의 종류를 기준으로 그룹핑하여 책의 종류와 타이틀 아이디 , 가격의 상세 데이터와 각 책 종류별 평균을 출력하라 .
SELECT type, title_id, price FROM titles ORDER BY type COMPUTE avg(price) BY type
SQL Study Written By 유혜원26/43
COMPUTE BY(2) : 예제 결과
SQL Study Written By 유혜원27/43
ROLLUP 과 CUBE : 개요
의미 있는 데이터 통계들을 한꺼번에 볼 수 있도록 해 줌 .
데이터웨어하우징 / 데이터마트 / 데이터마이닝을 SQL 서버에서도
미약하게 나마 지원한 것 .
SQL Study Written By 유혜원28/43
ROLLUP(1) : 예제 본문
책의 종류와 출판사별 평균 가격 , 책 종류별 평균 가격 , 책 전체 평균 가격을 출력하라 .
SELECT type , pub_id, AVG(price) FROM titles GROUP BY type, pub_id WITH ROLLUP
SQL Study Written By 유혜원29/43
ROLLUP(2) : 예제 결과
SQL Study Written By 유혜원30/43
CUBE(1) : 예제 본문
책의 종류와 출판사별 평균 가격 , 책 종류별 평균 가격 , 책 출판사별 평균
가격 , 책 전체 평균 가격을 출력하라 .
SELECT type , pub_id, AVG(price) FROM titles GROUP BY type, pub_id WITH CUBE
SQL Study Written By 유혜원31/43
CUBE(2) : 예제 결과
SQL Study Written By 유혜원32/43
하위 질의 (subquery)(1) : 개요
SELECT 혹은 INSERT, UPDATE, DELETE 문 안에 들어가 있는 SELECT.
중첩된 SELECT(Nested SELECT) 라고도 함 .
괄호로 묶이고 , 하위 질의만 수행해도 수행되며 , 안쪽 질의가 먼저 , 바깥쪽 질의가 나중에 실행되는 특징을 가짐 .
SQL Study Written By 유혜원33/43
하위 질의 (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
하위 질의 (subquery)(3) : 예제 결과
SQL Study Written By 유혜원35/43
IN / EXISTS : 개요
하위 질의의 한 형태 .
JOIN 으로 대체할 수 있음 .
IN 은 괄호 안의 항목과 일치하는 것이 있어야 참이 되지만 , EXISTS 는 괄호안에 어떤 것이든 결과만 돌려지면 ( 행만 존재하면 ) 참이 됨 .
SQL Study Written By 유혜원36/43
IN(1) : 예제 본문
판매된 책 이름 목록을 출력하라 .
SELECT title FROM titles WHERE title_id IN( SELECT DISTINCT title_id FROM sales )
SQL Study Written By 유혜원37/43
IN(2) : 예제 결과
SQL Study Written By 유혜원38/43
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
EXISTS(1) : 예제 결과
SQL Study Written By 유혜원40/43
SELECT INTO(1) : 개요
현재 있는 테이블의 내용 전체나 일부를 선택하여 새로운 테이블로 만들 때 사용 .
새로운 테이블은 임시 테이블과 영구 테이블 두 종류로 만들 수 있음 .
SQL Study Written By 유혜원
만드는 방법 사용할 수 있는 범위 삭제되는 시기
일반 테이블 CREATE TA-BLE
다른 세션에서도 DROP TABLE
세션 임시 테이블 #tablename 해당 세션에서만 세션이 끊어질 때
전역 임시 테이블 ##table-name
다른 세션에서도 세션이 끊어질 때
Tempdh 의 일반 테이블 CREATE TA-BLE
다른 세션에서도 SQL 서버가 시작될 때 41/43
UNION(1) : 개요
비 정규화된 테이블을 연결시키기 위해 사용 .
비 정규화의 기법 중 자주 사용하는 행들의 성능을 높여주기 위해 하나의 테이블을 행을 기준으로 둘 또는 그 이상으로 나누어 사용하는 방법이 있음 .
이렇게 나누어진 테이블을 합칠 때 사용 .SQL Study Written By 유혜원
42/43
감사합니다 .
SQL Study Written By 유혜원43/43
Recommended