-
728x90
조인(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
728x90'공부 > 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