** Sub Query
* 단일행 서브쿼리 (스칼라 서브쿼리)
'=' ,'<', '>'  연산자를 사용한 단일행 서브쿼리

* 다중행 서브 쿼리
서브쿼리에서 반환되는 결과 행이 하나 이상일 때 사용하는 서브쿼리.
다중 행 비교 연산자를 사용 가능.

IN : 메인쿼리의 비교 조건이 서브쿼리의 결과중에서 하나라도 일치하면 참. '=' 비교만 가능
ANY, SOME : 메인쿼리의 비교 조건이 서브쿼리의 결과중에서 하나 이상 일치하면 참. '=' 과 '<' , '>' 범위 비교도 가능함
> any (작은값), < any(큰값)
ALL : 메인쿼리의 비교 조건이 서브쿼리의 결과 중에서 모든값이 일치하면 참.
> all(큰값), < all(작은값)
EXISTS : 메인 쿼리의 비교조건이 서브 쿼리의 결과중에서 만족하는 값이 하나라도 존재하면 참.

* 다중 칼럼 서브쿼리
서브쿼리에서 여러 개의 칼럼 값을 검색하여 메인쿼리의 조건절과 비교하는 서브 쿼리이다.
PAIRWISE 방식과 UNPAIRWISE 방식이 있다.

* 상호 연관 서브쿼리
메인쿼리와 서브쿼리간에 검색 결과를 교환하는 서브쿼리이다

*** 서브쿼리 사용시 오류사항
단일행 서브쿼리오류 ? 서브쿼리 리턴값이 1개가 아닌경우
메인쿼리와 서브쿼리 칼럼의 수가 일치하지 않을 경우
서브쿼리내에 ORDER BY 절을 사용할 경우
서브쿼리 검색 결과가 NULL일 경우- NULL과 연산결과는 모두 NULL 됨

*문제 : 이광훈 학생의 학과의 평균몸무게보다 작은 학생들의 학생이름과 학생의 몸무게, 각 학생들의 학과 이름과 지도교수 이름을 출력하시요.
select s.name, s.weight, d.dname, p.name
from student s, department d, professor p
where s.deptno=d.deptno
and s.profno= p.profno(+)
and s.weight< (select avg(weight) from student where deptno=(select deptno from student where name='이광훈'))

'Database > Oracle' 카테고리의 다른 글

Group Fucntion  (0) 2009.12.30
Join  (0) 2009.12.30
DML  (0) 2009.12.30
commit case  (0) 2009.12.30
인덱스 관련 실행 계획은 SQL 최적화의 기본이다  (0) 2009.12.30

+ Recent posts