SQL JOIN 기본 가이드

유방현·2024년 10월 29일

SQL JOIN 기본 가이드

1. 카테시안 프로덕트 (CROSS JOIN)

-- 기본 구문
SELECT * FROM table1, table2;
-- 또는
SELECT * FROM table1 CROSS JOIN table2;
  • 두 테이블의 모든 행을 조합
  • 결과 행 수 = 테이블1 행 수 × 테이블2 행 수
  • 실무에서는 거의 사용하지 않음

2. INNER JOIN (내부 조인)

2.1 동등 조인 (Equi Join)

Equi Join은 동등(=) 연산자를 사용하여 두 테이블의 열이 동일한 값을 가질 때 데이터를 결합하는 조인 방식입니다.

-- WHERE 절 사용
SELECT e.empno, e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;

-- JOIN 키워드 사용
SELECT e.empno, e.ename, d.dname
FROM emp e
INNER JOIN dept d ON e.deptno = d.deptno;

-- USING 절 사용
// USING 절을 사용하면 두 테이블에 동일한 열 이름이 존재할 때 그 열 이름만 명시하여 조인을 수행할 수 있습니다.
SELECT e.empno, e.ename, d.dname
FROM emp e
JOIN dept d USING (deptno);

2.2 비동등 조인 (Non-Equi Join)

Non-Equi Join은 동등(=) 연산자가 아닌 다른 연산자(예: <, >, <=, >=, BETWEEN 등)를 사용하여 두 테이블의 열 간 조건을 설정하고 데이터를 결합하는 조인 방식입니다. Non-Equi Join은 일반적인 동등 조건이 아닌 범위 조건을 기반으로 데이터를 조인할 때 사용됩니다.

-- 급여 등급 조회 예제
SELECT e.empno, e.ename, e.sal, s.grade
FROM emp e
JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal;

3. 실무 활용 예제

3.1 다중 테이블 조인

-- 직원, 부서, 급여등급 조인
SELECT 
    e.empno, 
    e.ename, 
    d.dname AS 부서명,
    s.grade AS 급여등급,
    e.sal AS 기준급여,
    CASE
        WHEN s.grade = 1 THEN e.sal * 1.4
        WHEN s.grade = 2 THEN e.sal * 1.3
        WHEN s.grade = 3 THEN e.sal * 1.2
        ELSE e.sal
    END AS 인상급여
FROM emp e
JOIN dept d ON e.deptno = d.deptno
JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal;

3.2 조건 필터링

-- 2011년 입사자의 급여등급 조회
SELECT e.empno, e.ename, e.sal, s.grade
FROM emp e
JOIN salgrade s ON e.sal BETWEEN s.losal AND s.hisal
WHERE YEAR(e.hiredate) = 2011;

4. JOIN 작성 팁

4.1 테이블 별칭 사용

-- AS 키워드 사용
FROM emp AS e
JOIN dept AS d

-- AS 생략 가능
FROM emp e
JOIN dept d

4.2 최적화 고려사항

  1. 조인 순서

    • 작은 테이블을 먼저 조인
    • 필터링을 먼저 수행
  2. 인덱스 활용

    • 조인 컬럼에 인덱스 확인
    • 적절한 조인 조건 사용
  3. 조인 조건 주의사항

    • NULL 값 처리 고려
    • 데이터 타입 일치 확인

4.3 가독성 향상

  1. 적절한 들여쓰기 사용
  2. 의미 있는 별칭 사용
  3. 주석 활용
  4. 복잡한 조인은 임시 테이블 고려

0개의 댓글