조인
조인(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 방식>
<정답>
'📒 education archive > 💾DB' 카테고리의 다른 글
[SQL] 오라클 데이터베이스 공부 기록(6)-인덱스,뷰,시퀀스 (0) | 2021.08.13 |
---|---|
[SQL] 오라클 데이터베이스 공부 기록(5)-트랜잭션,DDL (0) | 2021.08.13 |
[SQL] 오라클 데이터베이스 공부 기록(4)-서브쿼리 (0) | 2021.08.13 |
[SQL] 오라클 데이터베이스 공부 기록(2) - 함수 (0) | 2021.08.13 |
[SQL] 오라클 데이터베이스 공부 기록(1)-SELECT, FROM, ORDER BY절 (0) | 2021.08.13 |