ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL_Non-Equi Join & Outer Join
    Data Base_Oracle/SQL 2020. 1. 6. 22:21

    Non-Equi Join

    두 개 이상의 테이블에 동일 칼럼이 없을 때
    다른 조건식을 사용하여 데이터를 조회하는 Join 형식

    # 예제

    ▷ salgrade 테이블 구조, 레코드 확인
    [ SQL> select * from salgrade; ]

    GRADE LOSAL HISAL
    1 700 1200
    2 1201 1400
    3 1401 2000
    4 2001 3000
    5 3001 9999

    { 문제 }
    ▷ emp테이블에서 사번, 이름, 업무, 급여 출력
    salgrade 테이블에서 grade 출력
    grade 내림차순으로 정렬
    조회시마다 부서번호를 입력받도록 작성

     

    ▶ SQL> select empno, ename, sal, grade from emp e, salgrade s
    where e.sal between s.losal and s.hisal and e.deptno=&deptno
    order by 4 desc;
    deptno의 값을 입력하십시오: 10 ]

    EMPNO ENAME SAL GRADE
    7839 KING 5000 5
    7782 CLARK 2450 4
    7934 MILLER 1300 2

    Outer Join

    • 두 테이블의 데이터 총량이 비대칭일 때 사용
    • 데이터양이 많은 테이블의 정보가 무조건 나올 수 있도록 설정
      ※ 데이터가 많은 쪽 테이블에서 정보가 누락될 수 있기 때문
    • left outer join (대 - 소) / right outer join (소 - 대)
      나누기도 하지만 큰 의미는 없음, 요즘엔 잘 구분하지 않음

    § 형식

    [ SQL> ~ where 데이터 양이 적은 필드명(+) = 데이터 양이 많은 필드명 ]

    레코드가 적은 쪽에 (+) 를 붙여주면 됨
    (+)가 가상 로우(null)를 만들어줌

    # 예제

    ▷ emp, dept 테이블을 Join해서 ename, job, deptno, dname 출력
    단, dept테이블의 40번부서까지 다 출력이 되도록 작성

    ▶ [ SQL> select e.ename, e.job, d.deptno, d.dname from emp e, dept d
    where e.deptno(+)=d.deptno; ]

    ENAME JOB DEPTNO DNAME
    SMITH CLERK 20 RESEARCH
    ALLEN SALESMAN 30 SALES
    ... ... ... ...
        40 OPERATIONS

    ※ inner join으로는 40번부서를 조회할 수 없음

    # 에러

    ▷ [ SQL> select e.ename, e.job, d.deptno, d.dname from emp e, dept d
    where e.deptno(+) = d.deptno(+); ]

    ▷▷ [ 1행에 오류: ORA-01468: outer-join된 테이블은 1개만 지정할 수 있습니다 ]
    ※ (+)기호는 한 쪽 필드에만 사용할 수 있음

    데이터양이 많은 곳에도 사용할 수는 있지만 적은 쪽에 맞춰서 잘리기 때문에 데이터 조회 불가능


    동일 컬럼이 없을 때 데이터를 조회하는 Non-Equi Join과 데이터가 누락되지 않도록 하는 Outer Join에 대해 알아보았습니다.

    'Data Base_Oracle > SQL' 카테고리의 다른 글

    SQL_Sub Query 개요 & 단일 행 Sub Query  (0) 2020.01.07
    SQL_Ansi Join  (0) 2020.01.06
    SQL_Equi Join & Self Join  (0) 2020.01.06
    SQL_Inner Join(Equi Join) & 테이블 별칭 부여  (0) 2020.01.06
    SQL_Join 개요 & Cross Join  (0) 2020.01.06

    댓글

Designed by Tistory.