Day52 - 데이터베이스-오라클(6). 22.11.9.수

류소리·2022년 11월 9일
0

오라클

목록 보기
6/13

조인, 서브쿼리

[Oracle] 오라클 조인 방법 쉽게 설명 (ANSI JOIN, Oracle Join)

오라클에서 조인을 할 때 오라클 조인(Oracle Join)과 안시 조인(ANSI JOIN)을 사용할 수 있다. 오라클 9i 까지는 오라클 조인만 사용할 수 있으며, 오라클 10g부터는 안시 조인을 추가로 사용할 수 있다. 최근 구축되는 시스템은 대부분 안시 조인을 사용하지만, 과거에 구축되어 있는 시스템은 오라클 조인을 많이 사용하고 있기 때문에 오라클 조인 방식도 꼭 알고 있어야 한다.

조인은 크게 위의 5가지 정도로 분류할 수 있다. 조인 (INNER JOIN)과 아우터 조인 (LEFT OUTER JOIN)은 아주 많이 사용하니, ANSI JOIN과 Oracle Join을 비교하여 두 가지 방식 모두 익혀 두어야 한다.

위의 예제는 EMP 테이블과 DEPT 테이블을 조인(내부 조인)하여 DEPT 테이블의 DNAME(부서명)을 조회한 쿼리이다.

조인(INNER JOIN)은 메인 테이블과 조인 테이블에 조인 칼럼(deptno)의 값이 동시에 존재해야 조회가 된다.

--- [ JOIN의 종류 ] P221
-- INNER JOIN : 내부조인
-- EQUI JOIN : 등가조인
-- SIMPLE JOIN : 단순조인

--- [ 외부조인 ] P231---------------------------------------------

--- (LEFT)
SELECT E1.EMPNO, E1.ENAME , E1.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2
WHERE E1.MGR = E2.EMPNO(+);

--- (RIGHT)
SELECT E1.EMPNO, E1.ENAME , E1.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2
WHERE E1.MGR(+) = E2.EMPNO;

-----[ SUBQUERY 서브쿼리 ] P242-------------------------------------------

[Oracle] 오라클 서브쿼리 종류 및 사용법 (SubQuery)

오라클에서 쿼리문을 작성하다 보면 서브 쿼리(subquery)를 자주 접하게 된다. 서브 쿼리를 처음 접하면 아주 복잡하게 느껴지는데, 기능을 조금만 익히면 쿼리문을 작성할 때 아주 유용하게 사용할 수 있다. 서브 쿼리는 메인 쿼리 내부에 작성하는 쿼리를 뜻하며, 주로 아래의 3가지 서브 쿼리로 분류한다.

위의 3가지 분류 외에도 연관성 없는 서브 쿼리, 연관성 있는 서브 쿼리로 분류하기도 한다. 연관성 없는 서브 쿼리는 메인 쿼리의 테이블과 무관하게 실행되는 서브 쿼리이며, 연관성 있는 서브 쿼리는 메인 쿼리의 테이블과 조인하여 실행하는 서브 쿼리이다.

인라인 뷰 (inline view)

인라인 뷰는 뷰(View)와 동일하며 다른 점은 뷰(View)는 오브젝트이기 때문에 재활용이 가능하지만 인라인 뷰는 해당 쿼리문에서만 사용하는 임시 뷰이다. 인라인 뷰는 WITH 절로 생성된 뷰와도 비슷하다.

인라인 뷰는 테이블(또는 뷰)처럼 메인 쿼리의 테이블과 조인을 하여 사용할 수 있다. 인라인 뷰는 테이블과 같이 인덱스가 없기 때문에 데이터가 많으면 쿼리문이 느려질 수 있어서 사용 시 주의해야 한다.

--- 사원 이름이 JONES인 사원의 급여 출력 p242
SELECT SAL
FROM EMP
WHERE ENAME = 'JONES';

--- 급여가 2975보다 높은 사원 정보 츨력 p243
SELECT ENAME
FROM EMP
WHERE SAL > 2975;

--- [ 서브쿼리로 JONES의 급여보다 높은 급여를 받는 사원 정보 출력 ] P244
SELECT *
FROM EMP
WHERE SAL > ( SELECT SAL
FROM EMP
WHERE ENAME = 'JONES');

--- [ 사원 이름이 allen인 사원 추가수당 보다 많은 수당 받은 사원정보 ] P245
SELECT *
FROM EMP
WHERE COMM > ( SELECT COMM
FROM EMP
WHERE ENAME= 'ALLEN');


출처:
https://gent.tistory.com/464
https://gent.tistory.com/469

profile
새싹 빅테이터 개발자

0개의 댓글