TIL - 20260111

juni·2026년 1월 11일

TIL

목록 보기
235/316

0111 SQLD 학습 (8/10): 2과목 - SQL 활용


✅ 1. JOIN

  • JOIN은 두 개 이상의 테이블을 공통된 컬럼을 기준으로 논리적으로 연결하여, 하나의 결과 집합으로 만드는 관계형 데이터베이스의 핵심적인 연산입니다.
JOIN 종류설명특징
INNER JOIN
(내부 조인)
• 두 테이블에 모두 일치하는 데이터만 반환.
JOIN 키워드만 사용하면 기본적으로 INNER JOIN으로 동작.
• 가장 일반적인 조인.
ON 절에 조인 조건을 명시.
OUTER JOIN
(외부 조인)
• 한쪽 테이블에는 데이터가 있고 다른 쪽에는 없을 때도 결과를 반환.
LEFT: 왼쪽 테이블 기준, 오른쪽은 NULL 처리.
RIGHT: 오른쪽 테이블 기준, 왼쪽은 NULL 처리.
FULL: 양쪽 모두 기준, 없는 쪽은 NULL 처리.
• 기준이 되는 테이블의 모든 데이터를 보존하고 싶을 때 사용.
CROSS JOIN
(교차 조인)
• 두 테이블의 모든 행을 조합하여 반환. (곱집합, Cartesian Product)
FROM TABLE1, TABLE2 와 같이 조인 조건 없이 나열하면 발생.
• M:N 관계를 만들거나, 테스트 데이터를 생성할 때 외에는 거의 사용하지 않음.
SELF JOIN
(자체 조인)
• 하나의 테이블을 별칭(Alias)을 통해 자기 자신과 조인.
• 테이블 내에 계층적인 관계가 있을 때 사용.
EMP 테이블에서 사원과 관리자(사수)의 관계를 조회할 때.
-- INNER JOIN 예시: 사원(EMP)과 부서(DEPT) 테이블 조인
SELECT E.ENAME, D.DNAME
FROM EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

-- LEFT OUTER JOIN 예시: 부서에 배정되지 않은 사원도 함께 조회
SELECT E.ENAME, D.DNAME
FROM EMP E
LEFT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

✅ 2. 서브쿼리 (Subquery)

  • 서브쿼리는 다른 SQL 문(SELECT, INSERT, UPDATE, DELETE) 내부에 포함된 SELECT 문으로, 복잡한 조회를 간결하게 만들어 줍니다. 괄호()로 감싸야 합니다.
위치종류설명반환 값 형태
SELECT스칼라 서브쿼리
(Scalar Subquery)
SELECT 목록에 포함되어, 외부 쿼리의 각 행에 대해 하나의 값을 반환.단일 값 (1행 1열)
FROM인라인 뷰
(Inline View)
• 서브쿼리의 결과를 하나의 가상 테이블처럼 사용.테이블 (다중 행, 다중 열)
WHERE, HAVING중첩 서브쿼리
(Nested Subquery)
• 조건절에서 비교 값으로 사용.
• 단일 행, 다중 행, 다중 열 등 다양한 형태 가능.
단일 행, 다중 행, 다중 열
-- 스칼라 서브쿼리 예시: 각 사원의 부서명을 조회
SELECT ENAME,
       (SELECT DNAME FROM DEPT D WHERE E.DEPTNO = D.DEPTNO) AS DNAME
FROM EMP E;

-- 인라인 뷰 예시: 부서별 평균 급여보다 많이 받는 사원 조회
SELECT E.ENAME, E.SAL
FROM EMP E, (SELECT DEPTNO, AVG(SAL) AS AVG_SAL FROM EMP GROUP BY DEPTNO) D
WHERE E.DEPTNO = D.DEPTNO AND E.SAL > D.AVG_SAL;

-- 중첩 서브쿼리 예시: 'JONES'와 동일한 직업을 가진 사원 조회
SELECT ENAME, JOB
FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'JONES');
  • 연관/비연관 서브쿼리:
    • 비연관(Non-correlated): 외부 쿼리와 독립적으로 한 번만 실행되어 그 결과를 외부 쿼리에 전달.
    • 연관(Correlated): 외부 쿼리의 각 행마다 반복적으로 실행되어 성능에 영향을 줄 수 있음. (외부 쿼리의 컬럼을 내부에서 참조)

✅ 3. 집합 연산자 (Set Operators)

  • 두 개 이상의 SELECT 문의 결과 집합(Result Set)을 하나로 합치거나 비교합니다.
  • 규칙: 두 결과 집합의 컬럼 수와 데이터 타입이 순서대로 일치해야 합니다.
연산자설명중복 처리
UNION두 결과 집합을 합침 (합집합)중복 제거 (내부적으로 정렬 발생)
UNION ALL두 결과 집합을 그대로 합침중복 포함 (단순히 합치므로 성능 우수)
INTERSECT두 결과 집합에 공통으로 존재하는 행만 반환 (교집합)중복 제거
MINUS / EXCEPT첫 번째 결과 집합에서 두 번째 결과 집합을 뺀 결과 반환 (차집합)중복 제거

✅ 4. 계층형 쿼리 (Hierarchical Query)

  • 테이블 내에 부모-자식 관계와 같은 계층 구조가 있을 때, 이 구조를 따라 데이터를 조회하는 쿼리입니다. (Oracle 기준)

  • 주요 절:

    • START WITH: 계층 구조의 시작점(루트)을 지정하는 조건.
    • CONNECT BY: 부모와 자식 간의 관계를 정의하는 조건. (PRIOR 키워드 사용)
    • ORDER SIBLINGS BY: 동일한 부모를 가진 형제 노드 간의 정렬을 지정.
-- EMP 테이블에서 'JONES'를 시작으로 하는 조직도 조회
SELECT LEVEL, ENAME, MGR
FROM EMP
START WITH ENAME = 'JONES'
CONNECT BY PRIOR EMPNO = MGR;

📌 요약

  • JOIN은 여러 테이블을 연결하여 데이터를 풍부하게 만드는 관계형 데이터베이스의 핵심 기능입니다. INNER JOINOUTER JOIN의 차이를 명확히 이해해야 합니다.
  • 서브쿼리는 SQL 문 내의 또 다른 SELECT 문으로, 사용되는 위치(SELECT, FROM, WHERE)에 따라 스칼라 서브쿼리, 인라인 뷰, 중첩 서브쿼리로 나뉩니다.
  • 집합 연산자는 두 개 이상의 SELECT 결과를 합치거나 비교하며, 특히 UNIONUNION ALL의 중복 처리 및 성능 차이를 알아야 합니다.
  • 계층형 쿼리는 조직도나 부품 구조와 같이 데이터 내에 계층이 있을 때, 이를 탐색하기 위한 특수한 SQL 구문입니다.

0개의 댓글