9. 조인

33
9. 조조

description

9. 조인. 조인 (Join). 조인의 개념 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능 관계형 데이터베이스 분야의 표준 두개 이상의 테이블을 ‘ 결합 ’ 한다는 의미 조인의 필요성 조인을 사용하지 않는 일반적인 예 학생 주소록을 출력하기 위해 학생들의 학번 , 이름 , 소속학과 이름을 검색 학생에 대한 정보 검색하는 단계 필요 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을 검색하는 단계 필요. 조인의 필요성. - PowerPoint PPT Presentation

Transcript of 9. 조인

Page 1: 9.  조인

9. 조인

Page 2: 9.  조인

8 . (JOIN)장 조인- 2

-

조인 (Join) 조인의 개념

◦ 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능

◦ 관계형 데이터베이스 분야의 표준◦ 두개 이상의 테이블을 ‘결합’ 한다는 의미

조인의 필요성◦ 조인을 사용하지 않는 일반적인 예

학생 주소록을 출력하기 위해 학생들의 학번 , 이름 , 소속학과 이름을 검색

학생에 대한 정보 검색하는 단계 필요 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을

검색하는 단계 필요

Page 3: 9.  조인

학번이 3 인 학생의 지도교수 명을 얻고자 한다고 하자 . 이 경우 단일 테이블 검색 기법 만을 사용할 경우

조인의 필요성

Page 4: 9.  조인

FROM 절에 검색 대상인 테이블들을 기술 WHERE 절에 조인 조건을

간단한 조인

Page 5: 9.  조인

서로 다른 테이블에 있는 동일한 칼럼 이름을 연결할 경우◦ 테이블 명과 컬럼 이름 사이에 점 (.) 을 사용하여 해당 컬럼이

어느 테이블에 속하는 지는 명시해 주어야 함

열이름의 모순성

Page 6: 9.  조인

테이블 명이 길면 , SQL 쓰기 어려움 . 테이블명의 별명을 쓰자 .

◦ FROM 절에서 테이블 이름 다음에공백을 두고 별명을 정의

테이블의 별명

Page 7: 9.  조인

하나의 SQL 문 안에서 별명과 테이블명을 혼용해서 사용하면 안 된다는 것

별명 사용의 주의점

Page 8: 9.  조인

별명을 사용하면 SELF 조인을 할 수 있다 . SELF JOIN

◦ 동일한 테이블 두 개를 이용하여 조인하는 연산

◦ 학생테이블에서 학번이 1 인 학생과 동일한 부모를 가진 학생들의 정보를 추출하고자 별명을 사용하여 하나의 테이블을 마치 두 개 있는 것 처럼

SELF 조인

Page 9: 9.  조인

CROSS JOIN Theta JOIN equi-JOIN Natual JOIN Outer JOIN

조인의 종류

Page 10: 9.  조인

카티산 곱의 다른 표현◦ 두 개 이상의 테이블에 대한 모든 가능한 튜플 쌍을 만드는

연산◦ 단순히 FROM 절에 두 개 이상의 테이블을 기록하고

WHERE 절에 조인 조건을 기록하지 않으면 그 결과를 얻을 수 있음 .

◦ Oracle 의 9i 이후 부터 FROM 절에 cross join 키워드를 이용하여 카티션 곱을 수행시킬 수도 있음

CROSS JOIN

Page 11: 9.  조인

조인 조건◦ =, !=, <, > 등의 연산자 사용

Equi-JOIN◦ 조인 대상 테이블에서 공통 칼럼을 ‘ =‘(equal) 비교를 통해

같은 값을 가지는 행을 연결하여 결과를 생성하는 조인 방법

◦ = 연산자가 조인에서 가장 많이 쓰임 .

Theta-JOIN, equi-JOIN

Page 12: 9.  조인

일반적으로 조인 이라 하면 자연조인을 말함 . 자연 조인이란 equi-join 의 특이한 형태

◦ 조인 조건을 명시하지 안아도 자동으로 조인 대상인 두 테이블에서 공통인 컬럼들을 찾아서 equi-join 을 수행하도록 한다 .

◦ 엄밀히 equi-join 과 natural join 의 결과는 다르다 .

자연조인 (Natural JOIN)

Page 13: 9.  조인

학생 테이블과 학생정보 테이블에 공통으로 존재하는 snum 컬럼을 이용하여 동등 조인을 수행

◦ equi-join 에서는 snum 컬럼이 두 번 나옴◦ 자연 조인에서는 snum 컬럼이 한번만 나옴 .

자연 조인에서는 자동으로 중복되는 컬럼을 한번만 나오도록 만듬

Page 14: 9.  조인

학생 테이블과 학생 정보 테이블을 자연조인을 수행해 보자 .

Page 15: 9.  조인

앞의 자연 조인의 결과의 snum 은 DBMS 가 만든 컬럼임 . ◦ 따라서 , 자연 조인에서 두 테이블에 공통인 컬럼에 대하여

테이블 별명을 사용하여 SELECT 절에서 사용하면 오류

Page 16: 9.  조인

JOIN~ USING~◦ Equi Join 의 조건 지정 없는 표현식◦ USING 절에 조인 대상 칼럼을 지정◦ 칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의되어

있어야함◦ JOIN~USING~ 절을 이용하여 교수와 학부모 테이블에서

동일한 급여 (salary) 를 받는 교수이름 및 학부모 이름을 출력해 보자

JOIN~ USING

Page 17: 9.  조인

JOIN 의 결과에는 WHERE 절에 기술한 조인 조건을 만족하는 튜플들의 정보만이 나타나게 됨 .

즉 , JOIN 에 참여 못하는 튜플들은 질의결과에 나타나지 않음 .

OUTER 조인◦ 조인 조건에 참여하지 못하는 튜플들도 조인 결과에

나타나게 하도록 하는 조인 방법

OUTER JOIN

Page 18: 9.  조인

예비군 테이블 튜플 추가

실습을 위한 테이블만들기

Page 19: 9.  조인

학생테이블의 모든 정보가 나와 있지 않음 .

Equi-join 의 결과

Page 20: 9.  조인

모든 학생 이름과 와 예비군일 경우 그 학생의 이름을 같이 보고 싶을 경우 (+) 기호가 있는 쪽에 조인조건을 만족하지 않는 튜플이 나타남

◦ 즉 , NULL 값이 출력 될 부분 (+) 기호 LEFT OUT JOIN

LEFT Outer Join

Page 21: 9.  조인

모든 예비군 테이블을 이름을 출력하고 학생 테이블에 동일한 학번의 학생이 있다면 해당 학생의 이름을 출력하도록 하자 .

RIGHT OUTER JOIN

Page 22: 9.  조인

조인에 참여하는 모든 테이블의 튜플 정보를 모두 보고 싶다

(+) 는 사용할 수 없다 .

FULL OUTER JOIN

Page 23: 9.  조인

SELECT~ 구문 안에 또 다른 SELECT~ 문이 존재하는 것을

중첩 질의문은 JOIN 과 동일한 효과를 나타냄 테이블에서 민준기 교수와 동일한 직급의 교수명과

직급을 검색하고자 한다

중첩질의문

일반조인

중첩질의문

Page 24: 9.  조인

서브질의문의 결과수에 따라 분류◦ 단일행 중첩질의문

서브질의문의 결과 튜플 수가 1◦ 다중행 중첩질의문

서브질의문의 결과 튜플 수가 여러 개

일반적인 비교 연산자들인 =, <. >, != 등은 단일행 연산자 임 .◦ 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불가능

중첩질의문의 분류

Page 25: 9.  조인

일반적인 비교 연산자들인 =, <. >, != 등은 단일행 연산자 임 .◦ 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불가능

단일행 비교 연산자

Page 26: 9.  조인

IN, SOME, ANY, ALL, EXISTS IN 연산자

◦ 단일행 연산자인 = 과 유사한 성격을 ◦ 메인 질의 문의 검색 대상이 서브 질의 문의 결과 중 하나라도

일치하면 그 조건인 참이 되는 연산자

다중행 비교 연산자 .

Page 27: 9.  조인

ANY 와 SOME 의 동일한 연산자◦ 메인 질의문의 비교 조건에서 서브 질의문의 결과와 비교하여

하나라고 조건을 만족하면 참이 되는 연산자◦ 단일행 연산자와 같이 사용◦ = ANY 과 같은 경우 IN 과 동일

◦ 테이블에서 교수번호가 80 이상인 교수들 보다 봉급을 더 받는 교수들의 이름과 봉급을 검색해 보자 .

ANY 와 SOME

Page 28: 9.  조인

인 질의문의 검색 대상이 서브 질의문의 결과와 모두 만족할 경우에만 참이 되는 연산

ALL

Page 29: 9.  조인

서브 질의문의 결과가 하나라도 발생되면 참이 되는 연산자이다

◦ 봉급이 500 보다 큰 교수가 있다면 모든 교수의 이름과 봉급을 출력하는 질의문

EXISTS

Page 30: 9.  조인

9 . 장 서브쿼리-

30 -

WITH Clause

최신 SQL 기능 질의 결과의 재사용

◦ VIEW : 영구적 임시 데이블 생성◦ WITH Clause : 한시적 임시 테이블 생성

구문WITH 테이블 이름 AS (

SELECT …FROM …WHERE

) WITH 절로 정의된 테이블은 일반 테이블과 동일한 기능을 제공한다 . 질의문이 간결해지고 이해하기 쉬움 .

Page 31: 9.  조인

김상진 교수보다 입사일이 늦거나 급여가 큰 교수들을 이름을 검색하는 질의문

일반 조인 형태

Page 32: 9.  조인

중첩질의문 형태

중첩 질의문과 위의 조인 연산을 이용한 질의문으로 보게 되면 김상진 교수의 정보를 두번 찾는다는 것을 알 수 있다 .

Page 33: 9.  조인

WITH 절을 이용하여 김상진 교수의 입사일과 봉급을 을 임시 테이블로 생성하면 보다 간편하고 이해하기 쉬운 질의문을 만들 수 있다