Data Base_Oracle/SQL

SQL_Join 개요 & Cross Join

pathas 2020. 1. 6. 21:51

JOIN

두 개 이상의 테이블에서 원하는 데이터들을
중복된 데이터가 없도록 조회하는 방법

JOIN 종류

종류 설명
inner join 검색하고자 하는 두 테이블의 레코드 총량이 비슷할 때 사용
주로 많이 사용됨
equi join inner join에 포함되며, 연관된 테이블에 동일한 칼럼이 있을 때 사용
self join inner join에 포함되며,
자기 자신의 table 내의 필드를 참조해서 데이터를 조회할 때 사용
non-equi join 조회하려는 테이블 간에 동일한 칼럼이 없을 때 사용
outer join 두 테이블의 레코드 총량이 비대칭일 때 사용
cross join 조회하려는 복수의 테이블 내 필드들을 단순히 나열
ansi join 표준 SQL인 Ansi를 이용한 Join으로 Inner/Outer Join이 있음

 


Cross Join

보고자 하는 필드들을 단순히 나열하는 것

§ 형식

[ SQL> select 필드명1, 필드명2,,,,
from 테이블명1, 테이블명2,,,, ]

# 예제

▷ ALLEN의 부서명을 조회, emp테이블에서는 확인할 수 없음 (부서명 필드 X)
dept테이블(부서 : 부서번호, 부서이름, 위치)을 조회해야 함

 

▶ [ SQL> select ename, dname from emp, dept where ename=upper('allen'); ]

# 에러

▷ ALLEN의 부서명을 조회, emp테이블에서는 확인할 수 없음 (부서명 필드 X)
dept테이블(부서 : 부서번호, 부서이름, 위치)을 조회해야 함
사원번호, 이름, 부서번호, 부서이름, 위치를 조회

 

▶ [ SQL> select empno, ename, deptno, dname, loc from emp, dept;
1행에 오류:ORA-00918: 열의 정의가 애매합니다 ]


'deptno'가 emp테이블과 dept테이블에 모두 있기 때문에 발생하는 에러

테이블명.공통필드 로 명확하게 필드를 지정해야 함

# 풀이

▶▶ [ SQL> select empno, ename, emp.deptno, dname, loc from emp, dept
where ename=upper('allen'); ]

EMPNO ENAME DEPTNO DNAME LOC
7499 ALLEN 30 ACCOUNTING NEW YORK
7499 ALLEN 30 OPERATIONS BOSTON
7499 ALLEN 30 SALES CHICAGO
7499 ALLEN 30 RESEARCH DALLAS

# 단점

중복된 데이터가 많아짐 → 찾고자하는 데이터를 검색하기 어려움


Cross Join은 중복된 데이터가 많아서 원하는 데이터를 정확하게 조회한 결과라고 할 수 없습니다.