Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- static
- react
- 추상 메서드
- 모달창 여러개
- oracle 연동
- static메서드
- 깃 명령어
- 다운캐스팅
- 템플릿
- SUB Query
- AOP란?
- IP
- static 예제
- 사용자 데이터그램 프로토콜
- Servlet 맵핑
- 상속
- 싱클톤패턴
- order by
- spring annotation
- 다중 모달창
- downcasting
- 리스트 모달창
- Java
- 이클립스 오라클 연동
- singleton
- 객체협력
- GROUP BY
- 오라클 비교연산자
- 스프링 모달창
- 형변환
Archives
- Today
- Total
모든지 기록하자!
[Oracle] SUB QUERY 본문
728x90
서브 쿼리의 정의
- 서브 쿼리는 하나의 SELECT 문장장의 절 안에 포함된 또 하나의 SELECT 문장이다.
- 서브 쿼리를 포함 하고 있는 쿼리문을 메인 쿼리, 포함된 또 하나의 쿼리를 서브 쿼리라고 한다.
- 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러쌓아야 한다.
- 서브 쿼리는 메인 쿼리가 실행되기 이전에 한 번만 실행된다.
-- SUB QUERY
-- QUERY 안의 QUERY
-- 한개의 행(ROW, RECORD)에서 결과 값이 반환되는 QUERY
SELECT 단일 ROW 단일 COLUMN(산출되는 데이터는 한개, 컬럼도 한개)
FROM 다중 ROW 다중 COLUMN
WHERE 다중 ROW 다중 COLUMN
단일 행 서브 쿼리
- 단일 행(Single Row) 서브 쿼리는 수행 결과가 오직 하나의 로우(행, row)만을 반환하는 서브 쿼리를 말한다.
- 단일 행 서브 쿼리문은 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =, >, >=, <, <=, <>를 사용해야 한다.
-- SELECT
SELECT employee_id, first_name,
(SELECT first_name
FROM employees
WHERE employee_id = 100)
FROM employees;
SELECT first_name,
(SELECT SUM(salary) FROM employees),
(SELECT AVG(salary) FROM employees)
FROM employees;
SELECT first_name, salary, (SELECT AVG(salary) FROM employees)
FROM employees
WHERE department_id = 30;
다중 행 서브 쿼리
- 다중 행 서브 쿼리는 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용한다.
- 다중 행 서브 쿼리는 반드시 다중행 연산자와 함께 사용해야 한다.
종류 | 의미 |
IN | 메인 쿼리의 비교조건이 서브 쿼리의 결과 중에서 하나라도 일치하면 참이다. |
ANY, SOEM | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참이다. |
ALL | 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다. |
EXIST | 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참이다. |
-- FROM
SELECT empno, ename, sal
FROM ( SELECT employee_id as empno, first_name as ename, salary as sal
FROM employees
WHERE department_id = 100 )
WHERE sal > 8000;
-- 부서번호가 50번, 급여가 6000이상인 사원
SELECT *
FROM employees
WHERE department_id = 50
AND salary >= 6000;
SELECT employee_id, first_name, salary, last_name
FROM ( SELECT *
FROM employees
WHERE department_id = 50)
WHERE salary > 6000;
-- 업무별 급여의 합계, 인원수, 사원명, 월급
SELECT job_id, COUNT(*), first_name
FROM employees
GROUP BY job_id;
SELECT e.employee_id, e.first_name, j."급여합계", j.인원수
FROM employees e, ( SELECT job_id, SUM(salary) as "급여합계", COUNT(*) as 인원수
FROM employees
GROUP BY job_id) j;
-- where
-- (평균 급여)보다 많이 받는 사원
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary)
FROM employees);
-- 부서가 90인 사원의 업무명
SELECT job_id, first_name, department_id
FROM employees
WHERE job_id IN(SELECT job_id
FROM employees
WHERE department_id = 90);
-- 부서별로 가장 급여를 적게 받는 사원의 급여와 같은 급여를 받는 사원
SELECT first_name, salary, department_id
FROM employees
WHERE salary IN (SELECT MIN(salary)
FROM employees
GROUP BY department_id);
-- 부서별로 가장 급여를 적게 받는 사원과 급여
SELECT first_name, employee_id, salary, department_id
FROM employees
WHERE (department_id, salary) IN ( SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id)
728x90
'Database' 카테고리의 다른 글
[Oracle] 무결성 제약 조건 (0) | 2021.06.01 |
---|---|
[Oracle] SUB QUERY 예제 (0) | 2021.05.31 |
[Oracle] ORDER BY , GROUP BY 예제 (0) | 2021.05.28 |
[Oracle] hr 표준함수 예제 (0) | 2021.05.28 |
[Oracle] JOIN 과 예시 (0) | 2021.05.28 |
Comments