메인 쿼리 (MainQuery) vs 서브쿼리 (SubQuery)
메인 쿼리 (MainQuery)
우리가 흔히 쓰던 쿼리문이다
(부모 쿼리)
SELECT 컬럼명 FROM 테이블명
서브쿼리 (SubQuery)
메인 쿼리 안의 또 다른 쿼리(Query)를 말한다
(자식 쿼리)
종류
반환하는 값 개수에 따른 분류
1) 단일행 서브쿼리(Single Row)
2) 복수행 서브쿼리(Multiple Row)
3) 복수열 서브쿼리(Multiple Column)
실행 방식에 따른 분류
1) 일반 서브쿼리 : 단일행,복수행,복수열 서브쿼리
2) 상관(연관)관계 서브쿼리 : 메인쿼리의 컬럼이나 값을 사용하는 서브쿼리
3) 스칼라 서브쿼리 : 하나의 컬럼처럼 사용되는 서브쿼리
4) 인라인 뷰 서브쿼리 : 뷰 형태로 테이블을 리턴하는 서브쿼리로,
FROM절 다음에 테이블명 대신 SELECT 절이 오는 서브쿼리
5) 중첩 서브쿼리 : WHERE절 다음에 오는 서브쿼리
많다... 한두가지만 보자...
주의점
우리가 비교하고자 하는 컬럼과
서브쿼리문 안의 컬럼의 데이터가 같아야 한다.
< 1 >
단일행 서브쿼리
실행 결과가 하나의 행만 나오는 서브쿼리
메인 쿼리와 비교할때 단일행 연산자를 사용 ( > , >= , = , <= , < , != , <> , ^=)
SELECT 컬럼명 FROM 테이블명
WHERE 비교컬럼 > (SELECT 비교컬럼 FROM 테이블명)
(거의 어디든지 들어가기 때문에 예시를 다 적기에는 무리...)
위와 같은 예시를 만들어 보자
우리는 사원 A씨보다 급여를 많이 받는 사람들을 출력하고 싶다
라고 한다면
-- 메인쿼리 --
SELECT SALARY_COULMN FROM TableA
-- WHERE 절 -- -- 서브쿼리 --
WHERE SALARY_COULMN > (SELECT SALARY_COULMN FROM TableA WHERE EMPLOYEE_NAME = 'A')
대충 이런식일 것이다.
< 2 >
복수행 서브쿼리
실행 결과가 여러 개의 행이 나오는 서브쿼리
주로 IN이 많이 사용된다.
SELECT 컬럼명 FROM 테이블명
WHERE 비교컬럼 IN (SELECT 비교컬럼 FROM 테이블명)
'데이터베이스 > ORACLE_DB' 카테고리의 다른 글
Oracle_SQL - 테이블 데이터 추가 , 조회 , 수정 , 삭제 (DML) (0) | 2023.09.13 |
---|---|
Oracle_SQL - 테이블 생성 , 수정 , 삭제 (DDL) (0) | 2023.09.13 |
Oracle_SQL - JOIN (조인) (0) | 2023.09.11 |
Oracle_SQL - GROUP BY (그룹함수) (0) | 2023.09.11 |
Oracle_SQL - 자료형 변환 함수 (0) | 2023.09.08 |