괴발개발 개발하다
[Oracle] 오라클 서브쿼리( SELECT, FROM, WHERE 절 ) 본문
< 서브쿼리 >
: 하나의 쿼리 문장 내에 포함된 또 하나의 쿼리 문장.
: 서브쿼리를 각각의 어느 위치( SELECT, WHERE, FROM )에서 사용하냐에 따라 나누어진다.
1. SELECT 절 서브쿼리
스칼라 서브쿼리 ( Scalar Subqueries ) 라고 불리며 SELECT 절 안에 서브쿼리가 들어있다.
이 때, 서브쿼리의 결과는 반드시 단일 행이나 SUM, COUNT 등의 집계 함수를 거친 단일 값으로 리턴되어야 한다.
이유는 서브쿼리를 끝마친 값하나를 메인쿼리에서 SELECT 하기 때문이다.
SELECT 학생이름,
( SELECT 학과.학과이름
FROM 학과
WHERE 학과.학과ID = 학생.학생ID ) AS 학과이름
FROM 학생
WHERE 학생이름 = '홍길동' ;
2. FROM 절 서브쿼리
인라인뷰 ( Inline Views ) 라고 불리며 FROM 절 안에 서브쿼리가 들어있다.
이 때, 서브쿼리의 결과는 반드시 하나의 테이블로 리턴되어야 한다.
이유는 서브쿼리를 끝마친 테이블 하나를 메인쿼리의 FROM 에서 테이블로 잡기 때문이다.
SELECT 학생이름, 수학점수
FROM ( SELECT 학생.학생이름 AS 학생이름,
과목.과목점수 AS 수학점수
FROM 학생, 과목
WHERE 학생.학생이름 = 과목.학생이름
AND 과목.과목이름 = '수학' ) ;
3. WHERE 절 서브쿼리
중첩 서브쿼리 ( Nested Subqueries ) 라고 불리며 WHERE 절 안에 서브쿼리가 들어있다.
가장 자주 쓰이는 대중적인 서브쿼리이며 단일행과 복수행 둘 다 리턴이 가능하다.
이유는 서브쿼리를 끝마친 값들을 메인쿼리의 조건절을 통해 비교등을 하기 때문이다.
SELECT *
FROM 학생
WHERE 학생.학생이름 IN ( SELECT 과목.학생이름 FROM 과목 WHERE 과목.과목이름 = '수학' ) ;
< 참고 >
https://mjn5027.tistory.com/51
https://goldsony.tistory.com/109
'Oracle' 카테고리의 다른 글
[ Oracle ] 오라클 WITH절 사용 (임시 테이블 만들기) (0) | 2022.08.29 |
---|---|
[Oracle] 오라클 NVL, NVL2 함수 (Null 처리) (1) | 2022.08.08 |
[Oracle] 오라클 INSERT INTO SELECT 구문 (0) | 2022.08.07 |
[Oracle] 오라클 컬럼명으로 테이블 찾기 (0) | 2022.08.07 |
[Oracle] 오라클 테이블 코멘트(COMMENTS) 조회 (0) | 2022.08.01 |