[DB 심화] Join, SubQuery

Wonkyun Jung·2023년 4월 13일
1

데이터베이스

목록 보기
2/3
post-thumbnail

Join

Join?

  • 둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요

  • 일반적으로 조인 조건을 포함하는 WHERE 절을 작성해야 한다

  • 조인 조건은 일반적으로 각 테이블의 PK 및 FK로 구성된다


Join의 종류

  • INNER JOIN

  • OUTER JOIN

    • LEFT OUTER JOIN
    • RIGHT OUTER JOIN

Join 조건의 명시에 따른 구분

  • NATURAL JOIN
  • CROSS JOIN(FULL JOIN, CARTESIAN JOIN)

Join시 주의

  • 조인의 처리는 어느 테이블을 먼저 읽을지를 결정하는 것이 중요(처리할 작업량이 상당히 달라진다)

  • INNER JOIN: 어느 테이블을 먼저 읽어도 결과가 달라지지 않아 MySQL 옵티마이저가 조인의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있다

  • OUTER JOIN: 반드시 OUTER가 되는 테이블을 먼저 읽어야 하므로 옵티마이저가 조인 순서를 선택 할 수 없다


Join 의 필요성


INNER JOIN

INNER JOIN

  • 가장 일반적인 Join의 종류이며 교집합이다

  • 동등 조인이라고도 하며, N개의 테이블 조인 시 N-1개의 조인 조건이 필요함.

employees와 departments는 겹치는 column이 2개라서 natural join을 쓰면 안 된다


OUTER JOIN

Outer Join

  • LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분 됨

  • 어느 한쪽 테이블에는 데이터가 존재하는데 다른 쪽 테이블에는 데이터가 존재하지 않을 경우 그 데이터가 검색되지 않는 문제점을 해결하기 위해 사용

PK는 Null 이면 안 되지만 FK는 Null이어도 된다. FK가 Null인 사원이 존재하므로 inner join에서 그 값은 출력되지 않음


SELF, Non-Equi JOIN


SUBQUERY

서브쿼리(Subquery)

서브쿼리 요약

  • 서브 쿼리란 다른 쿼리 내부에 포함되어 있는 Select 문을 의미한다

  • 서브 쿼리를 포함하고 있는 쿼리를 외부 쿼리 또는 메인 쿼리라 부르며, 서브 쿼리는 내부 쿼리라고 부른다

  • 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호 '()'로 감싸져 있어야만 한다.

  • 서브 쿼리의 종류

    • 중첩 서브 쿼리(Nested Subquery) WHERE 문에 작성하는 서브 쿼리

    1. 단일 행

    2. 복수(다중)행

    3. 다중 컬럼


    • 인라인 뷰(inline view) - From 문에 작성하는 서브 쿼리
    • 스칼라 서브 쿼리(Scalar Subquery) - SELECT 문에 작성하는 서브 쿼리
  • 주의 사항

    • 서브 쿼리는 반드시 ()로 감싸야 한다
    • 서브 쿼리는 단일 행 또는 다중 행 비교 연산자와 함께 사용된다
  • 서브 쿼리가 사용이 가능한 곳

SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT 문의 VALUES, UPDATE문의 SET


NESTED SUBQUERY

서브 쿼리 종류


인라인 뷰 (Inline View)

  • From절에 사용되는 서브 쿼리를 인라인 뷰(Inline View)라 한다

  • 서브 쿼리가 From 절에 사용되면 뷰(view)처럼 결과가 동적으로 생성된 테이블로 사용 가능

  • 임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다

  • 동적으로 생성된 테이블이기 때문에 column을 자유롭게 참조 가능


스칼라 서브 쿼리 (Scalar SubQuery)


SubQuery 활용

0개의 댓글