조인과 집합 : 여러 개의 테이블 연결하기

Jane의 study note.·2022년 12월 2일
0

SQL (Oracle)

목록 보기
5/11

6장 조인과 집합 : 여러 개의 테이블 연결하기

조인(join)이란 관계형 데이터베이스의 테이블 안에 있는 행들을 논리에 따라 연결할 수 있도록 하는 기법
사용자의 의도에 따라 조인 조건을 다양하게 넣을 수 있으며 이를 통해 출력 결과를 조작 할 수 있다.
관계형 데이터베이스의 핵심요소이다.

<조인 기법의 종류 5> p149
1. 곱집합(cartesian product): 가능한 모든 행을 조인
2. 동등 조인(equi join): 조인 조건이 정확히 일치하는 경우에 결과를 출력함
3. 비동등 조인(non equi join): 조인 조건이 정확히 일치하지 않는 경우에 결과를 출력함
4. 외부 조인(outer join): 조인 조건이 정확히 일치하지 않아도 모든 결과를 출력함
5. 자체 조인(self join): 자체 테이블에서 조인하고자 할 때 사용

01 조인이란?


02 동등 조인 : 똑같은 데이터끼리 연결하기

SELECT *
FROM employees A, departments B
WHERE A.department_id = B.department_id;

p151~152
[예제 6-1]HR.employees 테이블과 departments 테이블과 locations 테이블을 조인하여
각 직원이 어느 부서에 속하는지와 부서의 소재지가 어디인지 조회해 보세요.

SELECT A.employee_id, A.department_id, B.department_name, C.city
FROM employees A, departments B, locations C
WHERE A.department_id = B.department_id
AND B.location_id = C.location_id;


03 외부 조인 : 모든 데이터를 연결하기

※동등 조인은 데이터 값이 정확하게 일치하는 경우에만 결과를 출력
SELECT COUNT(*) 조인된건수
FROM employees A, departments B
WHERE A.department_id = B.department_id;
=> 106건 출력됨, 총 107건 중

p153~154 외부 조인(outer join)
[예제 6-2]HR.employees 테이블과 departments 테이블을 department_id로 외부 조인하여
department_id가 null값인 Kimberly Grant도 함께 출력해 보세요.

SELECT A.employee_id, A.first_name, A.last_name, B.department_id, B.department_name
FROM employees A, departments B
WHERE A.department_id = B.department_id(+)
ORDER BY A.employee_id;
=> A 테이블(충분한 쪽)이 기준, 데이터가 부족한 쪽(B테이블)에 (+)를 기술함, 테이블 양쪽에 (+)불가
left outer join

p155
SELECT A.employee_id, A.first_name, A.last_name, B.department_id, B.department_name
FROM employees A, departments B
WHERE A.department_id(+) = B.department_id
ORDER BY A.employee_id;
=> right outer join 예시: B테이블이 기준, A테이블이 데이터 부족한 쪽


04 자체 조인 : 자기 자신의 데이터와 연결하기

p158~159
[예제 6-3]HR.employees 테이블을 자체 조인하여 직원별 담당자가 누구인지 조회하세요.

SELECT A.employee_id, A.first_name, A.last_name, A.manager_id,
B.first_name||' '||B.last_name manager_name
FROM employees A, employees B
WHERE A.manager_id = B.employee_id
ORDER BY A.employee_id;


05 집합 연산자 : 집합으로 연결하기

P160~
UNION, UNION ALL, INTERSET, MINUS

  1. UNION p161~
  2. UNION ALL p162~163
  3. INTERSECT
  4. MINUS

UNION, UNION ALL, INTERSET, MINUS

p161~162, 1. UNION
[예제 6-4]HR.employees 테이블의 department_id 집합과 departments 테이블의 department_id 집합을
UNION 연산자를 이용해 합쳐 보세요.

SELECT department_id
FROM employees
UNION
SELECT department_id
FROM departments;

p162~163, 2. UNION ALL
[예제 6-5]HR.employees 테이블의 department_id 집합과 departments 테이블의 department_id 집합을
UNION_ALL 연산자를 이용해 합쳐 보세요.

SELECT department_id
FROM employees
UNION ALL
SELECT department_id
FROM departments
ORDER BY department_id;

p164, 3. INTERSECT
[예제 6-6]HR.employees 테이블의 department_id 집합과 departments 테이블의 department_id 집합의
교집합을 INTERSECT 연산자를 이용해 출력해 보세요.

SELECT department_id
FROM employees
INTERSECT
SELECT department_id
FROM departments
ORDER BY department_id;

p165~166, 4. MINUS
[예제 6-7] departments 테이블의 department_id 집합에서 HR.employees 테이블의 department_id 집합
을 MINUS 연산자를 이용해 빼 보세요.

SELECT department_id
FROM departments
MINUS
SELECT department_id
FROM HR.employees;

0개의 댓글