다중행 서브 쿼리
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%');