개발 공부 기록

JOIN (CROSS JOIN, NON_EQAUL JOIN, SELF JOIN), SUBQUERY 본문

DB/oracle

JOIN (CROSS JOIN, NON_EQAUL JOIN, SELF JOIN), SUBQUERY

좨랭이 2021. 10. 4. 21:51

CROSS JOIN

- 카테시안 곱(Cartesian Product)라고도 하며

- 조인되는 테이블의 각 행들이 모두 매핑된 데이터가 검색되는 조인 방법

- 검색되는 데이터 수는 ‘행의 컬럼 수 * 또 다른 행의 컬럼 수‘로 나옴

** 방대한 데이터로 과부하의 위험이 있기 때문에 실무에서 잘 사용되지 않음

 

ex1) ANSI 구문

- CROSS JOIN

 

ex2) 오라클 구문

- JOIN되는 컬럼을 지정하지 않으면 CROSS JOIN이 된다.

 

 

NON_EQAUL JOIN 

지정한 컬럼 값이 일치하는 경우가 아닌 값의 범위에 포함되는 행들을 연결하는 방식

 

ex1) ANSI 구문

 

ex2) 오라클 구문

 

 

SELF JOIN

두 개 이상의 서로 다른 테이블을 연결하는 것이 아닌 같은 테이블을 조인하는 것

ex1) ANSI 구문

- 테이블이 같기 때문에 E1, E2로 구분 

 

ex2) 오라클 구문

 

SUBQUERY

- SELECT 문장 안에 포함된 또 다른 SELECT 문장으로 메인 쿼리가 실행되기 전 한 번만 실행

- 비교 연산자의 오른쪽에 기술해야 하며 반드시 괄호로 묶어야 함

- 서브쿼리와 비교할 항목은 반드시 서브쿼리의 SELECT한 항목의 개수와 자료형을 일치시켜야 함

 

서브쿼리의 예시

-- 서브 쿼리 예시
-- 노옹철 사원과 같은 부서원들을 조회
-- 1) 노옹철 사원의 부서 코드 조회 -- D9
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME = '노옹철';

-- 2) 부서 코드가 노옹철 사원의 부서 코드와 동일한 사원들을 조회
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';

-- 3) 위의 2단계를 하나의 쿼리로 작성  -- 단일행 서브쿼리
SELECT EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE = (
    SELECT DEPT_CODE
    FROM EMPLOYEE
    WHERE EMP_NAME = '노옹철'
    );

 

유형

유형 설명
단일행 서브쿼리 서브쿼리의 조회 결과 값의 개수가 1개인 서브쿼리
다중행 서브쿼리 서브쿼리의 조회 결과 값의 행이 여러 개인 서브쿼리
다중열 서브쿼리  서브쿼리의 조회 결과 컬럼의 개수가 여러 개인 서브쿼리
다중행 다중열 서브쿼리 서브쿼리의 조회 결과 컬럼의 개수와 행의 개수가 여러 개인 서브쿼리
상(호연)관 서브쿼리 서브쿼리가 만든 결과 값을 메인 쿼리가 비교 연산할 때 메인 쿼리 테이블의 값이
변경되면 서브쿼리의 결과 값도 바뀌는 서브쿼리
스칼라 서브쿼리 상관쿼리이면서 결과 값이 한 개인 서브쿼리

 

단일행 서브 쿼리

 

ex1)

- ORDER BY는 서브쿼리를 빠져나온 후