JOIN(조인) : 조건을 기준으로 테이블들의 각 행들을 합친후, 원하는 데이터 레코드를 가져오는 방법이다.
- 검색하고 싶은 컬럼이 다른 테이블에 있을 경우 주요 사용하며, 테이블들을 마치 하나의 테이블인 것처럼 활용한다.
- 보통 기본키(PK) 또는 외래키(FK)로 두 테이블을 연결한다.
1. INNER JOIN : 기준테이블과 조인한 테이블의 중복값을 보여준다. 조건에 맞는 항목만 출력
(1) EQUI-JOIN : 조건식에 '='을 사용한다. 교집합
--EQUI조인 표현식
SELECT T1.COL1, T1.COL2, T2.COL3, T2.COL4....
FROM TABLE T1, TABLE T2
WHERE T1.PRIMARYKEY = T2.FOREIGNKEY;
--EMP테이블의 사번, 이름, DEPT테이블의 부서명, 부서번호 출력
SELECT EMPNO, ENAME, DNAME, DEPTNO
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
--EMP테이블을 E로, DEPT테이블을 D로 줄여 약칭으로 표기가 가능하다.
SELECT E.EMPNO, E.ENAME, D.DNAME, E.DEPTNO
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
--△똑같음▽ / 아래는 FM표현식
SELECT E.EMPNO, E.ENAME, D.DNAME, D.DEPTNO
FROM EMP E INNER JOIN DEPT D
WHERE (E.DEPTNO = D.DEPTNO);
--부서번호 30인 사원의 사번, 이름, 급여, 부서번호, 부서명을 출력
SELECT E.EMPNO, E.ENAME, D.DNAME, D.DEPTNO
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 30;
(2) NON-EQUI-JOIN : 조건식에 '='연산자 이외의 비교연산자를 사용한다. 조인절이 일치하지 않는 조건을 명시한다.
--EMP테이블의 이름, 급여, SALGRADE테이블의 급여등급을 출력
SELECT E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S;
--EMP테이블의 이름, 급여, SALGRADE테이블의 급여등급을 출력
--NON EQUI INNER JOIN
SELECT E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
--WHERE E.SAL >= S.LOSAL AND E.SAL <= S.HISAL;
2. OUTER JOIN : 조건에 맞지 않은 항목도 출력
(1) OUTER LEFT JOIN : 왼쪽 테이블을 기준으로 조인해 왼쪽테이블 데이터 + 오른쪽테이블과 중복된 데이터를 출력
--EMP테이블(LEFT TABLE)과 DEPT테이블(RIGHT TABLE)의 OUTER LEFT JOIN
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO(+) = D.DEPTNO
ORDER BY DEPTNO;
(2) OUTER RIGHT JOIN : 오른쪽 테이블을 기준으로 조인해 오른쪽테이블 데이터 + 왼쪽테이블과 중복된 데이터를 출력
--EMP테이블(LEFT TABLE)과 DEPT테이블(RIGHT TABLE)의 OUTER RIGHT JOIN
SELECT E.EMPNO, E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO(+)
ORDER BY DEPTNO;
3. SELF JOIN : 자기자신과 조인하여 가지고 있는 데이터를 다양하게 변형시켜 활용할 경우에 자주 사용된다.
하나의 테이블을 여러번 복사해서 조인한다고 생각하면 된다.
--"SMITH의 매니저(MGR) 는 FORD입니다." 처럼 출력하기 / SMITH, FORD 둘다 ENAME
SELECT E.ENAME ||'의 매니저는' ||MG.ENAME|| '입니다.' AS RESULT
FROM EMP E, EMP MG
WHERE E.MGR = MG.EMPNO; --MGR코드는 사번, EMPNO 사번
--사원이름, 부서번호, 해당사원과 같은 부서에서 근무하는 사원을 출력
SELECT A.ENAME, A.DEPTNO, B.ENAME, B.DEPTNO
FROM EMP A, EMP B
WHERE A.DEPTNO = B.DEPTNO AND A.ENAME != B.ENAME
ORDER BY A.ENAME;
4. 3중 JOIN(MULTIPLE JOIN) : 테이블 여러개를 조인
--사원번호, 이름, 부서번호, 부서명, 급여, 급여등급을 출력
--E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME, E.SAL, S.GRADE
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME, E.SAL, S.GRADE
FROM EMP E, DEPT D, SALGRADE S
WHERE E.DEPTNO = D.DEPTNO
AND E.SAL BETWEEN S.LOSAL AND S.HISAL;
'데이터베이스 > SQL' 카테고리의 다른 글
[DB] SQL SET연산자(집합연산자)_합집합 UNION,교집합 INTERSECT, 차집합 MINUS (0) | 2021.10.28 |
---|---|
[DB] SQL 서브쿼리 Subquery 사용법, 예제 (0) | 2021.10.28 |
[DB] SQL 관계형 데이터베이스 RDBMS 의 키(KEY)_기본키(PK), 외래키(FK), 슈퍼키(SK) (0) | 2021.10.28 |
[DB] SQL SELECT문(4)_GROUP BY절(그룹함수), HAVING절 (0) | 2021.10.27 |
[DB] 오라클 SQL 함수 (6) 그룹 함수(다중행 함수)_SUM, AVG, MAX, MIN, COUNT.. (0) | 2021.10.27 |