Join: 두 개 이상의 테이블을 합쳐서 원하는 값들을 출력하는 기능
→테이블에 컬럼이 많을 경우 중복되는 데이터가 존재할 가능성이 커짐. 이러한 비효율성을 방지하기 위해
'정규화(:하나로 된 것을 더 작은 단위로 분리하는 기술)' 수행. 정규화 후에 여러개의 테이블로 흩어져 저장된 데이터
들을 조합해서 가져오는 기술이 조인(Join)임.
#Join 문법: 네 가지 모두 호환(아래의 쿼리문은 모두 같은 결과)
Oracle JOIN : 오라클에서만 사용하는 쿼리문장 |
SELECT empno, ename, job, mgr, hiredate, sal, comm, e.deptno, dname, loc FROM emp e, dept d WHERE e.deptno=d.deptno; ***e,d는 별칭, 컬럼명 다른 경우에는 테이블(별칭) 생략 가능 |
ANSI JOIN : 모든 데이터베이스 표준 |
SELECT empno, ename, job, mgr, hiredate, sal, comm, e.deptno, dname, loc FROM emp e JOIN dept d ON e.deptno=d.deptno; |
NATURAL JOIN | SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno, dname, loc FROM emp NATURAL JOIN dept ; |
JOIN~USING | SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno, dname, loc FROM emp JOIN dept USING(deptno); ( ) :연결고리 컬럼명 |
#Join 종류
1. INNER JOIN(→교집합) →NULL값 처리 불가
Q. 사원 이름, 직속 상사의 이름을 출력하시오(직속 상사가 있는 인원만 출력).
A. SELECT e1.ename "본인", e2.ename "사수"
FROM empe1,empe2
WHERE e1.mgr=e2.empno;
EQUI_JOIN : 등가조인, 조건절에서 = 사용 |
NON_EQUI_JOIN : 비등가조인, (주로 비교연산자, BETWEEN~AND) |
SELECT empno, ename, job, mgr, hiredate, sal, comm, e.deptno, dname, loc FROM emp, dept WHERE emp.deptno=dept.deptno; |
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno, grade FROM emp, salgrade WHERE sal BETWEEN losal AND hisal; |
+)혼합해서 사용 가능
Q. (사번, 사원이름, 직급, 직속상사 번호, 입사일, 월급, 커미션,)-emp테이블, (부서번호,)-emp+dept테이블,
(부서이름, 소재지,)-dept테이블, (급여등급)-emp(sal)+salgrade(grade)테이블을 입력하시오.
A.
((ANSI 문법))
SELECT empno, ename, job, mgr, hiredate, sal, comm, empdeptno, dname, loc, grade
FROM emp
JOIN dept ON emp.deptno=dept.deptno (→EQUI_JOIN)
JOIN salgrade ON sal BETWEEN losal AND hisal; (→NON_EQUI_JOIN)
((Oracle 문법))
SELECT empno, ename, job, mgr, hiredate, sal, comm, emp.deptno, dname, loc, grade
FROM emp, dept, salgrade
WHERE emp.deptno=dept.deptno
AND sal BETWEEN losal and hisal;
2. OUTER JOIN: 공통 데이터 없어도 포함 →NULL값 처리 가능
1)LEFT OUTER JOIN
Q. 사원 이름, 직속 상사의 이름을 출력하시오(직속상사가 없는 인원도 출력).
A. SELECT e1.ename "본인", e2.ename "사수"
FROM emp e1, emp e2
WHERE e1.mgr=e2.empno(+);
((ANSI)) SELECT e1.ename "본인", e2.ename "사수"
FROM emp e1 LEFT OUTER JOIN emp e2
ON e1.mgr=e2.empno;
**SELF_JOIN 사용: 같은 테이블 내에서 데이터를 연결하는 경우. 테이블명이 같기 때문에 반드시 별칭 필요
***왼쪽에서 데이터를 갖고와서 오른쪽에 붙임(Left Outer Join)
2)LEFT OUTER JOIN(RIGHT OUTER JOIN과 방향만 반대)
3)FULL OUTER JOIN(=UNION, ANSI JOIN이 간단)
'SQL(Oracle) > Oracle 이론 정리' 카테고리의 다른 글
[Oracle] SUBQUERY (0) | 2020.11.10 |
---|---|
[Oracle] SEQUENCE (0) | 2020.08.24 |
[Oracle] 정규식 함수/그룹함수 (2) | 2020.08.10 |
[Oracle] 단일행 함수 (1) | 2020.08.06 |
[Oracle] SELECT / WHERE / GROUP BY / HAVING / ORDER BY (0) | 2020.08.05 |
댓글