본문 바로가기

Tool & DB/MySQL

[mySQL] JOIN 개념 정리

▒ JOIN 개념 정리

1_기본개념

  • 둘 이상의 테이블을 연결하여 데이터를 검색하는 기능
  • JOIN의 방식은 크게  가지로 나뉜다(Equi, Non Equi, Self JOIN)
  • 보통 외래키를 사용해 두 테이블을 JOIN하나, 외래키가 아니더라도 조인가능
  • 여러 테이블을 연결하여 하나의 결과로 출력하기에 관계형 데이터베이스라 부른다.

2_Non Equi Join(= CROSS JOIN)

  • 조인되는 두 테이블로 곱집합을 생성
  • 공통점이 없는 두 테이블의 모든 데이터를 생성하기 위하여 사용한다
    이는 Cartesian Product(카테시안 곱, 데카르트 곱)이라고도 칭함
  • 공통된 필드가 없으므로 등호(=)연산자를 사용하지 않는다
SELECT  *  FROM  A  CROSS JOIN B;
  혹은
SELECT  *  FROM  A, B; (CROSS JOIN을 생략하고 ','로 연결)

3_Equi JOIN

  • 두 테이블을 결합할 수 있는 조건식을 작성하여 JOIN하는 방법(통상 Foreign key를 조건으로 사용함)
  • (1). 조건식을 만족하는 데이터가 존재하는 행만을 출력하는 INNER JOIN
    (2). 조건식을 만족하는 데이터가 존재하지 않는 행도 항상 출력하는 OUTER JOIN이 있다
  • 공통된 값을 배교할 때, WHERE절을 이용하지 않는 방법을 ANSI JOIN이라 부른다.
    => ANSI JOIN은 DB 공통 문법이라 모든 DBMS에서 사용 가능함
SELECT  *  FROM 
  1. A a INNER JOIN B b ON a.field = b.field
  2. A a ,B b ON a.key = b.key
  2. A JOIN B USING (공통 field명)
  3. A NATURAL JOIN(어떤 key로 합치는지 명시성이 떨어져서 잘 사용하지 않음)

3-1_INNER JOIN

  • JOIN된 테이블들 사이에서 조건을 만족하는 데이터가 있는 행만을 출력하는 방식
    가장 흔하고 일반적인 JOIN 결합 형태
  • INNER를 생략하고 JOIN만 쓰고 조건 ON을 붙여줘도 된다
    (ON이 없으면 CROSS JOIN과 같음)
  • 조건에서 비교하고자 하는 field가 같다면 USING(공통된 field명)
  • 그 외에는 ON절에 조건을 작성한다
  • NATURAL JOIN은 조건절 없이도 같은 이름을 가지는 field를 찾아서 자동으로 JOIN하나, 어떤 field를 기준하여 JOIN되는지 직관성이 떨어져서 잘 사용하지 않는다

3-2_OUTTER JOIN

  • JOIN된 테이블들 사이에서 조건을 만족하지 않는 행도 출력하는 방식
  • (1). LEFT JOIN : 조건과 무관하게 왼쪽 테이블의 모든 행을 출력하는 방식
    (2). RIGHT JOIN : 조건과 무관하게 오른쪽 테이블의 모든 행을 출력하는 방식
    (3). FULL OUTER JOIN : mySQL에서는 사용되지 않으며 UNION으로 합집합 출력 가능

2_SELF JOIN

  • 기능은 Equi JOIN과 같지만 하나의 테이블에서 JOIN이 일어난다는 점이 다르다
  • 같은 테이블에 대해 두 개의 as(alias)를 사용하여 FROM절에서 두 개의 테이블을 사용하는 것 처럼 기능하게한다 
SELECT * FROM
  A as a, A as b   // 하나의 테이블을 as로 구분하여 두 개의 테이블처럼 사용
  WHERE a.field = b.field
  ;