SQL 학과별로 최대지도비의 교수와 지도비찾기

select pname, dsal, deptno 
from prof 
where (deptno,dsal) in 
( 
    select deptno, max(dsal) 
    from prof 
    group by deptno 
);

여기서 눈 여겨 볼 것은 where (deptno,dsal)부분이다.

서브쿼리 안의 select가 deptno, max(dsal)이므로 where절 역시 deptno와 dsal을 해 줘야 한다.

또, 학과별로 여러 값이 나와야하므로 =이 들어가는게 아닌 in이 있어야 한다.

실행결과

이용신	250	1003 
홍성현	300	1001 
이순신	250	1002 
최철환	230	1007 
고재우	250	1004 
민병관	250	1005

 

SQL 다중행 서브쿼리

비교연산자 >, <, =, <>는

각각 한 개의 값을 비교하는 연산자이다.

하지만 여러개의 값을 비교해야하는 일이 생길 수 있는데,

이런 경우엔 다중행 서브쿼리를 사용할 수 있다.

select pname, dsal 
from prof 
where dsal > All 
( 
select avg(dsal) from prof 
group by deptno 
);

해당 SQL문을 실행하면 avg(dsal)은 한 개의 값이 아님에도 문제없이 실행이 되는 것을 볼 수 있다.

실행결과

고재우	250 
이용신	250 
민병관	250 
이순신	250 
장민주	280 
홍성현	300

최댓값은 ALL로 나타낼 수 있으며, 반대로 최솟값은 ANY로 나타낼 수 있다.