DBMS/Summary

서브 쿼리문.

gandus 2010. 5. 18. 13:54


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);

*/