ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL_Join 개요 & Cross Join
    Data Base_Oracle/SQL 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은 중복된 데이터가 많아서 원하는 데이터를 정확하게 조회한 결과라고 할 수 없습니다.

     

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

    SQL_Equi Join & Self Join  (0) 2020.01.06
    SQL_Inner Join(Equi Join) & 테이블 별칭 부여  (0) 2020.01.06
    SQL_Constraint Enable / Disable  (0) 2020.01.06
    SQL 제약조건 Foreign Key  (0) 2020.01.04
    SQL 제약조건 Check & Default  (0) 2020.01.04

    댓글

Designed by Tistory.