🔥 1. JOIN이란?

관계형 데이터베이스(RDBMS)에서는 정규화를 통해 데이터를 여러 테이블로 분리하여 관리합니다.
하지만 분리된 테이블의 데이터를 하나의 쿼리로 가져오기 위해서는 JOIN 연산이 필요합니다.


🔥 2. JOIN 종류

JOIN 유형설명
CROSS JOIN두 테이블의 모든 행의 조합을 반환 (Cartesian Product)
INNER JOIN두 테이블에서 공통된 값이 존재하는 행만 반환
LEFT JOIN왼쪽 테이블의 모든 행을 반환하며, 오른쪽 테이블에 없는 데이터는 NULL
RIGHT JOIN오른쪽 테이블의 모든 행을 반환하며, 왼쪽 테이블에 없는 데이터는 NULL

🔥 3. CROSS JOIN (교차 결합)

📌 "모든 조합을 생성"

  • 두 테이블의 모든 행을 서로 결합하여 반환
  • 테이블 A의 행 수 × 테이블 B의 행 수만큼 결과가 나옴
  • 데이터 수가 많으면 비효율적이므로 거의 사용되지 않음.

예제: CROSS JOIN

-- 테스트 테이블 생성
CREATE TABLE testA ( a INTEGER );
CREATE TABLE testB ( b VARCHAR(10) );

-- 데이터 삽입
INSERT INTO testA VALUES(1);
INSERT INTO testA VALUES(2);
INSERT INTO testA VALUES(3);

INSERT INTO testB VALUES('A');
INSERT INTO testB VALUES('B');
INSERT INTO testB VALUES('C');

-- CROSS JOIN 실행
SELECT *
FROM testA
CROSS JOIN testB;

-- 동일한 결과를 얻을 수 있음
SELECT *
FROM testA, testB;

결과
| a | b |
|----|----|
| 1 | A |
| 1 | B |
| 1 | C |
| 2 | A |
| 2 | B |
| 2 | C |
| 3 | A |
| 3 | B |
| 3 | C |


🔥 4. INNER JOIN (내부 결합)

📌 "두 개의 테이블에서 공통된 값이 존재하는 행만 반환"

  • ON 조건에 해당하는 값이 양쪽 테이블에 존재해야 출력됨
  • 가장 자주 사용되는 JOIN 유형

예제: INNER JOIN

USE BaseballData;

-- INNER JOIN 실행
SELECT *
FROM players AS p
INNER JOIN salaries AS s
ON p.playerID = s.playerID;

결과

  • playerssalaries 테이블에서 playerID공통으로 존재하는 데이터만 결합
  • salaries에 해당하는 데이터가 없는 playerID는 제외됨

🔥 5. LEFT JOIN (왼쪽 외부 결합)

📌 "왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에 없는 데이터는 NULL"

  • ON 조건이 일치하는 데이터는 JOIN되고,
  • 오른쪽 테이블에 데이터가 없으면 NULL로 표시됨

예제: LEFT JOIN

SELECT *
FROM players AS p
LEFT JOIN salaries AS s
ON p.playerID = s.playerID;

결과

  • players 테이블에 있는 모든 playerID를 포함
  • salaries 테이블에 해당 데이터가 없으면 NULL 반환

🔥 6. RIGHT JOIN (오른쪽 외부 결합)

📌 "오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에 없는 데이터는 NULL"

  • ON 조건이 일치하는 데이터는 JOIN되고,
  • 왼쪽 테이블에 데이터가 없으면 NULL로 표시됨

예제: RIGHT JOIN

SELECT *
FROM players AS p
RIGHT JOIN salaries AS s
ON p.playerID = s.playerID;

결과

  • salaries 테이블에 있는 모든 playerID를 포함
  • players 테이블에 해당 데이터가 없으면 NULL 반환

🔥 7. JOIN 비교 요약

JOIN 유형결과
CROSS JOIN두 테이블의 모든 행 조합 (카르테시안 곱)
INNER JOIN공통된 값이 존재하는 행만 반환
LEFT JOIN왼쪽 테이블의 모든 행 반환, 오른쪽 테이블 값이 없으면 NULL
RIGHT JOIN오른쪽 테이블의 모든 행 반환, 왼쪽 테이블 값이 없으면 NULL

🔥 8. JOIN을 사용할 때 고려할 점

1) 조인 조건을 명확하게 설정해야 함

  • ON 절을 명확하게 지정하지 않으면 의도하지 않은 결과가 나올 수 있음
    2) 필요하지 않은 JOIN을 남발하면 성능이 저하될 수 있음
  • 불필요한 조인은 데이터 처리 속도를 저하시킬 수 있음
    3) CROSS JOIN은 신중하게 사용해야 함
  • 데이터 양이 많을 경우 연산량이 기하급수적으로 증가

🎯 JOIN을 사용할 때 고려해야 할 점

INNER JOIN → 두 테이블의 공통 데이터를 가져올 때
LEFT JOIN → 기준이 되는 테이블을 기준으로 데이터를 조회할 때
RIGHT JOIN → 기준이 되는 테이블이 오른쪽에 있을 때
CROSS JOIN → 모든 조합을 필요로 하는 경우 (거의 사용하지 않음)

📌 "실제 프로젝트에서는 INNER JOIN과 LEFT JOIN이 가장 많이 사용됨!"
JOIN과 INDEX를 함께 활용하면 검색 속도를 더욱 최적화할 수 있음 😊

profile
李家네_공부방

0개의 댓글