1.단일 select 문으로 검색이 불가능 할경우엔 서브쿼리를 이용한다.
2.서브 쿼리문에는 그룹 함수도 들어갈수 있다.
select ename, sal from emp
where sal = (select min(sal) from emp);
## Havig 도 올수가 있다.
## 각 부서별로 20번 부서중에 월급이 가장 적은사람 보다 최소 월급이 큰사람은??
/*
SELECT deptno, MIN(sal)
FROM emp
GROUP BY deptno
HAVING MIN(sal) > (SELECT MIN(sal) FROM emp WHERE deptno = 20);
*/
## 무었이 문제인가????
## 반환되는 값이 1개 이상이다.
/*
SELECT empno, ename
FROM emp
WHERE sal = (SELECT MIN(sal) FROM emp GROUP BY deptno);
*/
## mysql 은 가능하지만, 다른 DBMS에서 char형의 =(이퀄을 지원하는가 의 문제.)
/*
SELECT ename, job
FROM emp
WHERE job = (SELECT job FROM emp WHERE ename = "SCOTT");
*/
## Multiple-row Subqueries ##
## IN
## 800, 900, 1100, 1300 이 아닌 사람
/*
SELECT empno, ename, job, sal
FROM emp
WHERE sal NOT IN (SELECT sal FROM emp WHERE job = 'CLERK')
AND job <> 'CLERK';
*/
## ANY && ALL
## 4개 중 ( 800, 950, 1100, 1300 )에 어느 값을 만족 하던지 간데 참이 된다.
## 그리고 직업이 <> 'clerk' 아닌사람이다.
## 결국은 1300 보다 작은면 모두 참이다.
## 하지만 ALL 이면800 보다 작아야 한다.
/*
SELECT empno, ename, job, sal
FROM emp
WHERE sal < any (SELECT sal FROM emp WHERE job = 'CLERK')
AND job <> 'CLERK';
*/
## 테이블의 별명(Alia) 설정
## 매니저가 아닌 사람을 찻는것
/*
SELECT e.ename
FROM emp e
WHERE e.empno NOT IN
(SELECT m.mgr
FROM emp m);
*/