Transcript PPT - DKE


조인의 개념
◦ 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한
번에 조회할 수 있는 기능
◦ 관계형 데이터베이스 분야의 표준
◦ 두개 이상의 테이블을 ‘결합’ 한다는 의미

조인의 필요성
◦ 조인을 사용하지 않는 일반적인 예
 학생 주소록을 출력하기 위해 학생들의 학번, 이름, 소속학과 이름
을 검색
 학생에 대한 정보 검색하는 단계 필요
 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을 검
색하는 단계 필요
-2-
8장. 조인(JOIN)

학번이 3인 학생의 지도교수 명을 얻고자 한다고
하자. 이 경우 단일 테이블 검색 기법 만을 사용할
경우


FROM 절에 검색 대상인 테이블들을 기술
WHERE절에 조인 조건을

서로 다른 테이블에 있는 동일한 칼럼 이름을 연결
할 경우
◦ 테이블 명과 컬럼 이름 사이에 점(.)을 사용하여 해당 컬
럼이 어느 테이블에 속하는 지는 명시해 주어야 함


테이블 명이 길면, SQL 쓰기 어려움.
테이블명의 별명을 쓰자.
◦ FROM절에서 테이블 이름 다음에
공백을 두고 별명을 정의

하나의 SQL문 안에서 별명과 테이블명을 혼용해
서 사용하면 안 된다는 것


별명을 사용하면 SELF 조인을 할 수 있다.
SELF JOIN
◦ 동일한 테이블 두 개를 이용하여 조인하는 연산
◦ 학생테이블에서 학번이 1인 학생과 동일한 부모를 가진
학생들의 정보를 추출하고자
 별명을 사용하여 하나의 테이블을 마치 두 개 있는 것 처럼





CROSS JOIN
Theta JOIN
equi-JOIN
Natual JOIN
Outer JOIN

카티산 곱의 다른 표현
◦ 두 개 이상의 테이블에 대한 모든 가능한 튜플 쌍을 만드
는 연산
◦ 단순히 FROM 절에 두 개 이상의 테이블을 기록하고 WH
ERE 절에 조인 조건을 기록하지 않으면 그 결과를 얻을
수 있음.
◦ Oracle의 9i 이후 부터 FROM 절에 cross join 키워드를
이용하여 카티션 곱을 수행시킬 수도 있음

조인 조건
◦ =, !=, <, > 등의 연산자 사용

Equi-JOIN
◦ 조인 대상 테이블에서 공통 칼럼을 ‘=‘(equal) 비교를 통
해 같은 값을 가지는 행을 연결하여 결과를 생성하는 조
인 방법
◦ = 연산자가 조인에서 가장 많이 쓰임.


일반적으로 조인 이라 하면 자연조인을 말함.
자연 조인이란 equi-join의 특이한 형태
◦ 조인 조건을 명시하지 안아도 자동으로 조인 대상인 두
테이블에서 공통인 컬럼들을 찾아서 equi-join을 수행하
도록 한다.
◦ 엄밀히 equi-join 과 natural join의 결과는 다르다.

학생 테이블과 학생정보 테이블에 공통으로 존재
하는 snum 컬럼을 이용하여 동등 조인을 수행
◦ equi-join에서는 snum 컬럼이 두 번 나옴
◦ 자연 조인에서는 snum 컬럼이 한번만 나옴.
 자연 조인에서는 자동으로 중복되는 컬럼을 한번만 나오도록
만듬

학생 테이블과 학생 정보 테이블을 자연조인을 수
행해 보자.

앞의 자연 조인의 결과의 snum은 DBMS가 만든
컬럼임.
◦ 따라서, 자연 조인에서 두 테이블에 공통인 컬럼에 대하
여 테이블 별명을 사용하여 SELECT절에서 사용하면 오류

JOIN~ USING~
◦ Equi Join의 조건 지정 없는 표현식
◦ USING절에 조인 대상 칼럼을 지정
◦ 칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의
되어 있어야함
◦ JOIN~USING~절을 이용하여 교수와 학부모 테이블에서
동일한 급여(salary)를 받는 교수이름 및 학부모 이름을
출력해 보자



JOIN의 결과에는 WHERE절에 기술한 조인 조건을 만족
하는 튜플들의 정보만이 나타나게 됨.
즉, JOIN에 참여 못하는 튜플들은 질의결과에 나타나지
않음.
OUTER 조인
◦ 조인 조건에 참여하지 못하는 튜플들도 조인 결과에 나
타나게 하도록 하는 조인 방법

예비군 테이블
튜플 추가

학생테이블의 모든 정보가 나와 있지 않음.


모든 학생 이름과 와 예비군일 경우 그 학생의 이름을 같이 보고 싶
을 경우
(+)기호가 있는 쪽에 조인조건을 만족하지 않는 튜플이 나타남
◦ 즉, NULL 값이 출력 될 부분

(+) 기호
LEFT OUT JOIN

모든 예비군 테이블을 이름을 출력하고 학생 테이
블에 동일한 학번의 학생이 있다면 해당 학생의 이
름을 출력하도록 하자.


조인에 참여하는 모든 테이블의 튜플 정보를 모두
보고 싶다
(+)는 사용할 수 없다.



SELECT~구문 안에 또 다른 SELECT~ 문이 존재하
는 것을
중첩 질의문은 JOIN과 동일한 효과를 나타냄
테이블에서 민준기 교수와 동일한 직급의 교수명
과 직급을 검색하고자 한다
중첩질의문
일반조인

서브질의문의 결과수에 따라 분류
◦ 단일행 중첩질의문
 서브질의문의 결과 튜플 수가 1
◦ 다중행 중첩질의문
 서브질의문의 결과 튜플 수가 여러 개

일반적인 비교 연산자들인 =, <. >, != 등은 단일
행 연산자 임.
◦ 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불
가능

일반적인 비교 연산자들인 =, <. >, != 등은 단일
행 연산자 임.
◦ 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불
가능


IN, SOME, ANY, ALL, EXISTS
IN 연산자
◦ 단일행 연산자인 =과 유사한 성격을
◦ 메인 질의 문의 검색 대상이 서브 질의 문의 결과 중 하나
라도 일치하면 그 조건인 참이 되는 연산자

ANY와 SOME의 동일한 연산자
◦ 메인 질의문의 비교 조건에서 서브 질의문의 결과와 비교
하여 하나라고 조건을 만족하면 참이 되는 연산자
◦ 단일행 연산자와 같이 사용
◦ = ANY과 같은 경우 IN과 동일
◦ 테이블에서 교수번호가
80 이상인 교수들 보다
봉급을 더 받는 교수들의
이름과 봉급을 검색해 보자.

인 질의문의 검색 대상이 서브 질의문의 결과와 모
두 만족할 경우에만 참이 되는 연산

서브 질의문의 결과가 하나라도 발생되면 참이 되
는 연산자이다
◦ 봉급이 500 보다 큰 교수가 있다면 모든 교수의 이름과
봉급을 출력하는 질의문


최신 SQL 기능
질의 결과의 재사용
◦ VIEW
: 영구적 임시 데이블 생성
◦ WITH Clause : 한시적 임시 테이블 생성



구문
WITH 테이블 이름 AS (
SELECT …
FROM …
WHERE
)
WITH 절로 정의된 테이블은 일반 테이블과 동일한 기능을 제공한다.
질의문이 간결해지고 이해하기 쉬움.
- 30 -
9장. 서브쿼리

김상진 교수보다 입사일이 늦거나 급여가 큰 교수
들을 이름을 검색하는 질의문
 일반 조인 형태


중첩질의문 형태
중첩 질의문과 위의 조인 연산을 이용한 질의문으로
보게 되면 김상진 교수의 정보를 두번 찾는다는 것을
알 수 있다.

WITH절을 이용하여 김상진 교수의 입사일과 봉급을 을 임
시 테이블로 생성하면 보다 간편하고 이해하기 쉬운 질의문
을 만들 수 있다