▒ 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 B (어떤 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
;