728x90

    JOIN(조인)에 대한 이해 - 1


    조인

    1). EQUI JOIN : 테이블(뷰, 인라인뷰)과 테이블(뷰, 인라인뷰) 사이에 콤마(,)를 찍어서 조인.

    ex)

    select *

    from employees e, departments d; 

    -- 카타시안 프로덕트(Catersian product)(모든 경우의 수)


    집합 A={1,2,3} B={a,b} 있다면

    집합 a의 원소와 집합 b의 원소를 매핑시켜라

    A⊙B = {1,a}{2,a}{3,a},{1,b}{2,b}{3,b} = 데카르트 곱이라 부름 3*2 = 6의 경우의 수가 나옴

    select count(*) from employees; --> 107

    select count(*) from departments; --> 27

    select count(*) from employees e, departments d; -->2889 라는 결과가 나옴.


    조인

    같은것끼리만 출력해라로 바꾸자

     where e.department_id = d.department_id;



    select *

    from employees e, departments d

    where e.department_id = d.department_id;

    -- 원래명수는 107명인데 106명으로 출력

    -- EQUAL JOIN 이므로 null 값이 킴벌리가 나오질 않는다.


    select *

    from employees e, departments d

    where e.department_id = d.department_id(+); 

    --> (+)가 없는 부분을 모두 출력하고 매핑시켜라가 된다.

    --> OUTER JOIN

    ----------------------------------


    조인

    ---------------------


    select *

    from employees e, departments d

    where e.department_id *= d.department_id; 

    --> ms사에서는 조인의 할때의 널값을 구할때 이렇게 쓴다.

         오라클에서는 쓸수없음 

    --(표준문법이 아니기때문에)

    조인


    select *

    from employees e, departments d

    where e.department_id(+) = d.department_id; 

    -- (+)없는쪽을 모두 출력하고 매핑시켜라

    /* ms쪽에서는 *이 붙은쪽을 다 보이고 매핑시켜라 이다.

    select *

    from employees e, departments d

    where e.department_id =* d.department_id; 

    */

    (+) 방식에서는 full outer join은 불가능하다.

    select *

    from employees e, departments d

    where e.department_id(+) = d.department_id(+); --오류

    럭키-[이모티콘]어밴드


    '공감'버튼 및 '좋아요'는 글쓴이에게 큰 힘이 됩니다!


    Posted by 천상나타