TIL - 20260121

juni·2026년 1월 20일

TIL

목록 보기
245/316

0121 정보처리기사 필기 (8/N): 3과목 - JOIN과 서브쿼리


✅ 1. JOIN

  • JOIN은 두 개 이상의 테이블을 공통된 컬럼을 기준으로 논리적으로 연결하여, 하나의 결과 집합으로 만드는 관계형 데이터베이스의 핵심적인 연산입니다. 정규화를 통해 분리된 테이블들을 다시 합쳐서 의미 있는 데이터를 조회할 때 사용됩니다.

➕ 1-1. INNER JOIN (내부 조인)

  • 개념: 두 테이블을 연결할 때, 조인 조건에 일치하는 행들만을 결과에 포함시키는 가장 기본적인 조인 방식입니다.

  • 동작: ON 절에 명시된 조인 조건(e.g., EMP.DEPTNO = DEPT.DEPTNO)을 만족하는 데이터의 조합(교집합)만을 반환합니다.

  • 문법:

    SELECT E.ENAME, D.DNAME
    FROM EMP E
    INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
    
    -- INNER는 생략 가능
    SELECT E.ENAME, D.DNAME
    FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

➕ 1-2. OUTER JOIN (외부 조인)

  • 개념: INNER JOIN과 달리, 조인 조건에 일치하지 않는 행도 어느 한쪽 테이블을 기준으로 결과에 포함시키는 조인 방식입니다.

  • 목적: 기준이 되는 테이블의 모든 데이터를 보존하고 싶을 때 사용합니다. (e.g., 부서에 배정되지 않은 신입사원도 목록에 포함시키고 싶을 때)

  • 종류:

    • LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 기준으로, 오른쪽 테이블에 일치하는 데이터가 없으면 해당 컬럼을 NULL로 채워서 반환합니다.
    • RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 기준으로, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL로 채워서 반환합니다.
    • FULL OUTER JOIN: 양쪽 테이블의 모든 행을 기준으로, 어느 한쪽에 일치하는 데이터가 없으면 NULL로 채워서 반환합니다. (합집합)
    -- LEFT OUTER JOIN 예시: 부서가 없는 사원도 조회
    SELECT E.ENAME, D.DNAME
    FROM EMP E
    LEFT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

➕ 1-3. SELF JOIN (자체 조인)

  • 개념: 하나의 테이블을 별칭(Alias)을 사용하여 자기 자신과 조인하는 방식입니다.
  • 목적: 테이블 내에 계층적인 관계가 있을 때 사용됩니다.
  • 예시: 사원 테이블(EMP) 내에서, 각 사원의 이름과 그 사원의 관리자(사수) 이름을 함께 조회하고 싶을 때.
    -- 사원(E)과 관리자(M)로 별칭을 부여하여 SELF JOIN
    SELECT E.ENAME AS "사원명", M.ENAME AS "관리자명"
    FROM EMP E
    JOIN EMP M ON E.MGR = M.EMPNO; -- 사원의 관리자번호(MGR)와 관리자의 사원번호(EMPNO)를 조인

✅ 2. 서브쿼리 (Subquery)

  • 서브쿼리는 다른 SQL 문(SELECT, INSERT, UPDATE, DELETE) 내부에 포함된 SELECT 문으로, 복잡한 조회를 간결하게 만들어 줍니다. 괄호()로 감싸야 합니다.

➕ 2-1. 서브쿼리의 종류 (사용 위치에 따라)

위치종류설명반환 값 형태
SELECT스칼라 서브쿼리
(Scalar Subquery)
SELECT 목록에 포함되어, 외부 쿼리의 각 행에 대해 하나의 값을 반환.단일 값 (1행 1열)
FROM인라인 뷰
(Inline View)
• 서브쿼리의 결과를 하나의 가상 테이블처럼 사용.테이블 (다중 행, 다중 열)
WHERE, HAVING중첩 서브쿼리
(Nested Subquery)
• 조건절에서 비교 값으로 사용.
• 단일 행, 다중 행, 다중 열 등 다양한 형태 가능.
단일 행, 다중 행, 다중 열

➕ 2-2. 서브쿼리의 종류 (반환 행 수에 따라)

  • WHERE 절에서 사용되는 서브쿼리는 반환하는 행의 수에 따라 사용 가능한 연산자가 달라집니다.
종류설명사용 가능 연산자
단일 행 서브쿼리서브쿼리의 실행 결과가 하나의 행만 반환.=, >, <, >=, <=, <>
다중 행 서브쿼리서브쿼리의 실행 결과가 여러 개의 행을 반환.IN, ANY, ALL, EXISTS
  • 다중 행 연산자:
    • IN: 서브쿼리 결과 중 하나와 일치하면 TRUE.
    • ANY (또는 SOME): 서브쿼리 결과 중 하나라도 조건을 만족하면 TRUE. (e.g., > ANY는 최소값보다 크면 TRUE)
    • ALL: 서브쿼리 결과 모두를 만족하면 TRUE. (e.g., > ALL은 최대값보다 크면 TRUE)
    • EXISTS: 서브쿼리의 결과가 존재하면 TRUE. (결과값 자체는 중요하지 않음)
-- 단일 행 서브쿼리 예시: 'JONES'의 급여보다 많이 받는 사원
SELECT ENAME, SAL
FROM EMP
WHERE SAL > (SELECT SAL FROM EMP WHERE ENAME = 'JONES');

-- 다중 행 서브쿼리 예시: 30번 부서의 사원들과 동일한 직업을 가진 사원
SELECT ENAME, JOB
FROM EMP
WHERE JOB IN (SELECT JOB FROM EMP WHERE DEPTNO = 30);

📌 요약

  • JOIN여러 테이블을 합쳐서 데이터를 조회하는 수평적 확장 기법입니다.
  • INNER JOIN은 조건에 맞는 교집합 데이터만, OUTER JOIN기준 테이블의 모든 데이터를 포함하여 조회합니다.
  • 서브쿼리하나의 SQL 문 안에 포함된 또 다른 SQL 문으로, 복잡한 조건이나 가상의 테이블을 만드는 데 사용됩니다.
  • 서브쿼리는 사용되는 위치(SELECT, FROM, WHERE)와 반환하는 행의 수(단일 행, 다중 행)에 따라 종류가 나뉘며, 그에 맞는 연산자를 사용해야 합니다.

0개의 댓글