Oracle DBA/SQL

072 서브 쿼리 사용하기 2(다중 행 서브쿼리)

Nuez 2023. 7. 4. 15:12
반응형

* 서브 쿼리의 종류 2가지

 

1. 단일행 서브쿼리 : 서브쿼리에서 메인 쿼리로 하나의 값이 리턴되는 경우

  • 연산자 : = , >, <, >=, <=, !=, <>, ^=

2. 다중행 서브쿼리 : 서브쿼리에서 메인 쿼리로 여러 개의 값이 리턴되는 경우

  • 연산자 : IN, NOT IN, > ALL, < ALL, > ANY, < ANY

 

* 주의사항 : 

 

단일, 다중 간 연산자 섞어 써도 결과가 출력되는 경우도 있음. 

하지만 oracle이 자체적으로 적절한 연산자로 변경해주는 과정을 한 번 거치게 되므로, 작성 시에 올바른 연산자를 쓰는 것이 좋다. 


 예제. 사원번호가 7788, 7902, 7369번인 사원의 사원번호, 이름을 출력하시오.

SELECT empno, ename
FROM emp
WHERE empno IN (7788, 7902, 7369);


예제. 이름이 SCOTT인 사원과 월급이 같은 사원들의 이름과 월급을 출력하시오.

SELECT ename, sal
FROM emp
WHERE sal = (SELECT sal 
		FROM emp 
    		WHERE ename = 'SCOTT')
	AND ename != 'SCOTT';


 예제. 직업이 SALESMAN인 사원들과 월급이 같은 사원들의 이름과 월급을 출력하시오.

SELECT ename, sal
FROM emp
WHERE sal IN (SELECT sal 
		FROM emp 
		    WHERE JOB = 'SALESMAN')
	AND JOB != 'SALESMAN';

틀린 것 아님. salesman들과 월급 같은 사원들이 없어서 출력결과가 없는 것.