IT STUDY LOG

[Oracle] JOIN - ORACLE 조인 문장 본문

computer science/database

[Oracle] JOIN - ORACLE 조인 문장

roheerumi 2023. 8. 31. 11:42

# 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