본문 바로가기

빅데이터과정/SQL

#4_140531_Subquery

728x90

# SUBQUERY



서브쿼리의 종류
Single row subqeury
서브쿼리에서 메인쿼리로 하나의 값이 리턴
연산자 : =, >, <, >=, <=, !=, <>, ^=
Multiple row subquery 
서브쿼리에서 메인쿼리로 여러 개의 값이 리턴

연산자 : in, not in, >any, all,
        - Multiple column subquery : 서브쿼리에서 메인쿼리로 여러 개의 컬럼값이 리턴

서브쿼리를 쓸 수 있는 절
Select : scalar subquery
From : in line view
Where : subquery
Having : subquery
Order by : scalar subquery


문제142. SMITH와 같은 부서번호에서 근무하는 사원들의 이름과 월급과 부서번호를 출력하는데SMITH는 제외하고 출력하시오

SELECT ename, sal, deptno
FROM EMP
WHERE deptno=(SELECT deptno FROM EMP WHERE ename='SMITH') AND ename<>'SMITH';

-       single row subquery : 스미스의 부서번호 한 개값이 리턴되어 비교

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

SELECT ename, sal, job
FROM EMP
WHERE sal IN (SELECT sal FROM EMP WHERE job='SALESMAN');

-       salesman의 월급이 여러 개가 나와 비교가 되기 때문에 ‘=’을 쓰면 안된다
-       그대신 IN을 써 multi row subqeury 를 리턴


문제149. 관리자가 아닌 사원들의 이름을 출력하시오

SELECT ename
FROM EMP
WHERE empno NOT IN (SELECT mgr FROM EMP WHERE mgr IS NOT NULL);

-       not in : T & T & T = T 이지만 T & T & null = null 이 되기 때문에 집합 결과 값 중 null 값이 나온다면 값이 나오지 않는다


문제150. 직업이 SALESMAN인 사원들 중에서 최대월급보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오

SELECT ename, sal
FROM EMP
WHERE sal>(SELECT MAX(sal) FROM EMP WHERE job='SALESMAN');

SELECT ename, sal
FROM EMP
WHERE sal >ALL (SELECT sal FROM EMP WHERE job='SALESMAN');

-       >all 은 가장 큰값과 비교한다
-       모든 것 중에 가장 큰값


문제151. 20번 부서번호인 사원들의 월급중에서 가장 작은 월급보다 더 많은 월급을 받는 사원들의 이름과 월급을 출력하시오

SELECT ename, sal
FROM EMP
WHERE sal >ALL (SELECT MIN(sal) FROM EMP WHERE deptno=20);

SELECT ename, sal
FROM EMP
WHERE sal >any (SELECT sal FROM EMP WHERE deptno=20);

-       >any 가장 작은 값보다 클 때 비교어느값보다 큰 것을 비교
-       어느 값 중에 가장 작은 값



문제199. 이름직업자기가 속한 직업의 인원수를 출력하는데 자기가 속한 직업의 인원수가 3명 이상인것만 출력하시오

SELECT *
FROM (
             SELECT ename, job, COUNT(*) OVER (PARTITION BY job) 인원수
             FROM EMP
             )
WHERE 인원수>=3;




'빅데이터과정 > SQL ' 카테고리의 다른 글

#5_140607_분석함수  (0) 2014.07.10
#5_140607_일일과제(crime)  (0) 2014.07.10
#4_140531_null에 대해서  (0) 2014.07.10
#4_140531_140621_DDL  (0) 2014.07.10
#4_140531_sysdate  (0) 2014.07.10