ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [DB] SQL - JOIN문, JOIN 종류 (Inner Join,Natural Join,Outer Join,Cross Join)
    CS 2021. 8. 9. 04:33

    1. Join이란?

    두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법

    두 개의 테이블을 마치 하나의 테이블인 것처럼 보여준다.

     

    2. 기본 구조

    1) 일반
    SELECT 테이블.컬럼, 테이블.컬럼
    FROM 테이블1,테이블2           
    WHERE 조건

    3. Join 의 종류

    • Inner Join
    • Natural Join
    • Outer Join
      • Left Join
      • Right Join
    • Cross Join

     

     

    내부 조인 (Inner Join)

    1)
    SELECT 조회할 컬럼
    FROM 테이블1, 테이블2
    [WHERE 조건문]
    
    
    2)
    SELECT 조회할 컬럼
    FROM 테이블1
    (INNER) JOIN 테이블2
    ON 테이블1.컬럼 = 테이블2.컬럼
    [WHERE 추가조건]
    • 기준 테이블과 조인 테이블 모두에 조인 컬럼 데이터가 존재해야 조회됨 (ON절)
    • 예시
      SELECT Sales.*, Countries.Country
      FROM Sales
      JOIN Countries
      ON Sales.CountryID = Countries.ID

     

     

    ② 자연 조인 (Natural Join)

    SELECT 조회할 컬럼
    FROM 테이블1
    NATURAL JOIN 테이블2
    [WHERE 조건문]
    • 내부 조인에 속함.
    • 두 테이블에서 동일한 컬럼명을 갖는 컬럼은 모두 조인이 된다. 
    • 두 테이블이 동시에 가지고 있는 컬럼의 값이 전부 같은 것만 골라냄
      -> 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요함. 이름이 같지만 타입이 다른 컬럼이 있으면 에러
    • 기준 테이블과 조인 테이블 모두에 데이터가 존재해야 조회됨
    • Inner Join에서 조건문 추가하여 같은 결과값을 얻을 수 있음
    • 예시

    SELECT *
    FROM R
    NATURAL JOIN S

     

    • 같은 컬럼이 두개일 경우

     

     

    ③  전체 외부 조인 (Full Outer Join)

    SELECT 조회할 컬럼
    FROM 테이블1 
    FULL OUTER JOIN 테이블2
    ON 조건문
    [WHERE 추가조건문]
    • 공통된 부분만 골라 결합하는 Inner Join 과 다르게 공통되지 않은 행도 유지한다.
    • 이때 두 테이블 모두의 값을 유지하면 Full Outer Join
      왼쪽 테이블 값만 유지하면 Left Outer Join
      오른쪽 테이블 값만 유지하면 Right Outer Join
    • MySQL에서는 FULL OUTER JOIN을 지원하지 않으므로 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN결과를 UNION 하여 사용해야 함
    • 예시
      SELECT *
      FROM instructor
      FULL OUTER JOIN teaches 
      ON instructor.id = teaches.id

     

     

    ④ Left Outer Join

    SELECT 조회할 컬럼
    FROM 기준테이블1 
    LEFT OUTER JOIN 테이블2
    ON 조건문
    [WHERE 추가조건문]
    • Left Join = Left Outer Join
    • 왼쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐.
    • 예시
      SELECT *
      FROM instructor
      LEFT OUTER JOIN teaches 
      ON instructor.id = teaches.id

     

    ⑤ Right Join

    SELECT 조회할 컬럼
    FROM 테이블1 
    RIGHT OUTER JOIN 기준테이블2
    ON 조건문
    [WHERE 추가조건문]
    • Right Join = Right Outer Join
    • 오른쪽 테이블을 기준으로 일치하는 행만 결합되고, 일치하지 않는 부분은 null 값으로 채워짐.
    • 예시

      SELECT *
      FROM instructor
      RIGHT OUTER JOIN teaches 
      ON instructor.id = teaches.id

     

     

     

    ⑥ Cross Join

    1)
    SELECT 조회할컬럼
    FROM 테이블1, 테이블2
    
    2)
    SELECT 조회할컬럼
    FROM 테이블1
    JOIN 테이블2
    
    3)
    SELECT 조회할컬럼
    FROM 테이블1
    CROSS JOIN 테이블2
    • 곱집합
    • 두 테이블 데이터의 모든 조합
    • 테이블1의 row * 테이블2의 row 개수만큼의 row를 가진 테이블 생성

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    'CS' 카테고리의 다른 글

    [OS] Interrupt 인터럽트란?  (1) 2021.08.15
    [Network] TCP/IP 흐름제어 & 혼잡제어  (1) 2021.07.26
    [OS] 페이지 교체 알고리즘 - FIFO/LRU/LFU/MFU/NUR  (3) 2021.07.18
    [DB] SQL 인젝션 (SQL Injection )  (1) 2021.07.10
    [NETWORK] TCP와 UDP  (1) 2021.07.02

    댓글

Maybe a whole cake ? 🎂 HAHA!