본문 바로가기
데이타베이스

[SQL] 조인

by hs_seo 2015. 8. 3.

조인

두 개 이상의 테이블을 연결하여 데이터를 조회하는 것

 

-       등가 조인: 테이블간에 동일한 조건을 이용하여 처리, = 연산자 사용

-       비등가 조인: 테이블간에 동일하지 않은 조건을 이용하여 처리, between, <, > 등의 연산자를 이용하여 처리

-       아웃 조인: 조인 조건을 만족하지 않는 경우에도 결과를 봐야 하는 경우 사용

-       셀프 조인: 자기자신의 정보를 이용하여 조인 처리

 

카테시안 프로덕트(Cartesian Product)

조인 조건을 생략하거나, 잘 못 설정하여 테이블 간의 모든 데이터가 연결되는 것

 

SET 연산자

조인을 사용하지 않고 두 개 이상의 테이블의 연관된 데이터를 조회해 오는 방법

-       UNION: 테이블 간의 합집합, 중복데이터 제거, 자동으로 정렬 작업 처리

-       UNION ALL: 테이블 간의 합집합

-       INTERSECT: 테이블간의 중복 결과만 반환, 교집합

-       MINUS: 앞 테이블의 결과에서 뒷 테이블의 결과를 뺀 결과, 차집합

 

SQL

 

 

-- emp 테이블 정보
SQL> select *
  2    from emp;

      DEPT DNAME
---------- --------------------
        30 KING
        40 WARD
        50 KKK



-- dept 테이블 정보
SQL> select *
  2    from dept;

      DEPT DNAME
---------- --------------------
        10 RESEARCH
        30 SALES
        50 KKK




-- 내츄럴 조인
SQL> select dept, dname
  2    from emp e natural join dept d
  3  ;

      DEPT DNAME
---------- --------------------
        50 KKK




-- using 문을 이용한 조인
SQL> select *
  2    from emp e join dept d using (dept)
  3  ;

      DEPT DNAME                DNAME
---------- -------------------- --------------------
        30 KING                 SALES
        50 KKK                  KKK




-- using 문을 이용한 조인
SQL> select *
  2    from emp e join dept d using (dname)
  3  ;

DNAME                      DEPT       DEPT
-------------------- ---------- ----------
KKK                          50         50




-- on 문을 이용한 조인
SQL> select *
  2    from emp e join dept d on e.dept = d.dept
  3  ;

      DEPT DNAME                      DEPT DNAME
---------- -------------------- ---------- --------------------
        30 KING                         30 SALES
        50 KKK                          50 KKK




-- 아무런 조건을 주지 않은 조인
SQL> select *
  2    from emp, dept
  3  ;

      DEPT DNAME                      DEPT DNAME
---------- -------------------- ---------- --------------------
        30 KING                         10 RESEARCH
        30 KING                         30 SALES
        30 KING                         50 KKK
        40 WARD                         10 RESEARCH
        40 WARD                         30 SALES
        40 WARD                         50 KKK
        50 KKK                          10 RESEARCH
        50 KKK                          30 SALES
        50 KKK                          50 KKK

9 rows selected.




-- 크로스 조인
SQL> select *
  2    from emp cross join dept
  3  ;

      DEPT DNAME                      DEPT DNAME
---------- -------------------- ---------- --------------------
        30 KING                         10 RESEARCH
        30 KING                         30 SALES
        30 KING                         50 KKK
        40 WARD                         10 RESEARCH
        40 WARD                         30 SALES
        40 WARD                         50 KKK
        50 KKK                          10 RESEARCH
        50 KKK                          30 SALES
        50 KKK                          50 KKK

9 rows selected.




-- full 아우터 조인
SQL> select d.dept, e.dept
  2    from dept d full outer join emp e
  3      on d.dept = e.dept
  4  ;

      DEPT       DEPT
---------- ----------
        30         30
                   40
        50         50
        10





-- left 아우터 조인
SQL> select d.dept, e.dept
  2    from dept d left outer join emp e
  3      on d.dept = e.dept
  4  ;

      DEPT       DEPT
---------- ----------
        10
        30         30
        50         50





-- right 아우터 조인
SQL> select d.dept, e.dept
  2    from dept d right outer join emp e
  3      on d.dept = e.dept
  4  ;

      DEPT       DEPT
---------- ----------
        30         30
                   40
        50         50





-- union 을 이용
SQL> select *
  2    from emp
  3   union
  4  select *
  5    from dept
  6  ;

      DEPT DNAME
---------- --------------------
        10 RESEARCH
        30 KING
        30 SALES
        40 WARD
        50 KKK





-- union all 을 이용
SQL> select *
  2    from emp
  3   union all
  4  select *
  5    from dept
  6  ;

      DEPT DNAME
---------- --------------------
        30 KING
        40 WARD
        50 KKK
        10 RESEARCH
        30 SALES
        50 KKK

6 rows selected.





-- 교집합
SQL> select *
  2    from emp
  3   intersect
  4  select *
  5    from dept
  6  ;

      DEPT DNAME
---------- --------------------
        50 KKK




-- 차집합
SQL> select *
  2    from emp
  3   minus
  4  select *
  5    from dept
  6  ;

      DEPT DNAME
---------- --------------------
        30 KING
        40 WARD
반응형

'데이타베이스' 카테고리의 다른 글

[ORACLE] Index Scan 종류  (0) 2015.08.04
[ORACLE] 인덱스  (0) 2015.08.04
DBMS의 공집합과 집합함수  (0) 2015.07.27
[MySQL] Error Code: 1215. Cannot add foreign key constraint  (0) 2015.07.24
[MySQL] ERROR 1045 (28000): 에러  (0) 2015.07.22