SQL-JOIN

Sejin·2025년 6월 9일

Data, DB공부

목록 보기
25/26

JOIN 개념

예제 테이블

JOIN은 데이터의 통합 조회를 위해 여러 테이블을 연결하는 SQL 연산임

실제 JOIN 연산은 일반적으로 두 개의 테이블에 대해서만 적용됨

일반적으로 JOIN은 기본 키(Primary Key, PK)와
외래 키(Foreign Key, FK) 간의 연관에 의해 성립됨

JOIN은 PK와 FK의 관계 외에도, 논리적인 값들의 연관성만으로도 성립할 수 있음

  • 예) 특정 조건을 만족하는 두 테이블 간의 관계를 기반으로 조인할 수 있음

JOIN의 일반적인 예

  • EMP와 DEPT 테이블을 조인하여 두 테이블의 데이터를 조회함
  • WHERE 절을 통해 조인의 조건(EMP.부서번호 = DEPT.부서번호)을 설정함
SELECT 직원이름, 부서이름, EMP.부서번호
FROM   EMP, DEPT
WHERE  EMP.부서번호 = DEPT.부서번호;

JOIN의 유형

  • EQUI JOIN / NON-EQUI JOIN
  • 암시적 조인 / 명시적 조인
  • INNER JOIN / OUTER JOIN / CROSS JOIN/ SELF JOIN

EQUI JOIN(동등 조인)

조인 조건으로 EQUL(=) 연산 사용

  • 중복 칼럼의 경우, 칼럼명 앞에 테이블명을 붙여야함
  • 중복되지 않는 칼럼도 칼럼명 앞에 테이블명을 붙이는 것을 권장함

기본 조인 방식

  • EMP와 DEPT 테이블을 조인하여 두 테이블의 데이터를 조회함
  • WHERE 절을 통해 조인의 조건(EMP.부서번호 = DEPT.부서번호)을 설정함

ALIAS 활용

  • 테이블에 별칭(E와 D)을 지정하여 간결하게 작성함
  • 컬럼 이름 앞에 테이블 별칭을 붙임으로써 모호성을 방지함
  • 별칭은 쿼리를 간결하고 가독성 있게 만듦

접두어 생략 -> 모호성 문제

  • 직원이름과 부서이름이 어느 테이블에 속하는지 명확히 지정하지 않아 모호성 문제가 발생할 수 있음

문법 오류

FROM 절에서 ALIAS 정의 후에는 WHERE/SELECT 절에서 원본 테이블명 사용이 불가함


NON-EQUI JOIN(비동등 조인)

  • 조인 조건으로 EQUL(=) 이외의 연산 사용

예) EMP 테이블과 SALGRADE 테이블에서 직원이름, 급여, 급여등급을 조회함

  • EMP 테이블과 SALGRADE 테이블을 연결하는 칼럼이 존재하지 않음
  • EMP 테이블의 급여가 SALGRADE 테이블의 최저급여와 최고급여 사이에 있을 때 해당 직원의 이름, 급여 및 급여 등급을 조회함


INNER JOIN(내부 조인)

  • 두 테이블에서 조건에 맞는 행만 반환함

  • 기본적으로 사용되는 조인 방식으로, "INNER"를 생략할 수 있음 (INNER JOIN과 JOIN은 동일)

  • 조인의 조건을 명시하여 어떤 컬럼을 기준으로 테이블을 결합할지를 정의함

암시적 조인

  • 조인 조건(E.부서번호 = D.부서번호)과 일반 조건(E.급여 > 2000)이 WHERE 절에 혼용되어 가독성이 떨어짐

  • 조건이 많아질수록 조인과 필터링 조건을 구분하기 어려워 복잡한 쿼리에서 실수할 가능성이 높음

명시적 조인

  • 조인 조건은 ON 절에, 일반 조건은 WHERE 절에 분리하여 기술함

  • 가독성이 높아지고 의도를 명확히 표현할 수 있음

  • 대부분의 DBMS는 명시적 조인을 표준으로 채택함


다양한 조인 방식

NATURAL JOIN(자연 조인)

  • INNER JOIN의 특수한 경우

  • 두 테이블 간 동일한 이름을 가진 모든 컬럼을 기준으로 EQUI JOIN을 수행하며, 별도의 조인 컬럼 및 조건을 지정할 수 없음

주의 사항

  1. 조인 대상 컬럼의 이름과 데이터 타입이 완전히 동일해야 함
  2. 조인의 대상이 되는 컬럼에는(테이블 이름 또는 별칭)을 사용할 수 없음

예시: NATURAL JOIN과 동일한 출력의 INNER JOIN 작성

  • NATURAL JOIN
  • INNER JOIN

NATURAL JOIN과 INNER 조인 비교(칼럼 출력 순서 및 칼럼 개수)


SQL 조인 조건절

ON 조건절(명시적 JOIN)

  • 조인 조건은 ON 절에 기술하며 ON 절의 괄호는 생략 가능함

  • JOIN과 무관한 일반 조건은 WHERE 절에 기술함

예시: 직원이름에 '이'가 포함된 직원의 직원이름, 부서번호, 부서이름 출력

암시적 JOIN

  • 모든 조건을 WHERE 절에 기술하는 기존 방식의 JOIN

  • 조인 조건과 일반 조건이 혼재되어 가독성이 떨어짐

  • 조인 대상 테이블을 쉼표로 나열함

예시: 직원이름에 '이'가 포함된 사원의 사원이름, 부서코드, 부서명 출력

USING 조건절

  • ON 절의 "=" 연산자를 대신하여 사용하며, 두 테이블 간 동일한 이름을 가진 컬럼을 조인 기준으로 사용함

  • 괄호 생략이 불가함

  • 조인 대상 컬럼에는 접두사(테이블 이름 또는 별칭)를 사용할 수 없음

    예시



OUTER 조인(외부 조인)

  • 두 테이블 간의 조인에서 서로 대응되지 않는 행도 포함하여 출력하는 조인 방식

  • 조건절이 필수적으로 필요하며, 조인의 기준을 명시해야 함

  • 조건에 맞지 않는 데이터도 출력되며, 해당 부분은 NULL로 채워짐

주의사항
OUTER JOIN은 대응되지 않는 데이터를 포함하는 데 유용하지만, 성능에 영향을 줄 수 있으므로 신중히 사용해야 함

LEFT OUTER JOIN

  • 왼쪽 테이블의 모든 행을 출력함

  • 대응되지 않는 오른쪽 테이블의 데이터는 NULL로 표시함

예시

  • EMP 테이블의 모든 데이터를 표시
  • EMP의 부서번호가 DEPT에 없는 경우, 부서이름은 NULL로 표시

RIGHT OUTER JOIN

  • 테이블의 모든 행을 출력함

  • 대응되지 않는 왼쪽 테이블의 데이터는 NULL로 표시함

예시

  • DEPT 테이블의 모든 데이터를 표시
  • DEPT의 부서번호에 대응되는 EMP 데이터가 없는 경우, 직원이름과 부서번호는 NULL로 표시

FULL OUTER JOIN

  • 두 테이블에서 모든 행을 출력 함
  • 대응되지 않는 데이터는 NULL로 표시함

예시

  • EMP와 DPET의 모든 데이터를 표시
  • EMP와 DEPT에 대응되지 않는 데이터는 NULL로 표시


CROSS JOIN(교차 조인)

CROSS JOIN은 두 테이블의 모든 가능한 조합(곱집합)을 출력함

조인 조건이 없고, 각 테이블의 모든 행을 결합하여 결과를 만듦

두 테이블에 행이 각각 m과 n개일 경우
CROSS JOIN의 결과에서 출력되는 행의 개수는 m x n 개임

두 테이블에 열이 각각 m과 n개일 경우
CROSS JOIN의 결과에서 출력되는 열의 개수는 m + n개임

Q . 다음 질의의 결과로 출력되는 행과 열의 수는?


SELF JOIN(셀프 조인)

동일 테이블 사이의 조인으로 FROM 절에 동일 테이블 두 번 이상 나타남

  • FROM 절에서 동일 테이블을 두 번 이상 사용하므로, 두 테이블은 구분할 수 있도록 ALIAS를 사용해야 함

  • 두 번 사용된 테이블은 개념적으로 서로 다른 테이블처럼 동작함

예시: SELF JOIN을 하여 직원과 관리자를 연결함


기타 SQL 기능

계층형 질의

계층적 데이터

동일 테이블 내에서 상위와 하위 데이터가 계층적으로 포함된 구조

데이터베이스 설계에서 자기 참조(Self-Referencing) 관계가 발생할 수 있음

순환 관계 모델

하나의 데이터 항목이 다른 데이터 항목과 부모-자식 관계를 가지며 순환적으로 연결되는 모델

에) 관리자를 부모로, 직원을 자식으로 연결
A가 B의 상위, B가 A의 하위가 되는 관계

계층적 데이터 접근 방법

계층형 질의를 사용하여 데이터에 접근함

순방향 계층형 질의
상위->하위로 데이터 탐색

역방향 계층형 질의
하위->상위로 데이터 탐색

순방향 계층형 질의(Forward Hierarchical Query)

계층 구조에서 상위 항목(부모)을 기준으로 하위 항목(자식)을 찾는 질의 방식

  • 부모-자식 관계가 명확히 정의되어 있어야 함

  • 부모에서 자식으로 데이터를 조회함

  • 계층적 구조를 따라 순차적으로 데이터를 탐색함

형식

예시
관리자가 null인 내용을 시작점으로 해서, 해당 직원 조회


관리자(6566, 6698, 6782)를 시작점으로 그 하위 직원들을 계층적으로 탐색하여 출력

역방향 계층형 질의(Reverse Hierarchical Query)

계층 구조에서 하위 항복(자식)을 기준으로 상위 항목(부모)을 찾는 질의

계층 구조에서 상위 데이터로 거슬러 올라가는 접근 방식

예) 직원-관리자 관계에서 특정 직원의 상위 관리자를 조회할 때 사용

형식

예시
직원번호가 (6566, 6698, 6782)인 직원을시작점으로 해서 해당 직원의 관리자 조회


직원번호가 6839인 내용을 시작점으로 해서 해당 직원의 관리자 조회


집합 연산자

여러 SELECT 문의 결과를 하나로 결합하기 위해 사용됨

집합 연산의 조건
1. 칼럼 수 동일

  • 두 SELECT 문에서 SELECT 절의 칼럼 개수가 동일해야 함

2. 데이터 타입 호환성

  • SELECT 절에서 동일 위치에 있느 칼럼 간 데이터 타입이 호환 가능해야 함

질의 예

집합 연산은 둘 이상의 SELECT 문을 결합하는 것

ORDER BY는 집합 연산을 적용한 최종 결과에 대한 정렬

맨 마지막 줄에 한번만 기술함

profile
Sejin's Journey for Developers

0개의 댓글