[SQL] 오라클 데이터베이스 공부 기록(3)-조인
my code archive
article thumbnail
반응형
조인

조인(join)은 두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식이다.

조인 조건 없이 조인을 사용하면 어떤 데이터끼리 연결해야 할지 모르니까 전부 다 종류별로 조합해서 붙여주고

생각보다 많은 데이터가 출력된다. -> 조인 조건이 필요하다.

 

DEPT 테이블과 EMP 테이블에 공통적으로 겹치는 컬럼은 DEPTNO

-> WHERE 조건식이 조인 방식의 정확한 데이터 매치를 위한 기준이 될 때 조인 조건식이라고 한다.

프로그래밍 언어 중 .(콤마)은 소유의 의미.

EMP.DEPTNO = DEPT.DEPTNO

-> EMP 테이블 소유의 DEPTNO 컬럼값 = DEPT 테이블 소유의 DEPTNO 컬럼값

아까보다 간략하게 나온다.

조인 종류

-등가 조인

테이블을 연결한 후에 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방식.

내부 조인 또는 단순 조인으로 부르기로 한다.

 

EX) SELECT EMPNO, ENAME, DEPTNO, DNAME, LOC

->어느 테이블에 속해 있는 열인지 반드시 명시해야 한다.

FROM EMP E, DEPT D

WHERE E.DEPTNO = D.DEPTNO;

 

 

에러 난다. ->

 

EX) SELECT E.EMPNO, E.ENAME, E.SAL, D.DEPTNO, D.DNAME,D.LOC

FROM EMP E, DEPT D

WHERE E.DEPTNO=D.DEPTNO;

 

 

-비등가 조인

등가 조인 방식 외의 방식을 의미한다.

 

EX) 급여 범위를 지정하는 조건식으로 조인하기

SELECT *

FROM EMP E, SALGRADE S

WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

 

-자체 조인

동일 테이블을 조인한다.

자체 조인은 하나의 테이블을 여러 개의 테이블처럼 활용하여 조인하는 방식으로

앞에서 물리적으로 동일한 테이블 여러 개를 사용할 때 발생할 수 있는 문제점을 해결한다.

FROM 절에 같은 테이블을 여러 번 명시하되 테이블의 별칭만 다르게 지정하는 방식으로 사용한다.

 

EX)같은 테이블을 두 번 사용하여 자체 조인하기

SELECT E1.EMPNO, E1.ENAME, E1.MGR,

E2.EMPNO AS MGR_EMPNO,

E2.ENAME AS MGR_ENAME

FROM EMP E1, EMP E2

WHERE E1.MGR=E2.EMPNO;

 

 

->EMP 테이블을 자체 조인하여 사원 정보와 직속 상관 정보를 나란히 출력하는 방식.

하나의 테이블이지만 SELECT문 내부에서 별칭을 E1, E2로 다르게 주어 논리적으로 다른 테이블인 것처럼

명시하여 두 테이블을 조인했다.

 

-외부 조인★★★★★

위 예제에서는 13개의 행이 나왔지만 원래 EMP 테이블은 14개의 행이 있다.

1개가 빠진 이유는 KING(사장)은 직속 상관이 없기 때문이다.

(KING의 MGR열의 값은 NULL이다.)

이렇게 조인 조건 데이터 중 어느 한쪽이 NULL임에도 강제로 출력하는 방식을 외부 조인이라고 한다.

 

EX) SELECT E1.EMPNO, E1,ENAME, E1.MGR,

E2.EMPNO AS MGR_EMPNO,

E2.ENAME AS MGR_ENAME

FROM EMP E1, EMP E2

WHERE E1.MGR = E2.EMPNO(+)

ORDER B E1.EMPNO;

 

(+) 기호가 붙는 위치는 외우면 좋지만

외우지 않고 왼쪽에 해봤다가 안되면 오른쪽에 붙여봐도 된다.

SQL-99 표준 문법 조인

-NATURAL JOIN

등가 조인을 대신해 사용할 수 있는 조인 방식.

조인 대상이 되는 두 테이블에 이름과 자료형(데이터 타입)이 같은 열을 찾은 후 그 열을 기준으로 등가 조인 해주는 방식이다.

 

EX)SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM

DEPPTNO, D.DNAME, D.LOC

FROM EMP E NATURAL JOIN DEPT D

->왼쪽, 오른쪽에 똑같이 갖고 있는 컬럼 조인해라.

ORDER BY DEPTNO, E.EMPNO;

 

 

 

양쪽 테이블에 동일한 컬럼이 없다면 X, 여러 개여도 X,

조인 기준이 되는 컬럼에는 SELECT 절에 소속 테이블을 쓰지 않는다.

 

-JOIN ~ USING

양쪽 테이블 동일한 컬럼을 선택해서 그 컬럼 기준으로 등가 조인.

양쪽 테이블에 동일한 컬럼이 없다면 X

 

EX) SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM,

DEPTNO, D.DNAME, D.LOC

FROM EMP E JOIN DEPT D USING (DEPTNO)

WHERE SAL>=3000

ORDER BY DEPTNO, E.EMPNO;

 

 

 

-JOIN ~ ON

FROM 절에 ON 키워드 이후에 조인 조건식을 직접 명시한다.

기준이 되는 컬럼에도 소속 테이블 적어줘야 한다.

-OUTER JOIN

외부 조인과 같은 방식.

SQL-99 이전 방식의 (+) 기호 대신

LEFT OUTER JOIN ON,

RIGHT OUTER JOIN ON으로 사용한다.

예제(난이도 ★★★★★)

모든 부서 정보, 사원 정보, 급여 등급 정보, 각 사원의 직속 상관의 정보를 부서 번호,

사원 번호 순서로 정렬하여 출력해 보세요.

 

1. 일단 이 예제를 풀기 위해선 총 4개의 테이블을 합쳐야 한다.

DEPT, EMP, SALGRADE, 그리고 직속 상관을 합치기 위해 EMP 테이블을 하나 더 합쳐야 한다.

그중 DEPT, EMP 먼저 합치기

*EMP 테이블에는 40번 부서가 없지만 DEPT 테이블에는 있다. ->아웃 조인

 

 

2. 여기에 SALGRADE 합치기

 

 

 

*40번 부서는 사실 직원이 없기 때문에 E.SAL 값 또한 NULL이라

비등가 조인 BETWEEN A AND B 절에도 아웃 조인을 해줘야 한다.

 

3.*이 예제의 핵심은 바로 BETWEEN A AND B 아웃 조인 찾아내기!!

 

 

 

4.이제 여기에 E2 테이블을 합친다.

 

 

 

5.추가 아웃 조인 해주고 끝.

 

 

<SQL-99 방식>

 

 

 

 

 

<정답>

 

 

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형