JOIN

coldZero·2023년 11월 23일
0

OracleSQLDeveloper

목록 보기
3/4

JOIN이란?

  1. 하나 이상의 테이블에서 데이터를 조회하기 위해 사용한다.
  2. 수행 결과는 하나의 *Result Set으로 나온다.

*Result Set : 데이터베이스에서 쿼리문을 실행하면서 발생한 결과값, 데이터의 표

관계형 데이터베이스에서 SQL을 이용해 테이블간 '관계'(JOIN)를 맺는 방법

  • 관계형 데이터베이스는 최소한의 데이터를 테이블에 담고 있어 원하는 정보를 테이블에서 조회하려면 한 개 이상의 테이블에서 데이터를 읽어와야 되는경우가 많다.

  • 테이블간 관계를 맺기 위한 연결고리 역할이 필요한데, 두 테이블에서 같은 데이터를 저장하는 컬럼이 연결고리가 된다.

JOIN의 종류

JOIN구문은 ANSI구문으로 작성된 기준이다.

  • 미국 국립 표준 협회(American National Standards Institute, ANSI) 미국의 산업 표준을 제정하는 민간단체(국제표준화기구 ISO에 가입)
  • ANSI에서 제정된 표준을 ANSI라고 하고 여기서 제정한 표준 중 가장 유명한 것이 ASCII코드이다.

1. 내부 조인 (INNER JOIN)

연결되는 컬럼의 값이 일치하는 행들만 조인된다.
(즉, 일치하는 값이 없는 행은 조인에서 제외된다.)

<예제>
EMPLOTEE 테이블, DEPARTMENT 테이블을 참조하여
사번, 이름, 부서코드, 부서명 조회

[힌트1]
EMPLOYEE 테이블에 DEPT_CODE컬럼과
DEPARTMENT 테이블에 DEPT_ID컬럼은
서로 같은 부서 코드를 나타낸다.
[힌트2]
이를 통해 두 테이블이 관계가 있음을 알고
조인을 통해 데이터 추출이 가능하다.

<정답>
SELECT EMP_ID, EMP_NAME, DEPT_CODE, DEPT_TITLE
FROM EMPLOYEE
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID);

{정리}
연결에 사용할 컬럼명이 서로 다를 경우 ON()을 사용

<결과>
200	선동일	D9	총무부
201	송종기	D9	총무부
.
.
.
221	유하진	D2	회계관리부

2. 외부 조인 (OUTER JOIN)

두 테이블의 지정하는 컬럼값이 일치하지 않는 행도 조인에 포함을 시킨다.
(반드시 OUTER JOIN임을 명시해야한다.)

(1). LEFT [OUTER] JOIN : 합치기에 사용한 두 테이블 중 왼편에 기술된 테이블의 컬럼수를 기준으로 JOIN한다.
<예제>
SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE LEFT JOIN DEPARTMENT
ON(DEPT_CODE = DEPT_ID);

<정리>
JOIN 구문 기준으로 왼쪽에 작성된 테이블의 모든 행이
결과(RESULT SET)에 포함

<결과>
방명수	인사관리부
.
.
.
노옹철	총무부
하동운	
(2). RIGHT [OUTER] JOIN : 합치기에 사용한 두 테이블중 오른편에 기술된 테이블의 컬럼수를 기준으로 JOIN한다.
<예제>
SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE RIGHT JOIN DEPARTMENT 
ON(DEPT_CODE = DEPT_ID);

<정리>
JOIN 구문 기준으로 오른쪽에 작성된 테이블의 모든 행이
결과(RESULT SET)에 포함

<결과>
선동일	총무부
.
.
.
이태림	기술지원부
		마케팅부
		국내영업부
(3). FULL [OUTER] JOIN : 합치기에 사용한 두 테이블이 가진 모든 행을 결과에 포함한다. / *오라클구문은 FULL OUTER JOIN 사용 불가
<예제>
SELECT EMP_NAME, DEPT_TITLE
FROM EMPLOYEE FULL OUTER JOIN DEPARTMENT
ON(DEPT_CODE = DEPT_ID);

<결과>
선동일	총무부
.
.
.
전지연	인사관리부
이오리	

3. 교차 조인 (CROSS JOIN == CARTESIAN PRODUCT)

조인되는 테이블의 각 행들이 모두 매핑된 데이터가 검색되는 방법(곱집함)이다.
이 때, JOIN 구문을 잘못 작성하면 결과로 나타난다.

profile
교육생

0개의 댓글