JOIN의 종류(INNER,LEFT&RIGHT,CROSS,SELF)

navelop·2023년 9월 20일
0

SQL

목록 보기
3/4
  • 이미지 출처: 벨로그 포스트

1. INNER JOIN (교집합)

SELECT 출력할 열
FROM 기준 테이블
INNER JOIN 참조 테이블
ON 조인조건
(WHERE 검색조건)

**조인 조건**에 일치하는 행만 가져온다. 
기준 테이블에 대한 발생 건수를 오른쪽 테이블에서 가져오는 방식

2. LEFT JOIN & RIGHT JOIN (합집합)

SELECT 출력할 열
FROM 기준 테이블
LEFT JOIN 참조 테이블
ON 조인조건
(WHERE 검색조건)
왼쪽의 모든 행을 조회한다.(기준테이블)
기준테이블에는 필드 값이 있는데 참조 테이블엔 없을 시 NULL값을 출력한다.

LEFT JOININNER JOIN과 같은 조회 결과를 보일 수 있는데
결과가 같을 때는 INNER JOIN이 성능면에서 낫다.

RIGHT JOINLEFT 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     |
+-----------+---------+

이처럼 계층구조 등을 파악할 때 사용할 수 있다.

0개의 댓글