728x90
# SUBQUERY
l 서브쿼리의 종류
- Single row subqeury
서브쿼리에서 메인쿼리로 하나의 값이 리턴
연산자 : =, >, <, >=, <=, !=, <>, ^=
- Multiple row subquery 서
서브쿼리에서 메인쿼리로 여러 개의 값이 리턴
연산자 : in, not in, >any, all,
- Multiple column subquery : 서브쿼리에서 메인쿼리로 여러 개의 컬럼값이 리턴l 서브쿼리를 쓸 수 있는 절
- 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 |