데이터베이스 - 개정 문법

99년 조인 문법

지금까지 살펴본 join 문법은 92년 문법이라는 오라클 8i  이전 버전에서 사용했던 문법이다. 오라클 9i부터 새로 문법이 추가되었는데 이를 99년 문법이라고 한다. 한번 살펴보도록 하겠다.
이 방식에서는 where절이 join조건인지 아닌지 명백하게 나타난다.

  • cross join
순서대로 살펴보도록 하자. 먼저 cross join은 앞서 봤던 카르테시안 프로덕트와 같다.

부서 테이블에 대해 직원 테이블을 일일이 조인하고 있다.

물론 앞서 사용했던 축약형이나 조인 후 where 절을 통해서 조인 테이블에 대해 조건을 넣어줄 수 있다.


  • natural join
natural 조인에서는 알아서 같은 이름의 칼럼을 찾아 병합한다. 기존에는 칼럼 명이 동일 하더라도 조건절을 사용하여 같은 것에 대해 값을 비교하여 출력하도록 하였다. 하지만 natural join을 사용하면 해당 절차가 필요 없이 equi join을 진행한다.



  • using 사용하기
Natural join의 경우에는 join해야 할 테이블 간에 동일한 이름을 갖는 컬럼이 여러 개인 경우엔 원하는 컬럼으로 join할 수 없다. 이 때 무엇을 중심으로 join을 진행할 지 결정하기 위해서 using을 사용한다.


using을 사용할 때 조심할 부분이 있다.
이 예시처럼 using을 사용할 시 테이블.칼럼명 식으로 접근하면 오류를 발생시킨다.

칼럼명으로만 접근해야한다.



  • on 사용하기
기존에는 조인을 사용하기 위해서 where절을 사용하였다. 따라서 이 조건절이 조인을 위한 조건절인지 아닌지를 한번에 알 수 없었다. 하지만 개정 문법에서는 on을 사용함으로써 해당 조건절은 join을 위한 조건임을 쉽게 파악할 수 있도록 한다.


추가적인 조인에 대한 조건은 and 연산자를 사용해서 추가하면 된다.


지금까지 equi - join에 대해서 살펴보았다. 그렇다면 non-equi join에 대해서는 어떻게 다룰 것인가. 이 때 역시 on을 사용하여 join문을 작성한다. 나머지는 동일하다.



  • outer join
마지막으로 outer 조인을 살펴보겠다. 개정 문법에서 가장 많이 추가된 부분이라고 할 수 있다. 기존에는 +연산자만을 이용했었지만, left, right, full outer join이 추가되었다. 하나씩 설명하도록 하겠다.

    • left outer join: left가 모든 정보를 가지고 있다.
    • right outer join: right 쪽에 모든 데이터가 존재

만약에 위의 예시에서 emp에 표현이 안된 값이 존재한다면 해당 값에 대해서 dname이 null이라도 표현한다.

예시를 들어보기 위해서 기존 테이블에 행을 하나 추가하도록 하겠다.

아직 배우진 않았지만, insert문을 통해 항목을 추가하였다. 따라서 직원 테이블에 항목이 추가되어 부서 테이블에서 접근할 수 없는 항목이 생겼다.

이를 right outer join을 통해서 어떻게 출력되는지 살펴보자.
kim에 대해서 부서명이 없는 상태로 출력되고 있다.

    • full outer join: 기존 문법에서는 양쪽을 모두 표현할 방법은 없었다. 하지만 개정된 join문에서는 가능하다.

위의 예시를 이번엔 full outer join을 사용해서 출력해보자.
right와 left outer 조인이 동시에 표현된다.

문제
1.
부서 테이블과 사원 테이블에서 사번, 사원명, 급여, 부서명으로 검색하기
(단, 급여가 2000 이상인 사원에 대하여 급여를 기준으로 내림차순 정렬)


2.
사원 테이블과 급여등급 테이블에서 사번, 사원명, 급여, 등급을 검색하기
(단, 등급은 급여가 하한값과 상한값 범위에 포함되고 등급이 4이며 급여를 기준으로 내림차순 정렬)


3.
사원 테이블에서 사원명과 해당 사원의 관리자명을 검색하시오.

4.
사원 테이블에서 사원명, 해당 사원의 관리자명, 해당 사원의 관리자의 관리자명을 검색
하시오.


7번 결과에서 상위 관리자가 없는 모든 사원의 이름도 사원명에 출력되도록 수정하시오.

댓글

이 블로그의 인기 게시물

데이터베이스 PL/SQL - 배열과 테이블

데이터베이스 PL/SQL 변수선언

데이터베이스 PL/SQL 제어문 - 반복문