본문 바로가기

IT일반과목/DataBase

데이터베이스 (집공부5)

1. 서브쿼리

 -> 서브 쿼리는 하나의 SELECT 문장의 절 안에 포함된 또 하나의 SELECT 문장입니다.

 -> 그렇기에 서브 쿼리를 포함하고 있는 쿼리문을 메인 쿼리, 포함된 또 하나의 쿼리를 서브 쿼리라 합니다.

 -> 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러쌓아야 합니다.

 -> 서브 쿼리는 메인 쿼리가 실행되기 이전에 한번만 실행이 됩니다.



------------------------------------------------------------------------------------------------------------


2. 단일 행 서브 쿼리

 -> 단일행(Single Row) 서브 쿼리는 수행 결과가 오직 하나의 로우(행, row)만을 반환하는 서브 쿼리를 갖는 것을 말합니다.

 -> 단일 행 서브 쿼리문에서는 이렇게 오직 하나의 로우(행,row)로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내게 되는데 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =,>,>=,<,<=,<> 를 사용해야 합니다.




------------------------------------------------------------------------------------------------------------


3. 서브 쿼리에서 그룹 함수의 사용

 -> 평균 급여를 구하는 쿼리문을 서브 쿼리로 사용하여 평균 급여보다 더 많은 급여를 받는 사원을 검색하는 문장

ex) select EMP_NAME, salary from EMPLOYEE where salary > (select avg(salary) from employee);


------------------------------------------------------------------------------------------------------------


4. 다중 행 서브 쿼리
 -> 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용하는 서브 쿼리입니다.
 -> 다중행 서브 쿼리는 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용해야 합니다.

종 류

의 미

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');