-
[SQLD 요약] II. SQL 기본 및 활용 - 02. SQL 활용 (1) - JOIN, UNION, MINUS자격증/SQLD (SQL 개발자) 2021. 5. 6. 15:17728x90반응형
SQLD 요약 / SQL Developer 요약
🔑 JOIN/ EQUI JOIN/ HASH JOIN/ INNER JOIN/ INTERSECT/ Non-EQUI JOIN/
OUTER JOIN/ FULL OUTER JOIN/ LEFT OUTER JOIN/ RIGHT OUTER JOIN/ CROSS JOIN/
UNION/ UNION ALL/ MINUS
II. SQL 기본 및 활용
02. SQL 활용
[1] 조인 (JOIN)
02. SQL 활용
[1] 조인 (JOIN) | 여러 개의 릴레이션을 사용하여, 새로운 릴레이션을 만드는 과정
JOIN 기능 JOIN 기능 EQUI JOIN 교집합, 등가 조인 Non-EQUI JOIN 비등가 조인 INNER JOIN 교집합, ON구 OUTER JOIN 교집합 + 한쪽 테이블 INTERSECT 교집합 조회 CROSS JOIN 조건 없이 조인 (1) EQUI 조인 | 등가, 교집합 생성
- 2개의 테이블 간에 일치하는 것을 조인
- WHERE 절에서 "=" 로 2개 테이블을 연결함
# JOIN Key (EQUI Join) : 2개 릴레이션을 결합 # STUDENT 테이블의 DEPTNO와 DEPT 테이블의 DEPTNO가 같은 것을 조인 SELECT * FROM STUDENT, DEPT WHERE STUDENT.DEPTNO = DEPT.DEPTNO; # 조인문에 추가조건, 정렬 가능 # AND로 조건 추가, ORDER BY로 정렬 SELECT * FROM STUDENT, DEPT WHERE STUDENT.DEPTNO = DEPT.DEPTNO AND STUDENT.STDNAME LIKE "박%" ORDER BY STDNAME;
- TABLE ACCESS FULL - 2개 테이블의 전체를 읽은 다음 → 해시 함수로 2개 테이블을 연결함
- 해시 조인(Hash Join)은 EQUI 조인만 사용 가능한 방법
① 선행 테이블 결정
② 선행 테이블에서 WHERE구의 조건에 해당하는 행 선택
③ 조인 키를 기준으로 해시 함수 사용
④ 해시 테이블을 메인 메모리에 생성
⑤ 후행 테이블에서 조건에 만족하는 행 검색
(2) INNER JOIN | 내부 조인
- "ON"문을 사용하여 테이블을 연결함
- INNER JOIN구에서 2개의 테이블 이름 서술
- ON구에서 조인 조건 서술
# STUDENT, DEPT 테이블에서 DEPTNO 칼럼 기준으로 INNER JOIN 실행 SELECT * FROM STUDENT INNER JOIN DEPT ON STUDENT.DEPTNO = DEPT.DEPTNO
(3) INTERSECT 연산 | 교집합 조회
- 2개 테이블에서 공통된 값을 조회
# STUDENT, DEPT 테이블 간 교집합을 조회함 SELECT DEPTNO FROM STUDENT INTERSECT SELECT DEPTNO FROM DEPT;
(4) Non-EQUI | 비등가 조인
- 2개 테이블 간에 정확하게 일치하지 않는 것을 조인
- WHERE절에서 "="로 조인하는 EQUI 조인과 반대로, ">", "<", ">=", "<=" 등을 사용함
(5) OUTER JOIN | 외부 조인
- 2개 테이블 간에 교집합(EQUI JOIN) 조회 + 한쪽 테이블에만 있는 데이터도 포함
- Oracle 데이터베이스에서 "(+)=" 로 OUTER JOIN 가능
SELECT * FROM DEPT, STUDENT WHERE STUDENT.DEPTNO (+)= DEPT.DEPTNO;
- LEFT OUTER JOIN: 교집합 + 왼쪽 테이블에만 있는 행도 포함 → 오른쪽 테이블에서 없으면 NULL값
- RIGHT OUTER JOIN: 교집합 + 오른쪽 테이블에만 있는 행도 포함 → 왼쪽 테이블의 NULL인 행도 조회
- FULL OUTER JOIN = LEFT OUTER JOIN + RIGHT OUTER JOIN
# LEFT SELECT * FROM DEPT LEFT OUTER JOIN STUDENT ON STUDENT.DEPTNO = DEPT.DEPTNO; # RIGHT SELECT * FROM DEPT RIGHT OUTER JOIN DEPT ON STUDENT.DEPTNO = DEPT.DEPTNO;
(6) CROSS JOIN | 조건구 없이 조인
- 조인 조건구 없이, 2개 테이블을 1개로 조인
- "ON"문에서 조건을 지정하지 않기 때문에, 카테시안 곱이 발생함
- STUDENT 테이블이 총 12건, DEPT 테이블이 총 5건이면 → 조인은 총 12*5 = 60건 발생
- SELECT * FROM STUDENT CROSS JOIN DEPT;
[2] UNION을 사용한 합집합 구현
(1) UNION | 2개 테이블을 하나로 합치는 연산
- 2개 테이블의 칼럼 개수, 데이터 형식이 모두 일치해야 함
(2) UNION ALL | 단순하게 합치기만 함
UNION : 합집합 UNION ALL 테이블을 1개로 합치면서
- 중복 데이터 제거 O
- 정렬(SORT) 발생 OUNION과 다르게
- 중복 데이터 제거 X
- 정렬(SORT) 발생 XSELECT DEPTNO FROM STUDENT
UNION
SELECT DEPTNO FROM STUDENT;SELECT DEPTNO FROM STUDENT
UNION ALL
SELECT DEPTNO FROM STUDENT;
[3] 차집합을 만드는 MINUS
(1) MINUS | 2개 테이블에서 차집합을 조회
- 먼저 쓴 SELECT문에는 있고, 뒤에 쓴 SELECT문에는 없는 집합을 조회함
- MS-SQL의 EXCEPT와 동일함
# STUDENT에는 없고, DEPT에만 있는 행을 조회함 SELECT DEPTNO FROM DEPT MINUS SELECT DEPTNO FROM STUDENT;
참고도서: SQL 개발자 이론서+기출문제_이기적, 2020
728x90반응형'자격증 > SQLD (SQL 개발자)' 카테고리의 다른 글