1. INNER JOIN (교집합)
SELECT 출력할 열
FROM 기준 테이블
INNER JOIN 참조 테이블
ON 조인조건
(WHERE 검색조건)
**조인 조건**에 일치하는 행만 가져온다.
기준 테이블에 대한 발생 건수를 오른쪽 테이블에서 가져오는 방식
2. LEFT JOIN & RIGHT JOIN (합집합)
SELECT 출력할 열
FROM 기준 테이블
LEFT JOIN 참조 테이블
ON 조인조건
(WHERE 검색조건)
왼쪽의 모든 행을 조회한다.(기준테이블)
기준테이블에는 필드 값이 있는데 참조 테이블엔 없을 시 NULL값을 출력한다.
LEFT JOIN은 INNER JOIN과 같은 조회 결과를 보일 수 있는데
결과가 같을 때는 INNER JOIN이 성능면에서 낫다.
RIGHT JOIN은 LEFT JOIN과 별 다른 차이가 없이 오른쪽 테이블이 기준테이블이 된다.
3. (FULL)JOIN
양방향으로 JOIN하고 싶을 때 쓰인다.
null을 포함해 조회하는 것
4. CROSS JOIN
특정 기준 없이 가능한 두 테이블의 모든 경우의 수에 대한 결합을 결과로 보여준다.
CROSS JOIN의 결과 행의 수는 A테이블 행의 개수 X B테이블 행의 개수가 된다.
5. SELF JOIN
SELECT (as1).컬럼명, (as2).컬럼명
FROM 테이블1 as1, 테이블2 as2
WHERE as1.컬럼명 = as2.컬럼명
한개의 테이블에 가상으로 별칭을 부여하여
2개의 테이블인 것처럼 간주한 뒤 JOIN하는 것
별칭을 꼭 사용해줘야 한다.
이해를 위한 예제!
여기 * Employee이 존재한다.
+----+-----------+--------+
| ID | Name | Manager|
+----+-----------+--------+
| 1 | John | NULL |
| 2 | Alice | 1 |
| 3 | Bob | 1 |
| 4 | Carol | 2 |
| 5 | David | 3 |
+----+-----------+--------+
부서 관계를 파악하고 싶을 때 self join 사용 가능
John의 부하 직원을 찾고 싶다면 (John = ID 1)
SELECT E1.Name (as) Employee, E2.Name (as) Manager
FROM employees as E1
LEFT JOIN employees as E2 ON E1.Manager = E2.ID
WHERE E1.Manager IS NOT NULL; (상사가 있는 직원만 선택)
결과
+-----------+---------+
| Employee | Manager |
+-----------+---------+
| Alice | John |
| Bob | John |
| Carol | Alice |
| David | Bob |
+-----------+---------+
이처럼 계층구조 등을 파악할 때 사용할 수 있다.