SQL - Join문

Quro·2024년 7월 15일
0

Database

목록 보기
2/2
post-thumbnail

Join이란?

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

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

Join문은 여러 종류가 있는데, 하나씩 특징을 살펴보자.

Implicit join

  • from 절에는 table들만 나열하고 where절에 join condition을 명시하는 방식
  • 예전 방식의 join 문법
  • 복잡해질수록 실수할 가능성이 높다
SELECT D.name 
FROM employee AS E, department AS D 
WHERE E.id = 1 and E.dept_id = D.id;

Explicit join

  • from 절에 JOIN 키워드와 함께 joined table들을 명시하는 방식
  • from 절에서 ON 뒤에 join condition이 명시된다
  • 복잡한 join 쿼리 작성 중에도 실수할 가능성이 적다
SELECT D.name
FROM employee AS E JOIN department AS D ON E.dept_id = D.id
WHERE E.id = 1;

Inner join(join)

  • 그냥 JOIN 으로 사용가능(INNER 생략 가능)
  • 두 table에서 join condition을 만족하는 tuple들로 result table(결과 테이블)을 만드는 join
  • join condition에 사용 가능 연산자 : =, <, >, ≠ 등 여러 비교 연산자 가능
  • join condition에서 null 값을 가지는 tuple은 result table에 포함되지 않는다
SELECT *
FROM employee E INNER JOIN department D on E.dept_id = D.id;

Outer join

  • LEFT, RIGHT, FULL OUTER JOIN 이 존재(OUTER 생략 가능)
    • LEFT JOIN
      • 왼쪽 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함
    • RIGHT JOIN
      • 오른쪽 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함
    • FULL JOIN (mysql에서는 지원X)
      • 두 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함하는 join

Using

  • USING 키워드를 사용하여 동일한 이름을 갖는 열에 대해 조인을 수행하는 방식
  • ON 절과 같은 결과를 만들지만, 동일한 이름을 갖는 열을 명시적으로 사용할 수 있음
SELECT *
FROM employee AS E JOIN department AS D USING (dept_id);

Natural join

  • 두 테이블 간 동일한 이름을 갖는 모든 열을 기준으로 조인하는 방식
  • NATURAL JOIN은 동일한 이름을 갖는 열을 자동으로 인식하여 조인
  • 열 이름이 동일하지 않으면 자연 조인을 사용할 수 없음
SELECT *
FROM employee AS E NATURAL JOIN department AS D;

Cross join

  • 두 테이블 간의 모든 조합을 반환하는 조인 방식
  • 조인 조건이 없기 때문에 카테시안 곱(Cartesian Product)라고도 함
  • 조인 결과가 매우 클 수 있음
SELECT *
FROM employee AS E CROSS JOIN department AS D;

Join 종류 요약

  • Implicit join: WHERE 절을 사용하여 조인 조건을 명시
  • Explicit join: JOIN 키워드를 사용하여 조인 조건을 명시
  • Inner join: 두 테이블 간 조인 조건을 만족하는 튜플만 반환
  • Outer join: 조인 조건을 만족하지 않는 튜플도 포함
    • LEFT JOIN: 왼쪽 테이블의 모든 튜플 포함
    • RIGHT JOIN: 오른쪽 테이블의 모든 튜플 포함
    • FULL JOIN: 두 테이블의 모든 튜플 포함
  • Using: 동일한 이름을 갖는 열을 기준으로 조인
  • Natural join: 동일한 이름을 갖는 모든 열을 기준으로 조인
  • Cross join: 두 테이블의 모든 조합을 반환
profile
개발합니다

0개의 댓글