★ 다중 행 서브 쿼리
SQL> SELECT [DISTINCT/ALL]{* | 컬럼명, ... }
> FROM 테이블
> WHERE 컬럼명 <다중 행 연산자> (SELECT 문장 : 서브 쿼리문)
- 서브 쿼리에 여러 개의 행이 검색되는 쿼리문을 다중 행 서브 쿼리문이라고 한다.
- 다중 행 서브 쿼리문은 다중 행 연산자를 이용한다.
- 다중 행 연산자의 종류
. IN : 나열된(검색된) 값중에 하나만 일치하면 참이다.
. ANY : 나열된(검색된) 값 중에 조건에 맞는 것이 하나 이상 있으면 참이다.
. ALL : 모든 나열된(검색된) 값과 조건에 맞아야 한다.
예제 1. 20번 부서원들과 동일한 급여를 받는 사원을 검색한다.
예제 2. 10번 부서원들보다 급여가 낮은 사원을 검색한다.
* 컬럼 > ALL → 컬럼 > MAX() : 가장 큰 값보다 크다
* 컬럼 < ALL → 컬럼 < MIN() : 가장 작은 값보다 작다.
* 컬럼 > ANY → 컬럼 > MIN() : 가장 작은 값보다 크다.
* 컬럼 < ANY → 컬럼 < MAX() : 가장 큰 값보다 작다
★ 다중 열 서브 쿼리
SQL> SELECT [DISTINCT/ALL]{* | 컬럼, ... }
> FROM 테이블
> WHERE (컬럼1, 컬럼2, ... ) IN (SELECT 문장 : Sub query문)
- 서브 쿼리의 SELECT문에 여러 개의 컬럼을 검색하는 것을 다중 열 서브 쿼리 문이라고 한다.
- 여러 개의 컬럼을 검색하는 서브 쿼리 문을 이용할 때는 반드시 비교 대상 컬럼 과1:1 대응돼야 한다.
- 다중 열 서브 쿼리에서 서브 쿼리의 검색 결과가 단지 하나의 행이라면 '=' 연산자 사용이 가능하지만 되도록 'IN' 연산자를 이용한다.
예제 3. 20번 부서 사원들과 업무, 보너스가 동일한 사원을 검색한다.
★ 집합 연산자(Set Operators)
합집합
SELECT 문장
UNION [ALL]
SELECT 문장
교집합
SELECT 문장
INTERSECT
SELECT 문장
차집합
SELECT 문장
MINUS
SELECT 문장
- 두 개의 select문을 조합해서 data를 검색하는 방법을 제공.
- 두 개의 select문은 동일한 type과 종류의 data를 리턴해야 한다.
- ORDER BY는 SELECT문 마지막에 한 번만 기술 가능하다.
- 헤더는 첫 번째 select문에 따라 결정된다.
예제 1. UNION과 UNION ALL의 차이점을 확인해 보자
예제 2. INTERSECT과 MINUS
실습
① 화학과 학생과 평점이 동일한 학생들을 검색한다.
② 화학과 교수와 부임일이 같은 직원을 검색한다.
③ 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색한다.
④ 강의를 담당하지 않는 교수의 번호를 검색한다.(집합연산자 이용)
⑤ 수강생이 없는 과목 번호를 검색한다.(집합연산자 이용)
문제 (서브 쿼리가 하나이상 포함되도록 한다.)
1. 10번 부서 사원들과 년봉이 동일한 사원을 검색한다.
2. 기말고사 성적이 핵 화학과목보다 우수한 과목의 과목명과 담당 교수명 검색한다.
3. 10번 부서 사원들과 급여 및 년봉이 동일한 사원을 검색한다.
SQL> SELECT [DISTINCT/ALL]{* | 컬럼명, ... }
> FROM 테이블
> WHERE 컬럼명 <다중 행 연산자> (SELECT 문장 : 서브 쿼리문)
- 서브 쿼리에 여러 개의 행이 검색되는 쿼리문을 다중 행 서브 쿼리문이라고 한다.
- 다중 행 서브 쿼리문은 다중 행 연산자를 이용한다.
- 다중 행 연산자의 종류
. IN : 나열된(검색된) 값중에 하나만 일치하면 참이다.
. ANY : 나열된(검색된) 값 중에 조건에 맞는 것이 하나 이상 있으면 참이다.
. ALL : 모든 나열된(검색된) 값과 조건에 맞아야 한다.
예제 1. 20번 부서원들과 동일한 급여를 받는 사원을 검색한다.
예제 2. 10번 부서원들보다 급여가 낮은 사원을 검색한다.
* 컬럼 > ALL → 컬럼 > MAX() : 가장 큰 값보다 크다
* 컬럼 < ALL → 컬럼 < MIN() : 가장 작은 값보다 작다.
* 컬럼 > ANY → 컬럼 > MIN() : 가장 작은 값보다 크다.
* 컬럼 < ANY → 컬럼 < MAX() : 가장 큰 값보다 작다
★ 다중 열 서브 쿼리
SQL> SELECT [DISTINCT/ALL]{* | 컬럼, ... }
> FROM 테이블
> WHERE (컬럼1, 컬럼2, ... ) IN (SELECT 문장 : Sub query문)
- 서브 쿼리의 SELECT문에 여러 개의 컬럼을 검색하는 것을 다중 열 서브 쿼리 문이라고 한다.
- 여러 개의 컬럼을 검색하는 서브 쿼리 문을 이용할 때는 반드시 비교 대상 컬럼 과1:1 대응돼야 한다.
- 다중 열 서브 쿼리에서 서브 쿼리의 검색 결과가 단지 하나의 행이라면 '=' 연산자 사용이 가능하지만 되도록 'IN' 연산자를 이용한다.
예제 3. 20번 부서 사원들과 업무, 보너스가 동일한 사원을 검색한다.
★ 집합 연산자(Set Operators)
합집합
SELECT 문장
UNION [ALL]
SELECT 문장
교집합
SELECT 문장
INTERSECT
SELECT 문장
차집합
SELECT 문장
MINUS
SELECT 문장
- 두 개의 select문을 조합해서 data를 검색하는 방법을 제공.
- 두 개의 select문은 동일한 type과 종류의 data를 리턴해야 한다.
- ORDER BY는 SELECT문 마지막에 한 번만 기술 가능하다.
- 헤더는 첫 번째 select문에 따라 결정된다.
예제 1. UNION과 UNION ALL의 차이점을 확인해 보자
예제 2. INTERSECT과 MINUS
실습
실습쿼리
다운로드
다운로드
① 화학과 학생과 평점이 동일한 학생들을 검색한다.
② 화학과 교수와 부임일이 같은 직원을 검색한다.
③ 화학과 학생과 같은 학년에서 평점이 동일한 학생들을 검색한다.
④ 강의를 담당하지 않는 교수의 번호를 검색한다.(집합연산자 이용)
⑤ 수강생이 없는 과목 번호를 검색한다.(집합연산자 이용)
문제 (서브 쿼리가 하나이상 포함되도록 한다.)
실습쿼리
다운로드
다운로드
1. 10번 부서 사원들과 년봉이 동일한 사원을 검색한다.
2. 기말고사 성적이 핵 화학과목보다 우수한 과목의 과목명과 담당 교수명 검색한다.
3. 10번 부서 사원들과 급여 및 년봉이 동일한 사원을 검색한다.
'정보보호관리자 과정 교육 > Oracle' 카테고리의 다른 글
15강 단일 행 함수 - 숫자, 날짜형 함수 (1) | 2010.10.25 |
---|---|
14강 단일 행 함수 - 문자형 함수 (0) | 2010.10.25 |
2010/10/22 ORACLE 시험 1-20번 문제풀이 (0) | 2010.10.22 |
12강 서브 쿼리 - 단일행 서브 쿼리 (0) | 2010.10.21 |
9강 자기 참조 조인(Self join)과 외부 조인(Outer join) (1) | 2010.10.20 |