1. 서브쿼리
-> 서브 쿼리는 하나의 SELECT 문장의 절 안에 포함된 또 하나의 SELECT 문장입니다.
-> 그렇기에 서브 쿼리를 포함하고 있는 쿼리문을 메인 쿼리, 포함된 또 하나의 쿼리를 서브 쿼리라 합니다.
-> 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러쌓아야 합니다.
-> 서브 쿼리는 메인 쿼리가 실행되기 이전에 한번만 실행이 됩니다.
------------------------------------------------------------------------------------------------------------
2. 단일 행 서브 쿼리
-> 단일행(Single Row) 서브 쿼리는 수행 결과가 오직 하나의 로우(행, row)만을 반환하는 서브 쿼리를 갖는 것을 말합니다.
-> 단일 행 서브 쿼리문에서는 이렇게 오직 하나의 로우(행,row)로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내게 되는데 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =,>,>=,<,<=,<> 를 사용해야 합니다.
------------------------------------------------------------------------------------------------------------
3. 서브 쿼리에서 그룹 함수의 사용
-> 평균 급여를 구하는 쿼리문을 서브 쿼리로 사용하여 평균 급여보다 더 많은 급여를 받는 사원을 검색하는 문장
ex) select EMP_NAME, salary from EMPLOYEE where salary > (select avg(salary) from employee);
------------------------------------------------------------------------------------------------------------
종 류 |
의 미 |
IN |
메인 쿼리의 비교 조건('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다. |
ANY, SOME |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다. |
ALL |
메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다. |
EXIST |
메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다. |
------------------------------------------------------------------------------------------------------------
4.1 IN
ex) select EMP_NAME, salary,dept_code from employee where
dept_code IN (SELECT DISTINCT DEPT_CODE FROM EMPLOYEE WHERE SALARY>=3000);
------------------------------------------------------------------------------------------------------------
4.2 ALL
-> 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.
-> 찾아진 값에 대해서 AND 연산을 해서 모두 참이면 참이 되는 셈이 됩니다. ALL은 "모든 비교값 보다 크냐"고 묻는 것이 되므로
최대값보다 더 크면 참이 됩니다.
-> D5인 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름, 급여를 출력해보자.
ex) select EMP_NAME, SALARY FROM EMPLOYEE where salary > all(select salary from employee where dept_code='D5');
------------------------------------------------------------------------------------------------------------
4.3 ANY 연산자
-> 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참입니다.
-> 찾아진 값 중에서 가장 작은 값, 즉 최소값 보다 크면 참이 됩니다.
-> 부서번호가 D1인 급여보다 많은걸 출력해라.
ex) select emp_name, salary from employee where salary > any(select salary
from employee where dept_code = 'D1');
'IT일반과목 > DataBase' 카테고리의 다른 글
데이터베이스 20180820 (학원5) 학원 과제 (0) | 2018.08.20 |
---|---|
데이터베이스 20180820 (학원4) (0) | 2018.08.20 |
데이터베이스 (집공부4) (0) | 2018.08.19 |
데이터베이스 20180817 (학원3) (0) | 2018.08.17 |
데이터베이스 (집공부3) (0) | 2018.08.16 |