단일행 서브 쿼리
2021. 12. 10. 19:22ㆍ오라클(Oracle) 데이터 베이스
서브쿼리
서브쿼리란 SQL문을 실행하는데 필요한 데이터를 추가로 조회하기 위해 SQL내부에 사용하는 SELECT문을 의미.
두개의 SELECT문을 하나의 SELECT문으로 합쳐서 사용할 수 있다.
- 서브 쿼리는 비교 또는 조회 대상의 오른쪽에 괄호()로 묶어서 사용
- 서브 쿼리에서 ORDER BY 절을 사용할 수 없다.
- 서브 쿼리 SELECT 절에는 메인쿼리의 비교 대상과 같은 자료형과 같은 개수로 지정해야 함
- 서브 쿼리 SELECT문의 결과 행 수는 메인궈리의 연산자 종류와 호환 가능해야 함
단일행 서브 쿼리 연산
- 단일행 서브 쿼리는 실행 결과가 단 하나의 행으로 나오는 서브 쿼리를 뜻한다.
- 서브쿼리에서 출력되는 결과가 하나-메인쿼리와 단일행 연산자를 사용하여 비교
문제1) 부서 위치가 DALLAS인 모든 사원의 이름, 부서 번호를 출력하시오.(*SCOTT 데이터 베이스)
메인 쿼리 | (서브쿼리 조건) 사원의 이름, 부서 번호 |
서브쿼리 | 부서위치가 DALLAS |
SELECT ENAME, DEPTNO
FROM EMP
WHERE DEPTNO;
SELECT *
FROM DEPT;
WHERE LOC='DALLAS';
최종 SQL문
SELECT ENAME, DEPTNO
FROM EMP
WHERE DEPTNO=(SELECT DEPTNO
FROM DEPT;
WHERE LOC='DALLAS';)
문제 2) SALES 부서의 모든 사원의 이름(ENAME)과 급여(SAL)를 출력하시오.(*SCOTT 데이터 베이스)
메인 쿼리 | (서브쿼리 조건) 이름과 급여 |
서브쿼리 | SALES 부서 |
SELECT ENAME, SAL
FROM EMP;
SELECT DEPTNO
FROM DEPT
WHERE DNAME='SALES';
최종 SQL문
SELECT ENAME, SAL
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO
FROM DEPT
WHERE DNAME='SALES';)
문제3) EMP 테이블에서 전체 사원 평균 급여보다 적거나 같은 급여를 받고 있는 20번 부서의 사원 및 부서의 정보를 구하라.
(*SCOTT 데이터 베이스)
메인 쿼리 | (서브쿼리 조건) 20번 부서의 사원 및 부서의 정보 (EMP와 DEPT 테이블 조인) |
서브쿼리 | 전체 사원의 평균 급여보다 작거나 같은 |
최종 SQL
SELECT E.EMPNO, E.ENAME, E.JOB, E.SAL, D.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND E.DEPTNO=20
AND E.SAL<=(SELECT AVG(SAL)
FROM EMP);
'오라클(Oracle) 데이터 베이스' 카테고리의 다른 글
(오라클) 제약 조건 (1) | 2021.12.22 |
---|---|
조인(Join): 여러 테이블을 하나의 테이블처럼/ 등가 조인/ 비등가 조인 (0) | 2021.12.11 |
오라클(Oracle) 조인 총정리: 나만 알아볼 수 있을 듯? (0) | 2021.12.08 |
오라클(ORACLE) DECODE 함수와 CASE 함수 (0) | 2021.12.05 |
오라클(Oracle) INSTR 함수 (0) | 2021.12.02 |