집합 연산자
Union(합집합, 중복값 제거) : 두 테이블의 결합을 나타내며, 결합시키는 두 테이블의 중복되지 않은 값들을 반환한다.
ex)
SELECT deptno FROM emp
UNION
SELECT deptno FROM dept;
-union all : union과 같으나 두 테이블의 중복되는 값까지 반환한다.
-intersect: 두 행의 집합 중 공통된 행을 반환한다.
SELECT deptno FROM emp
intersect
SELECT deptno FROM dept;
서브쿼리(Subquery): 다른 하나의 SQL문장의 절에 nested된 select문장
단일행 서브쿼리: 오직 한개의 행(값)을 반환한다.
다중 행 서브쿼리: 하나 이상의 행을 반환하는 서브쿼리이다.
IN연산자의 사용
ex)
부서별(deptno)로 가장 급여를 적게 받는 사원과 동일한 급여를 받는 사원의
사원번호(empno), 사원이름(ename), 급여(sal)를 출력한다.
SELECT empno, ename, sal FROM emp
WHERE sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno);
ANY연산자의 사용: 서브쿼리의 결과값 중 어느 하나의 값이라도 만족이되면 결과값을 반환
ex)
직업(job)이 SALEMAN인 사원보다 급여가 많은 사원의 이름(ename) 급여(sal)을 출력하시오.
SELECT ename, sal FROM emp WHERE sal > ANY(SELECT sal FROM emp WHERE jon='SALESMAN');
ALL연산자의 사용: 서브쿼리의 결과와 모든 값이 일치
ex)
부서번호가 20인 사원들보다 급여가 높은 사원의
사원번호(empno), 이름(ename), 급여(sal), 부서번호(deptno)를 출력하시오
SELECT empno, ename, sal, deptno FROM emp WHERE sal > ALL(SELECT sal FROM emp WHERE deptno=20);
다중열 서브쿼리 : 서브쿼리의 결과가 두개 이상의 칼럼으로 반환되어 메인 쿼리에 전달하는 쿼리
ex)
부서별(deptno)로 가장 급여(sal)를 적게 받는 사원의
번호(empno), 이름(ename), 급여(sal), 부서번호(deptno)를 출력하시오
SELECT empno, ename, sal, deptno FROM emp
WHERE (deptno, sal) IN (SELECT deptno, MIN(sal) FROM emp GROUP BY deptno);
'ORACLE SQL' 카테고리의 다른 글
| ORACLE SQL-기본문법8 (0) | 2022.11.03 |
|---|---|
| ORACLE SQL-기본문법7 (0) | 2022.11.03 |
| ORACLE SQL-기본문법5 (0) | 2022.11.01 |
| ORACLE SQL-기본문법4 (0) | 2022.10.31 |
| ORACLE SQL-기본문법3 (0) | 2022.10.30 |