다중행 서브 쿼리

2021. 12. 11. 21:43카테고리 없음

서브쿼리

 

서브쿼리란 SQL문을 실행하는데 필요한 데이터를 추가로 조회하기 위해 SQL내부에 사용하는 SELECT문을 의미.

두개의 SELECT문을 하나의 SELECT문으로 합쳐서 사용할 수 있다.

 

  • 서브 쿼리는 비교 또는 조회 대상의 오른쪽에 괄호()로 묶어서 사용
  • 서브 쿼리에서 ORDER BY 절을 사용할 수 없다. 
  • 서브 쿼리 SELECT 절에는 메인쿼리의 비교 대상과 같은 자료형과 같은 개수로 지정해야 함
  • 서브 쿼리 SELECT문의 결과 행 수는 메인궈리의 연산자 종류와 호환 가능해야 함

 

 

 

 


 

다중행 서브쿼리

 

실행 결과 행이 여러 개로 나오는 서브쿼리

단일행과 달리 결과가 여러 개이므로 단일행 연산자(=,<,> 등)으로 사용할 수 없고 다중행 연산자를 사용해야 메인쿼리와 비교 가능

 

다중행 연산자 설명
IN 메인쿼리의 데이터가 서브쿼리의 결과 중 하나라도 일치한 데이터가 있다면 true
ANY, SOME 메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 하나 이상이면 true
ALL 메인쿼리의 조건식을 서브쿼리의 결과 모두가 만족하면 true
EXISTS 서브쿼리의 결과과 존재하면 (행이 하나 이상이 경우) true

 

 

 

 

 

문제1) 직급이 'CLERK'인 사람의 부서번호(DEPTNO)와 부서명(DNAME)을 출력하시오.

메인쿼리 (서브 쿼리 조건) 부서번호와 부서명
서브쿼리 직급이 CLERK
SELECT DEPTNO, DNAME
FROM   DEPT
SELECT DEPTNO
FROM   ENP
WHERE  JOB='CLERK';

최종 SQL문

SELECT DEPTNO, DNAME
FROM   DEPT 
WHERE  DEPTNO IN(SELECT DEPTNO
                FROM   EMP
                WHERE  JOB='CLERK');

 

 

 

 

 

문제2) 이름에 T를 포함하고 있는 사원들과 같은 부서에서 근무하는 사원의 사번(EMPNO)과 이름(ENAME)을 출력

메인쿼리 (서브 쿼리 조건) 사원의 사번(EMPNO)과 이름(ENAME)
서브쿼리 이름에 T를 포함하고 있는 사원들과 /같은 부서에서 근무
SELECT EMPNO, ENAME
FROM   EMP;
SELECT DEPTNO
FROM   EMP
WHERE  ENAME LIKE '%T%';

최종 SQL문

SELECT EMPNO, ENAME
FROM   EMP
WHERE  DEPTNO IN (SELECT DEPTNO
                    FROM   EMP
                    WHERE  ENAME LIKE '%T%');

 

 

 

귀여운걸 보면 기분이 조쿼든쿼리!