SUBQUERY

 내가 이해한 방식 


SELECT * 

FROM emp 

WHERE empno IN ( SELECT mgr 

                FRom EMP 

                ) 

요건 되지만 


SELECT * 

FROM emp 

WHERE empno = ( SELECT mgr 

                FRom EMP 

                ) 

요거는 안됨 서브쿼리의 mgr 값은 여러개인데 

empno 의 값이 여러개인 mgr 값이 될수가 없고

mgr 값중에 1개의 값이 되어야 하기 때문에 in 을 써줘야함 



272 p 이해가 잘 안됨 ]


NOT IN  연산자 사용시 서브쿼리의 결과에 NULL이 존재할 경우

전체가 NULL인 것처럼 동작한다. 


EX) 

SELECT * 

FROM emp 

WHERE empno NOT IN (SELECT mgr 

                                FROM emp ) 


관리자인 사원 정보 조회 


SELECT * 

FROM emp 

WHERE empno IN ( SELECT mgr

                          FROM emp ) 




-- 모르겠다..... 


- multi column subquery non pairwise 

   SELECT * 

   FROM emp 

   WHERE MGR IN ( SELECT mgr 

                  FROM emp 

                  WHERE empno IN ( 7499, 7782 )) 

   AND   deptno IN ( SELECT deptno 

                    FROM emp 

                    WHERE empno IN ( 7499, 7782)) 

                    


- multi column subquery (pairwise ) 

  SELECT * 

      FROM emp 

      WHERE (mgr, deptno ) IN ( SELECT mgr, deptno  

                                FROM emp

                               WHERE empno IN ( 7499, 7782 ) ) 



emp 테이블




---- 고민해봐야 하는것. 

SELECT 

(SELECT dname 

FROM dept 

WHERE deptno = emp.deptno ), 

emp.empno , ename

FROM emp 



----------


상호 연관 서브쿼리 ( sub query 에서 main query 를 참조


속한 부서의 급여 평균보다 높은 직원 조회 


SELECT * 

FROM emp a 

WHERE sal > ( SELECT AVG(sal) 

                  FROM emp b 

                  WHERE deptno = a.deptno ) ; 




















댓글