Oracle에서 조인(JOIN)이란..
'두 개 이상의 테이블이나 데이터 베이스를 서로 연결하여 데이터를 검색할 때 사용하는 방법으로 서로 연관있는 테이블을 이용하여 두 개의 테이블이 마치 하나의 테이블인 것처럼 보여주는 것'
일반적으로 PRIMARY KEY(PK)와 FOREIGN KEY (FK)를 사용하여 JOIN 하는 경우가 대부분이지만 논리적인 값들의 연관으로 JOIN하는 경우도 있다.
조인(JOIN) 구문 형태
SELECT table1.colum1[, table2.column2 ...]
FROM table1, table2
WHERE table1.colum1=table2.column2;
또는 join절을 이용한 명시적 조인
SELECT table1.colum1[,table2.colum2...]
FROM table1 JOIN table2
ON table1.column1 = talbe2.column2;
조인의 형태
1) EQUI JOIN : 조인조건이 정확히 일치하는 경우에 사용(pk와 fk를 사용하여)
2) NON-EQUI JOIN : 조인 조건이 정확히 일치하지 않는 경우에 사용(등급,학점)
3) OUTER JOIN : 조인 조건이 정확히 일치하지 않는 경우에도 모든 행들을 출력
4) SELF JOIN : 하나의 테이블에서 행들을 조인하고자 할 때 사용
그 외
5) Cartesian Product : 모든 가능한 행들의 조인
6) Set Operator : 여러 개의 select문장을 연결하여 작성한다.
#EQUI JOIN
조인 조건이 EQUAL(=) 기호로 만들어지는 경우
- dept와 emp의 equi join
SELECT D.DNAME, D.DEPTNO, E.ENAME, E.JOB
FROM DEPT D, EMP E
WHERE D.DEPTNO=E.DEPTNO
ORDER BY D.DEPTNO ASC;
명시적 JOIN절 사용 (위와 동일한 결과)
SELECT DNAME, D.DEPTNO, ENAME, LOC
FROM DEPT D JOIN EMP E
ON D.DEPTNO=E.DEPTNO
ORDER BY 1;
[결과]
#NON-EQUI JOIN
조인 조건이 EQUAL(=)이 아닌 다른 연산 기호로 만들어지는 경우
각 사원의 사원명, 급여, 급여 등급을 출력 하라.
SELECT ENAME, SAL, GRADE, LOSAL, HISAL
FROM EMP E JOIN SALGRADE S
ON E.SAL BETWEEN S.LOSAL AND S.HISAL;
[결과]
#OUTER JOIN
- SELECT <열 목록>
- FROM <첫번째 테이블 (LEFT 테이블)>
- <LEFT | RIGHT | FULL> OUTER JOIN <두번째 테이블 (RIGHT 테이블)>
- ON <조인될 조건>
- [WHERE 검색 조건]
- -- 전체 회원의 구매기록을 살펴보자.
- -- 단, 구매 기록이 없는 회원도 출력되어야 한다.
- -- LEFT OUTER JOIN이므로, UserTable은 모두 출력된다
- SELECT U.ID, Name, GoodName, Addr
- FROM UserTable U -- LEFT Table
- LEFT OUTER JOIN BuyTable B -- RIGHT Table
- ON U.ID = B.ID
- ORDER BY U.ID
- -- 전체 회원의 구매기록을 살펴보자.
- -- 단, 구매 기록이 없는 회원도 출력되어야 한다.
- -- RIGHT OUTER JOIN이므로, UserTable은 모두 출력된다
- SELECT U.ID, Name, GoodName, Addr
- FROM BuyTable B -- LEFT Table
- RIGHT OUTER JOIN UserTable U -- RIGHT Table
- ON B.ID = U.ID
- ORDER BY U.ID
#SELF JOIN
- - Equi Join과 같으나 하나의 테이블에서 조인이 일어나는 것이 다르다.
- - 같은 테이블에 대해 두 개의 alias를 사용하여 FROM절에 두 개의 테이블을 사용하는 것 처럼 조인한다.
1 2 3 4 5 6 7 8 9 10 11 12 | -- 사원의 매니저명을 조회하는 Self Join 예제 SELECT e.ename, a.ename "Manager" FROM emp e, emp a WHERE e.empno = a.mgr; ENAME Manager ------- ---------- FORD SMITH BLAKE ALLEN BLAKE WARD KING JONES ... |
# 궁금한점은 댓글 남겨주시면 부족한 지식이지만 답변 드리겠습니다.
참고 자료 :
1. 실무에서도 중요한 오라클 조인(Join) 개념과 예제 - http://bisuanytime.blogspot.kr/2016/10/join.html
2. 꿈꾸는 개발자, DBA 커뮤니티 구루비 - http://www.gurubee.net/lecture/1020
3. 수까락의 프로그래밍 이야기 - http://egloos.zum.com/sweeper/v/3002220