2011년 3월 2일 수요일

Select - Join문 Oracle

 Table이 여러개가 있을때, 내가 원하는 정보가 단지 하나의 Table을 조회하면 만족하는 경우도  있겠지만, 여러 개의 Table의 정보를 함께 확인해야 내가 원하는 정보를 검색할 수 있을 때도 있을
 것이다. 예를 들어 사원의 정보를 확인하는 과정에서 그 사원이 근무하는 부서를 사원 Table에서
 제공하는 데이터인 부서 번호가 아닌 부서 Table에서 제공하는 해당 부서명으로 표시를 하고자
 한다. 이럴경우 내가 원하는 데이터가 사원 Table이 아닌 부서 Table에도 있기 때문에 참조하여야
 하는 Table이 하나가 아닌 두개의 Table이 된다. 이러한 형태의 정보를 제공하기 위해서 Join문이
 필요하다.


  ▷ Cartesian Product
       Cartesian Product은 From절에 Join을 수행할 경우 복수 개의 Table을 명시하고 Where절을
     생략한다든지 Where에 잘못된 Join조건을 수행할 시에 나타난다.
     Cartesian Product에 의한 행의 결과는 항상 두개 Table의 행의 수를 곱한 값이다.


1. Join문

  ▷ 형식
      Select ....
               From 테이블1, 테이블 2, [............... ]
               Where 테이블1.컬럼 = 테이블2.컬럼2[AND ....]
 
      SQL> select per.empno,
        2               per.emp_name,
        3               dept.dept_name,
        4               jikgb.jikgb_name
        5      from personnel per,
        6             code_dept dept,
        7             code_jikgb jikgb
        8      where per.empno between '98001' and '98020'
        9                   and per.dept_code = dept.dept_code
       10                  and per.jikgb_code = jikgb.jikgb_code
       11     order by per.dept_code, per.jikgb_code


       테이블이 두개 이상일 경우는 반드시 Where절에 테이블의 관게에 대한 정의가 있어야
       한다. 이대 꼭 한개의 컬럼만 관계가 있는 경우도 있지만, 여러 개의 컬럼이 관계있는
       경우도 흔하기 때문에 테이블 관계에 대한 주의가 요구된다.
      

2. Outer Join
    기본적으로 Join은 양쪽 테이블의 컬럼내용이 있을 경우만 만족한다. 이러한 단점을 극복
   하는 Join이 OuterJoin이다. OuterJoin은 Join이 수행되는 두 컬럼에 대해 한쪽 Table의
   Null값에 대해서도 Join을 수행하는 Join형태 이다.

   ▷ 형식
      SELECT ...............
      FROM 테이블1, 테이블2[,....]
      WHERE 테이블1.컬럼1[(+)] = 테이블2.컬럼2[(+)] [AND .....]
       
      SQL>select s.name Emp_Name,
        2              s.salary, s.title,
        3              d.name Department_Name
        4     from staff s, department d
        5     where s.deptid = d.id(+);

       EMP_NAME     SALARY   TITLE       DEPARTMENT_NAME
      ------------    --------    --------  -----------------------
       .............         .........      .........      .........................

     (+)의 위치는 기준이 되는 하나의 테이블의 반대편에 존재해야 한다.


3. Self Join
    Join은 항상 서로 다른 Table끼리 Join을 수행하는 것은 아니다. 경우에 따라서는 하나의
  Table을 가지고도 Join을 수행해야 되는 경우가 있다.

댓글 없음:

댓글 쓰기