IT STUDY LOG
[Oracle] JOIN - ORACLE 조인 문장 본문
# ORACLE 조인
카티션곱
- 카티션 곱 테이블 행수 : A테이블 행 개수 * B테이블 행 개수
- 카티션 곱 테이블 열수 : A테이블 열 개수 + B테이블 열 개수
SELECT *
FROM emp, dept
ORDER BY emp.empno, dept.deptno;
SELECT emp.empno, emp.ename, dept.deptno, dept.dname -- 여러 테이블을 사용할 때 컬럼 앞에 테이블명 명시
FROM emp, dept
WHERE emp.deptno = dept.deptno
ORDER BY emp.empno, dept.deptno;
EQUI JOIN, NON-EQUI JOIN
- EQUI JOIN : 조건이 동등 연산자
- NON-EQUI JOIN : 동등 연산자를 제외한 기타 비교 연산자
-- 명시적으로 해당 컬럼이 어디에 속해있는지 기술해주는 것이 성능에 일부 영향
SELECT emp.empno, emp.ename, emp.deptno, dept.deptno, dept.dname
FROM emp, dept
WHERE emp.deptno = dept.deptno -- 조인 조건절
AND emp.sal >= 3000; -- 비조인 조건절: 조인에 참여가 되는 행을 줄여주기 위한 조건으로 조인 조건보다 선행되어 수행
3개의 테이블 조인
-- 오라클 고유 조인을 사용할 경우 테이블 간의 조인 순서는 작성한 조인 조건절과 무관하게 오라클이 성능에 따라 정함
SELECT e.empno, e.ename, d.deptno, d.dname, s.losal, e.sal, s.hisal, s.grade
FROM emp e, dept d, salgrade s
WHERE e.deptno = d.deptno
AND e.sal BETWEEN s.losal AND s.hisal;
INNER JOIN
- 조인의 조건을 만족시키는 행만 리턴, 질의 결과 정렬 안됨
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
OUTER JOIN
- 조인 조건을 만족하지 못한 경우에도 모든 행을 보고자할 때 사용, 질의 결과 정렬 됨
- 기준이 되는 테이블이 아닌 쪽에 (+) 기호 입력
- WHERE e.deptno(+) = d.deptno(+)와 같이는 실행 불가
-- LEFT OUTER JOIN
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno(+);
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno(+)
-- AND d.dname = 'SALES'; -- 한 쪽 테이블에만 사용되는 비조인조건절 때문에 잘못된 결과 도출
AND d.dname(+) = 'SALES'; -- 이와같이 작성해야 원하는 결과가 도출
-- RIGHT OUTER JOIN
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;
-- FULL OUTER JOIN
-- ANSI 조인에 비해 비효율적
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno(+)
UNION
-- ALL -- 중복값 허용
SELECT e.empno, e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno;
SELF JOIN
- 하나의 테이블에서 순환구조로 조인
SELECT a.empno "사원 사번", a.ename "사원명", a.mgr "사원의 관리자 정보", b.empno "관리자 사번", b.ename "관리자명"
FROM emp a, emp b
WHERE a.mgr = b.empno(+)
ORDER BY b.empno, a.empno;
'computer science > database' 카테고리의 다른 글
[Oracle] SET 연산자 (0) | 2023.08.31 |
---|---|
[Oracle] JOIN - ANSI 조인 문장 (0) | 2023.08.31 |
[Oracle] JOIN (0) | 2023.08.31 |
[Oracle] 그룹 함수 기본 (0) | 2023.08.30 |
[Oracle] 단일 행 함수 - 일반 함수 (0) | 2023.08.30 |
Comments