단일행 서브 쿼리

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

 

 

 

 

 

 

안아줘! 쿼리!