조인(JOIN)
1. EQUI조인(등가조인) - 교집합
조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정
조인의 가장 기본은 교집합을 만드는 것
EMP 테이블
사원번호 | 이름 | 나이 | 급여 | 부서코드 |
1000 | 달콤 | 20 | 10,000 | 001 |
1001 | 고소 | 22 | 20,000 | 002 |
1002 | 야미 | 25 | 25,000 | 002 |
DEPT 테이블
부서코드 | 부서명 |
001 | 인사팀 |
002 | 총무팀 |
003 | IT팀 |
부서코드 간 EQUI Join(두 개의 릴레이션을 결합)
SELECT * FORM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;
* EQUI 조인은 "="을 사용해서 두 개의 테이블 연결
② INNER JOIN
INNER JOIN은 ON문을 사용해서 테이블을 연결
SELECT * FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
조인문에 추가 조건 및 정렬을 할 수 있다.
예시)
SELECT * FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO
AND EMP.ENAME LIKE '임%'
ORDER BY ENAME;
∴ 실행 계획을 확인해서 내부적으로 두 개의 테이블을 어떻게 연결했는지 확인해보면
DEPT 테이블 - EMP 테이블 전체 읽고 (TABLE ACCESS FULL)해시 함수를 사용해서 연결
③ INTERSECT 연산
두 개 테이블에서 공통된 값을 조회
SELECT DEPTNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT;
2. Non-EQUI JOIN(비등가 조인)
두 개의 테이블을 조인하는 경우 "="을 사용하지 않고 ">", "<", ">=", "<=" 등을 사용
즉, 정확하게 일치하지 않는 것을 조인
3. OUTER JOIN
두 개의 테이블 간에 교집합(EQUI JOIN)을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회
왼쪽 테이블에만 있는 행도 포함하면 LEFT OUTER JOIN 오른쪽 테이블에만 있는 행도 포함하면 RIGHT OUTER JOIN
FULL OUTER JOIN은 LEFT, RIGHT OUTER JOIN 모두 하는 것
*Oracle DB에서는 OUTER JOIN을 할 때 "(+)" 기호를 사용해서 할 수 있음.
Oracle OUTER JOIN 예시
SELECT * FROM DEPT, EMP
WHERE EMP.DEPTNO (+) = DEPT.DEPTNO;
LEFT OUTER JOIN
부서명 | 부서코드 | 부서코드 | 이름 | |
인사팀 | 10 | 10 | 달콤 | |
총무팀 | 20 | 20 | 새콤 | |
IT팀 | 30 | 30 | 매콤 | |
운영팀 | 40 | NULL |
SELECT * FROM DEPT LEFT OUTER JOIN EMP
ON EMP.DEPTNO = DEPT.DEPTNO;
RIGHT OUTER JOIN
부서명 | 관리자 | 사원번호 | 이름 | |
인사팀 | 10 | 1001 | 달콤 | |
총무팀 | 20 | 1002 | 새콤 | |
NULL | 1003 | 매콤 | ||
NULL | 1004 | 쿰쿰 |
SELECT * FROM DEPT RIGHT OUTER JOIN EMP
ON EMP.DEPTNO = DEPT.DEPTNO;
4. CROSS JOIN
조인 조건구 없이 2개의 테이블을 하나로 조인
조인구가 없기 때문에 카테시안 곱이 발생
FROM절에 CROSS JOIN구를 사용
SELECT * FROM EMP CROSS JOIN DEPT;
행 X 행 = JOIN수
EX) EMP 테이블에 10개의 행 DEPT 테이블에 행이 2개면 조회되는 행의 수는?
답 : 10 X 2 = 20개
이상 몇 가지의 JOIN문에 대해서 공부를 해봤다
크게 어려운건 없는듯..!
SQLD D-DAY 23
'공부 > SQL' 카테고리의 다른 글
mysql 서브쿼리 limit 0, 200 에러 (2) | 2022.09.06 |
---|---|
mybatis 날짜 사이 조회 쿼리 문 (0) | 2022.07.01 |
Error 1064(42000) : you have an error in your SQL Syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at Line 4 (0) | 2022.06.28 |
Column: 'Column_Name' in where clause is ambiguous 오류 (0) | 2022.06.28 |
윈도우 함수 (0) | 2021.10.29 |