SQL JOINs   SQL 조인

(2022-11-24)

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)
     - 기본적으로, `조건에 맞는` 또는 `가능한 모든` 행과의 조합(카르테시안 곱)을 생성
        . 즉, 일치하는 행 만 포함
           .. 양쪽 테이블에 동일 값이 있을 때 만 결합하는 방식  :  교집합 (INTERSECTION)

     - 구분 
        . 동일 조인 (EQUI-JOIN 또는 INNER JOIN 또는 JOIN)
           .. 테이블 간 특정 조건 하에서, 동일 값이 있는 행 만 반환
           .. USING 조건절이나 ON 조건절 등을 사용하게 됨
           .. (명시적 : JOIN 사용 함)    SELECT ... FROM A JOIN B ON 조건
           .. (암시적 : JOIN 사용 안함)  SELECT ... FROM A,B WHERE 조건

        . 자연 조인 (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
        . (어느 한 쪽에도 해당 사항이 없을 경우)에도 결합  (한편, MySQL에서는 지원 안함)
           .. 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. 제약조건   8. SQL 용어  


Copyrightⓒ written by 차재복 (Cha Jae Bok)               기술용어해설 후원
"본 웹사이트 내 모든 저작물은 원출처를 밝히는 한 자유롭게 사용(상업화포함) 가능합니다"