6. JOIN
1) JOIN이란?
- 하나 이상의 테이블로부터 연관 데이터를 검색하는 방법
- 일반적으로 행들은 PK와 FK 값의 연관에 의해 JOIN 성립(예외 존재->논리값 간의 연관성)
- 정규화: 데이터 중복 제거를 위해 테이블을 분리
- JOIN은 정규화된 데이터를 다시 결합하는 과정
- JOIN방법
EQUIJOIN: 칼럼간의 값들이 정확히 일치하는 경우에 사용 (일반적으로 PK, FK 관계에 의함)
NON-EQUIJOIN: 칼럼간의 값들이 정확히 일치하지 않는 경우에 사용
OUTER JOIN: JOIN조건에 만족하지 않지만 모든 행 출력을 위해 사용
SELF JOIN: 같은 테이블에 있는 행들을 JOIN하고자하는 경우에 사용
*Cartesian product: 조건 생략 혹은 실수로 인해 테이블의 모든 행들이 JOIN되는 경우
2) EQUIJOIN
- 칼럼값들이 = 연산자를 사용해서 정확하는 일치하는 경우에 JOIN하는 방법
- 만약 하나 이상의 테이블에서 같은 컬럼이 나타나면 반드시 테이블명을 적어준다.
- JOIN을 위한 테이블이 N개라면 조건은 최소 N-1개 이상 필수
- 예시
SELECT 테이블.칼럼명, 테이블명.칼럼명 ,... // 데이터의 출처
FROM 테이블1, 테이블2
WHERE 테이블1.칼럼1 = 테이블2.칼럼2; // 논리적인 연결이 되는 두 칼럼 간의 조건 기술
3) 칼럼과 테이블의 ALIAS 사용
- 테이블명에 ALIAS를 지정해서 간편하게 사용
- 예시
SELECT e.name 사원명, e.dept_id, d.name 부서명
FROM s_emp e, s_dept d
WHERE e.dept_id = d.id;
4) NON-EQUIJOIN
- 칼럼값이 일치하지 않는 경우 =가 아닌 다른 연산자를 이용해서 JOIN하는 방법
- 예시
SELECT e.name, e.salary, g.grade 급여동급
FROM s_emp e, salgrade g
WHERE e.salary BETWEEN g.losal AND g.hisal;
5) OUTER JOIN
- JOIN조건에 만족하지 않지만 모든 행 출력을 위해 사용( (+) 연산자 사용)
- (+) 의 위치는 WHERE절에서 = 연산자 좌우 중 JOIN할 데이터가 부족한 쪽(IN, OR 불가)
- 예시
SELECT e.name 사원명, e.id, c.name 고객명
FROM s_emp e, s_customer c
WHERE e.id (+) = c.sales_rep_id
ORDER BY 2;
6) SELF JOIN
- 하나의 테이블을 여러개처럼 사용 가능(횟수제한 없음)
- 칼럼명 앞에 테이블 ALIAS 지정 필수(ALIAS명 각각 다르게)
- 예시
SELECT w.id 사번, w.name 사원명, m.id 부서장사번, m.name 부서장명
FROM s_emp w, s_emp m
WHERE w.manager_id = m.id;
7) SET 연산자
- 두 SELECT 구문의 칼럼 개수와 타입 일치 필수(FROM절 이후로는 무관)
- 칼럼의 HEADING은 첫 번째 SELECT 구문의 컬럼명 출력
- ORDER BY절은 마지막에 한 번만 기술
- 종류
UNION: 각 QUERY 결과의 합집합 - 교집합
UNION ALL: 각 QUERY 결과의 합집합 + 교집합
INTERSECT: 각 QUERY 결과의 교집합
MINUS: 첫 번째 QUERY결과와 두 번째 QUERY결과의 차집합
- 문형
SELECT 칼럼1, 칼럼2...
FROM 테이블1 ...
SET연산자
SELECT 칼럼1', 칼럼2'...
FROM 테이블2...
ORDER BY;
- 예시
SELECT name, dept_id, title
FROM s_emp
WHERE dept_id = 110
UNION
SELECT name, dept_id, title
FROM s_emp
WHERE dept_id = 113
ORDER BY 1;
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL 요약 정리] 1-8. CONSTRAINT (0) | 2019.02.08 |
---|---|
[SQL 요약 정리] 1-7. SUBQUERY (0) | 2019.02.08 |
[SQL 요약 정리] 1-5. SUBGROUP으로 데이터분류 (0) | 2019.02.08 |
[SQL 요약 정리] 1-4. 내장 함수(STORED FUNCTION) (0) | 2019.02.08 |
[SQL 요약 정리] 1-3. 데이터 검색(SELECT) (0) | 2019.02.08 |