소품집

[SQL] JOIN(조인) 본문

자격증/SQL

[SQL] JOIN(조인)

sodayeong 2021. 3. 9. 21:57
728x90

1. EQUI JOIN (교집합)

EQUI JOIN (교집합)

  • 조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정이다.
  • 조인의 가장 기본은 교집합을 만드는 것이다.
  • select * from student, major where student.majorno = major.majorno;
    • student table과 major table에서 majorno 칼럼을 사용하여 같은 것을 조인한다.
  • EQUI JOIN에서만 HASH JOIN이 가능하다.
    • 해시 조인은 먼저 선행 테이블을 결정하고, 선행 테이블에서 주어진 조건(where)에 해당하는 행을 선택한다.
    • 해당 행이 선택되면 조인 키를 기준으로, 해시 함수를 사용해서 해시 테이블을 메인 메모리(Main memory)에 생성하고, 후행 테이블에서 주어진 조건을 만족하는 행을 찾는다.
    • 후행 테이블의 조인 키를 사용해서, 해시 함수를 적용하여 해당 버킷을 찾는다.

INNER JOIN

  • INNER JOIN은 ON 문을 사용해서 테이블을 연결한다.
  • select * from student inner join major on student.majorno = major.majorno;

INTERSECT 연산

  • 두 개의 테이블에서 교집합을 조회한다.
  • 즉, 두 개의 테이블에서 공통된 값을 조회한다.
  • select majorno from student intersect select majorno from major;

2. NON-EQUI (비등가) 조인

  • NON-EQUI는 두 개의 테이블 간에 조인을 하는 경우, ''="을 사용하지 않고, >, <, ≥, ≤ 등을 사용한다.

OUTER JOIN

  • OUTER JOIN은 두 개의 테이블 간에 교집합(EQUI JOIN)을 조회하고, 한쪽 테이블에만 있는 데이터도 포함시켜 조회한다.
  • 이 때, 왼쪽에만 있는 행도 포함하면 LEFT OUTER JOIN이라고 하고, 오른쪽 테이블에만 있는 행만 포함시키면 RIGHT OUTER JOIN이라고 한다.
  • FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 모두 수행하는 것이다.
  • Oracle Databsee에서는 OUTER JOIN을 할 때, '(+)' 기호를 사용해서 할 수 있다.
    • SELECT * FROM STUDENT, MAJOR WHERE STUDENT.MAJORNO (+)= MAJOR.MAJORNO;
    • MAJOR 테이블에는 있지만, STUDENT 테이블에는 없는 정보도 조회된다.

CROSS JOIN

  • CROSS JOIN은 조인 조건구 없이 2개의 테이블을 하나로 조인한다.
  • 조인구가 없기 때문에 카테시안 곱이 발생한다.
  • 예를들어, 12개의 행이 있는 테이블과 행이 5개 있는 테이블을 조인하면 60(12*5) 개의 행이 조회된다.
  • CROSS JOIN은 FROM 절에 'CROSS JOIN' 구를 사용하면 된다.
    • select * from student cross join major;
    • select * from student, major;

UNION을 사용한 합집합 구현

  • UNION

    • UNION 연산은 두 개의 테이블을 하나로 만드는 연산이다.
    • 단, 두개의 테이블의 칼럼 수, 칼럼의 데이터 형식 모두가 일치해야 한다. 만약 둘 중 하나라도 다르다면 오류 발생!
    • UNION 연산은 두 개의 테이블을 하나로 합치면서 중복된 데이터를 제거한다.
    • 그래서 UNION은 정렬(SORT) 과정을 발생시킨다.
    • select majorno from student union select majorno from major;
  • UNION ALL

    • UNION과 달리 중복을 제거하거나 정렬을 유발하지 않는다.
    • select majorno from student union all select majorno from major;

차집합을 만드는 MINUS

  • MINUS 연산은 두 개의 테이블에서 차집합을 조회한다.
  • 즉, 선행하는 select 문에는 있고, 후행하는 select 문에는 없는 집합을 조회하는 것
  • MS-SQL에서 MINUS와 동일한 연산은 EXCEPT다.
728x90

'자격증 > SQL' 카테고리의 다른 글

[SQL 활용] Subquery(서브쿼리)  (0) 2021.03.10
[SQL 활용] 계층형 조회 (Connect by)  (0) 2021.03.10
[SQL] 연산자 쓰임 및 우선순위  (0) 2021.03.09
[SQL] 문자유형 비교 방법  (0) 2021.03.09
[SQL] 반정규화의 필요성  (0) 2021.03.09
Comments