-
SQL_Non-Equi Join & Outer JoinData 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