개발 공부 기록
JOIN (CROSS JOIN, NON_EQAUL JOIN, SELF JOIN), SUBQUERY 본문
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는 서브쿼리를 빠져나온 후
'DB > oracle' 카테고리의 다른 글
DDL (CREATE, ALTER, 데이터형, 제약조건) (0) | 2021.10.07 |
---|---|
SUBQUERY(단일행, 다중행, 다중열 (0) | 2021.10.06 |
[oracle] ORDER BY & GROUP BY & HAVING, 쿼리문 실행 순서 (0) | 2021.10.01 |
[oracle] 함수(날짜 처리, 형 변환, NULL처리, 선택,그룹 ) (0) | 2021.09.29 |
[oracle] 함수(문자 처리 함수, 숫자 처리 함수, 날짜 처리 함수) (0) | 2021.09.28 |