Don't Panic
in DB ☕ 4분 읽기

[DB] JOIN, 서브쿼리

#DB
목차

JOIN이란?

  • 둘 이상의 테이블에서 데이터가 필요한 경우 테이블 조인이 필요하다.
  • 일반적으로 조인 조건을 포함하는 WHERE 절을 작성해야 한다.
  • 조인 조건은 일반적으로 각 테이블의 PK(기본키) 및 FK(외래키)로 구성된다.

JOIN 종류

  • INNER JOIN
  • OUTER JOIN
    1. LEFT OUTER JOIN
    2. RIGHT OUTER JOIN

조인 조건 명시에 따른 구분

  • NATURAL JOIN
  • CROSS JOIN (FULL JOIN, cartesian join)

JOIN 시 주의할 점

  • 조인 처리는 어느 테이블을 먼저 읽을지 결정하는 것이 중요하다. (처리할 작업량이 상당히 달라진다.)
  • INNER JOIN: 어느 테이블을 먼저 읽어도 결과가 달라지지 않으므로, MySQL 옵티마이저가 조인 순서를 조절해 다양한 방법으로 최적화를 수행할 수 있다.
  • OUTER JOIN: 반드시 OUTER가 되는 테이블을 먼저 읽어야 하므로 옵티마이저가 조인 순서를 선택할 수 없다.

조인 개념 설명 1

조인 개념 설명 2


JOIN의 종류

JOIN 종류 개요

INNER JOIN은 기본 디폴트 조인이다.

INNER JOIN 예제 1

INNER JOIN 예제 2

JOIN 예제 3

JOIN 예제 4

JOIN 예제 5

JOIN 예제 6 JOIN 예제 7 JOIN 예제 8 JOIN 예제 9 JOIN 예제 10


서브쿼리

  • 서브쿼리는 다른 쿼리 내부에 포함되어 있는 select문을 의미한다.
  • 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(메인쿼리), 서브쿼리를 내부쿼리라고 부른다.
  • 서브쿼리는 비교 연산자의 오른쪽에 기술해야 하며, 반드시 괄호로 감싸져 있어야 한다.

서브쿼리의 종류

  • 중첩 서브쿼리: WHERE 문 안에 작성하는 서브쿼리
    1. 단일행
    2. 복수(다중)행
    3. 다중컬럼
  • 인라인 뷰: FROM 문 안에 작성하는 서브쿼리
  • 스칼라 서브쿼리: SELECT 문 안에 작성하는 서브쿼리

서브쿼리 예제 1

물음표(?)에 해당하는 치환변수는 값에만 쓸 수 있으며, 연산을 하는 컬럼에는 쓸 수 없다.

서브쿼리 예제 2

서브쿼리 예제 3

서브쿼리 예제 4

JOIN의 경우 쿼리가 복잡해지거나 카테시안(cartesian)으로 인한 속도 저하가 올 수 있다. 조인이 무조건 빠른 것은 아니다.

참고: https://jojoldu.tistory.com/520

서브쿼리 예제 5

서브쿼리 예제 6

서브쿼리 예제 7

서브쿼리 예제 8

서브쿼리 예제 9

서브쿼리 예제 10

서브쿼리 예제 11

서브쿼리 예제 12

서브쿼리 예제 13


서브쿼리 종류 상세

인라인 뷰(Inline View)

  • FROM 절에 사용되는 서브쿼리를 인라인 뷰라 한다.
  • 서브쿼리가 FROM 절에 사용되면 뷰처럼 결과가 동적으로 생성된 테이블로 사용 가능하다.
  • 임시적인 뷰이기 때문에 데이터베이스에는 저장되지 않는다.
  • 동적으로 생성된 테이블이기 때문에 컬럼을 자유롭게 참조할 수 있다.

인라인 뷰 예제 1

인라인 뷰 예제 2

인라인 뷰 예제 3

인라인 뷰 예제 4

인라인 뷰 예제 5

인라인 뷰 예제 6

인라인 뷰 예제 7

인라인 뷰 예제 8

인라인 뷰 예제 9

인라인 뷰 예제 10