평소에 SKALA 팀원분들과 얘기를 할 때 컴공식 유머를 발휘하는데, 여기서 JOIN문이 자주 쓰인다..ㅎ
JOIN : 두 개 이상의 테이블을 연결하여 데이터를 조회
데이터베이스는 일반적으로 정규화를 통해 여러 테이블로 분리되므로, 데이터를 효과적으로 활용하기 위해서는 JOIN을 사용하여 테이블 간의 관계를 결합해야 한다.
[대표적인 SQL JOIN의 5가지 종류]
1. INNER JOIN
두 테이블에서 공통된 값이 있는 행만 반환한다. 일치하지 않는 데이터는 결과에서 제외된다.
(사용 예제)
SELECT A.id, A.name, B.order_id
FROM Customers A
INNER JOIN Orders B ON A.id = B.customer_id;
2. LEFT JOIN (LEFT OUTER JOIN)
왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환한다.
(사용 예제)
SELECT A.id, A.name, B.order_id
FROM Customers A
LEFT JOIN Orders B ON A.id = B.customer_id;
3. RIGHT JOIN (RIGHT OUTER JOIN)
오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블의 일치하는 데이터가 없으면 NULL을 반환한다.
(사용 예제)
SELECT A.id, A.name, B.order_id
FROM Customers A
RIGHT JOIN Orders B ON A.id = B.customer_id;
4. FULL OUTER JOIN
두 테이블의 모든 행을 반환하며, 일치하는 데이터가 없으면 NULL을 포함한다.
(일부 데이터베이스에서는 FULL OUTER JOIN을 지원하지 않을 수 있다)
(사용 예제)
SELECT A.id, A.name, B.order_id
FROM Customers A
FULL OUTER JOIN Orders B ON A.id = B.customer_id;
5. CROSS JOIN
두 테이블의 모든 행의 조합(카테시안 곱)을 반환한다.
ON 조건이 없으며, 두 테이블 간의 모든 가능한 조합이 생성된다.
(사용 예제)
SELECT A.name, B.product_name
FROM Customers A
CROSS JOIN Products B;
[JOIN 유형 및 성능 최적화 요약]
[JOIN 최적화 전략]
1. 인덱스(Index) 이용: 조인 조건에 사용되는 컬럼에 인덱스를 설정하면 성능이 향상된다
책에서 인덱스를 이용해 바로 찾듯이, FULL SCAN을 할 필요가 없다!
JOIN 쿼리에서 인덱스를 어떻게 쓰느냐에 따라 성능이 수십~수천 배 차이 날 수 있다
인덱스의 장점
✅ 조회 성능 향상 | Full Scan 없이 특정 레코드 탐색 가능 |
✅ 정렬 없이 ORDER BY 최적화 | 인덱스가 정렬되어 있어 별도 SORT 불필요 |
✅ 범위 검색에 강함 | BETWEEN, LIKE 'abc%' 조건 처리에 효율적 |
✅ JOIN 시 상대 테이블 탐색 속도 향상 | Nested Loops 방식에서 매우 중요 |
✅ 중복 방지 (UNIQUE 제약조건) | 유일성 보장도 인덱스로 처리 |
✅ GROUP BY, DISTINCT 최적화 | 인덱스 정렬 순서를 그대로 사용 가능 |
실전 팁
- JOIN 대상 컬럼에는 반드시 인덱스를 생성하자
- 자주 함께 쓰는 컬럼은 '결합 인덱스'로 관리하자
- 읽기 위주 시스템에서 인덱스는 필수!
2. 필요한 컬럼만 조회: SELECT * 대신 특정 컬럼을 지정하여 불필요한 데이터 로드를 줄인다
3. 적절한 조인 방식 선택: 데이터 구조와 조회 목적에 맞는 JOIN을 선택하면 성능을 최적화할 수 있다
SQL JOIN은 RDB에서 여러 테이블을 결합하여 유용한 데이터를 추출하는 중요한 기능이다. 각 JOIN의 특성을 이해하고, 데이터의 구조와 조회 목적에 맞게 적절한 조인을 선택하는 것이 중요하다. 이를 통해 데이터의 활용도를 높이고 효율적인 쿼리 성능을 유지할 수 있다!
INDEX 개념 부분 참고 및 출처: My Soulmate 연준님 velog https://velog.io/@bul0323/%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%87%BC%ED%95%91%EB%AA%B0-SQL-%ED%8A%9C%EB%8B%9D
연준님 감사합니다 ㅎ.ㅎ
'DBMS > 데이터베이스' 카테고리의 다른 글
[데이터베이스] DBMS → Data Warehouse → Data Mining 흐름 이해 (2) | 2025.04.15 |
---|---|
[데이터베이스] SQL 연습문제 (0) | 2025.02.06 |
[데이터베이스] 트랜잭션 개념과 관리 방안 수립 (0) | 2025.02.06 |
[데이터베이스] 대표적인 데이터 모델링 기법 4가지 (0) | 2025.02.06 |
[데이터베이스] 표준화 명세서와 정규화 과정 (0) | 2025.02.05 |