SQL JOINs   SQL 조인

(2020-09-22)

SQL 다중 테이블, SQL 집합 연산, UNION, 유니온, JOIN, 조인

1. 수학적으로, 집합의 `집합 연산`과 관계형 DB의 `관계 연산` 비교집합의 `집합 연산`
     - 합집합 (UNION)
        . 관계형 DB 대응 例) WHERE OR,  SELECT () UNION SELECT ()
     - 교집합 (INTERSECTION) 
        . 관계형 DB 대응 例) WHERE AND, SELECT () INTERSECT SELECT ()
     - 차집합 (DIFFERENCE)
        . 관계형 DB 대응 例) SELECT () EXCEPT SELECT ()
     - 곱집합 (PRODUCT)
        . 관계형 DB 대응 例) CROSS JOIN

  ㅇ 관계형 DB의 `관계 연산`
     - SELECT : (1 이상의 테이블에서 데이터를 추출)
     - PROJECT : 어떤 속성(열,칼럼) 만을 돌려줌으로써, 각 튜플의 크기를 줄임
     - JOIN   : (1 이상의 테이블들을 조합시킴)
     - DIVIDE : (실제 구현 없음)


2. JOIN (조인)

  ㅇ JOIN 형태
      

  ㅇ 내부 조인 (INNER JOIN)
     - 기본적으로, `조건에 맞는` 또는 `가능한 모든` 행과의 조합(카르테시안 곱)을 생성
        . 즉, 일치하는 행 만 포함

     - 구분 
        . 동일 조인 (EQUI-JOIN 또는 INNER JOIN 또는 JOIN)
           .. 테이블 간 특정 조건 하에서, 동일 값이 있는 행 만 반환
           .. 즉, 이 경우는, USING 조건절이나 ON 조건절을 반드시 사용해야 함

        . 자연 조인 (NATURAL JOIN)
           .. ON 조건절을 명시할 필요없음
           .. 암묵적으로, 테이블 간에 동일 이름을 갖는 칼럼들이 있을 때, 
           .. 그 칼럼들 간에 동일한 값이 있는 행 만 반환
           .. 대부분의 전문가들이 이의 사용을 비 권장하고 있음 (별 유용성 없음)

     - 例) 두 테이블에서 같은 값을 갖는 레코드들을 생성하려면, (동일 조인)
        .  SELECT column FROM table1 a INNER JOIN table2 b ON a.column = b.column;

  ㅇ 외부 조인 (OUTER JOIN) 
     - 기본적으로, 기준 테이블의 모든 행과 다른 테이블의 일치하지 않은 행(NULL 반환)도 보이게 함
 
     - 구분 (왼쪽 또는 오른쪽 방향)
        . LEFT OUTER JOIN 또는 LEFT JOIN
        . RIGHT OUTER JOIN 또는 RIGHT JOIN
        . FULL OUTER JOIN

  ※ [참고]
     - 내부 조인은, 조건에 맞는 행만 반환하므로, 쿼리 구문상 두 테이블의 순서가 상관없지만,
     - 외부 조인은, 기준 테이블에 따라 왼쪽(LEFT),오른쪽(RIGHT) 방향으로 구분할 수 있음

  ㅇ 교차 조인 (CROSS JOIN)
     - 테이블 간 JOIN 조건이 없는 경우로써, 가능한 모든 데이터의 조합을 반환
     - 테이블 간에 나올 수 있는 모든 경우의 행이 다 반환되게 됨
     - 구문상, 테이블명 간에 JOIN 없이 그냥 ,(콤마) 만으로 구분하여도 같은 효과를 보임 (실수 조심)
     * 수학에서의 곱 집합을 말하며, 실무에서 거의 사용 기회 없음


3. UNION (유니온)

  ㅇ 사실상, 위의 JOIN 중 FULL OUTER JOIN과 같은 개념
     - A ∪ B (UNION) : 테이블 A와 B를 합치되, 중복 레코드(또는,튜플)는 원칙적으로 제거

  ㅇ 2 이상의 SELECT 문을 결합하는데 사용 
     - SELECT () UNION SELECT ()
        . (문법) 각 SELECT 문 내 컬럼의 자료형이 동일해야 하고, 나열 순서도 같아야 함
        . (결과) 각 테이블 내 칼럼들이 함께 연이어 붙어서 단일 테이블로 결과로써 보여줌

     - 例) SELECT id,col1 FROM ... UNION SELECT id,col2 FROM ... UNION SELECT id,col3 FROM ... 

  ㅇ UNION 구분
     - UNION ALL : 공통 교집합까지 중복 포함하며, 그대로 보여 줌 (속도 빠름)
     - UNION : 공통 교집합의 중복을 제거하며, 정렬 작업이 내부적으로 발생 (속도 느림)


4. [기타]  서브 쿼리 (Sub Query)

  ㅇ SELECT 문 하부의 WHERE 절이나 FROM 절 내 사용되는 부분 쿼리(서브 쿼리)


[SQL] 1. SQL 2. SQL 쿼리 (SELECT 구문) 3. SQL 활용 4. SQL 조인 5. SQL 함수 6. DDL (데이터 조작:테이블 생성/변경) 7. SQL 용어

 
        최근수정     요약목록     참고문헌