강의 링크 : 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은 다름 (컬럼을 복사하거나 테이블을 합침)
- 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.DEPTNO는 USING (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를 사용해야 함