[DB/SQL] SQL 기본 및 활용 - Join & Set Operation

Joo·2024년 2월 24일

RDB & SQL

목록 보기
9/24

강의 링크 : https://www.youtube.com/watch?v=NsQU8xpMKHM&list=PLg_wJlcMiuKtGdlIaAZ0rOPPQuTDENnEQ&index=10


Key word : (ON, USING)INNER JOIN, EQUI JOIN, NATURAL JOIN, OUTER JOIN(LEFT, RIGHT, FULL), UNION, CROSS JOIN, SELF JOIN, 집합 연산자

JOIN

E. F. CODD의 연산자

  • SQL의 많은 기능이 RDB이론을 수립한 E. F. Codd 박사의 논문에서 소개됨
    • 4개의 일반집합연산자 + 4개의 순수관계연산자
    • 일반집합연산자의 SQL 구현
      • Union, Intersection, Difference, Product
    • UNION → UNION / UNION ALL (공통집합의 중복 허용)
    • INTERSECTION → INTERSECT
    • DIFFERENCE → MINUS(Oracle) / EXCEPT(MS-SQL)
    • PRODUCT → CROSS JOIN

  • SELECT : 행 고르기
  • PROJECT : 열 고르기
  • JOIN : 여러 테이블 합치기

정규화와 JOIN

  • 정규화
    • 이상현상(anomaly) 발생을 피하기 위해 테이블을 분할
    • 학계/실무에서 주로 3NF(3차 정규형) 사용
  • JOIN
    • 데이터의 통합 조회를 위해 여러 테이블을 연결
    • 실제 JOIN 연산은 두 개의 테이블에 대해서만 적용됨
      • 이를 연속적으로 여러번 실행함으로써 여러 개의 테이블에 JOIN 적용함
    • 일반적인 경우 PK/FK의 연관에 의해 JOIN이 성립
      • 그 외에도 논리적인 값들의 연관성만으로 JOIN 성립 가능
    • 반정규화, 역정규화와 JOIN은 다름 (컬럼을 복사하거나 테이블을 합침)
      • JOIN은 스키마의 변경이 발생하지 않음
    • Default : INNER JOIN

⌨️ A)

SELECT E.ENAME 사원명, E.SAL 급여, S.GRADE 급여등급
FROM   EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL

INNER JOIN은 교집합임

NATURAL JOIN은 지정하지 않아도 알아서 중복되는 컬럼을 합쳐줌(?)

  • NATURAL JOIN = NATURAL INNER JOIN


JOIN 조건절

  • ON E.DEPTNO = D.DEPTNOUSING (DEPTNO)로 줄여쓸 수 있음 (컬럼명이 동일한 경우 축약 가능)

  • NATURAL JOIN vs ON(INNER JOIN) vs USING

    • NATURAL JOIN은 생략이 많아 간단하지만 제약이 큼
    • ON(INNER JOIN)은 뭐.. 좋다고 함
    • NATURAL JOIN과 ON의 사이가 USING절

  • 여러 개의 컬럼이 중복되는 경우에는 NATURAL JOIN을 사용할 수 없음 (그 중 하나의 컬럼만 JOIN되어 나타남)


OUTER JOIN

UNION ALL은 중복 제거 X, UNION은 중복 제거한 것



CROSS JOIN

A) 14 * 4 = 56 레코드(행)


JOIN 결과 비교



SELF JOIN

> ⌨️ A) ``` SELECT E.EMPNO, E.ENAME, M.EMPNO MGRNO, M.ENAME MNAME FROM EMP E LEFT JOIN EMP M ON E.MGR = M.EMPNO; ```



계층형 질의

  • 계층형 질의 : SELF JOIN의 확장된 개념
    • 나뭇가지를 타고 계속 올라가거나 내려가는(loop) 계층형 쿼리
    • 계층형 데이터에 대해 계층형 질의를 던질 수 있음

      어디서부터 시작해서 어느 방향으로 갈 지 지정해줘야 함



집합 연산자

집합 연산자 개요

  • 여러 질의(Select 문) 결과를 하나로 결합하기 위해 사용
  • 집합 연산의 대상이 되는 두 질의는..
    • SELECT 절의 칼럼 수가 동일해야 하고
    • SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환 가능해야 함
      - 반드시 동일한 데이터 타입일 필요는 없음 (예, num(8), num(9))

  • 집합 연산을 사용할 때 ORDER BY는 항상 맨 마지막에 와야 함
  • ORDER BY에서 사용할 수 있는 컬럼은 첫 번째 SELECT 문에 있는 컬럼임
  • 첫 번째 SELECT 문에서 ALIAS를 사용했을 때는 ORDER BY에서도 ALIAS를 사용해야 함
profile
적당히 공부한 거 정리하는 곳

0개의 댓글