SQL 데이터 베이스 강의 영상 및 서브커리에 관하여...

Posted by 마이바티스
2017. 12. 27. 16:03 IT
반응형





단일행

다중행


**단일 행(Single Row) 서브 쿼리는 수행 결과가 오직 하나의 로우(행, row)만을 반환하는 서브 쿼리를 갖는 것을 말합니다. 

단일 행 서브 쿼리문에서는 이렇게 오직 하나의 로우(행, row)로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내게 되는데 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =, >, >=, <, <=, <>를 사용해야 합니다. 




EX)

SCOTT의 급여와 동일하거나 더 많이 받는 사원 명과 급여를 출력하시오.


SELECT ENAME, SAL  

FROM EMP

     WHERE SAL >=(SELECT SAL 

         FROM EMP

          WHERE ENAME =‘SCOTT’);





DALLAS에서 근무하는 사원의 이름, 부서 번호를 출력하시오.



SELECT ENAME, DEPTNO 

FROM EMP

WHERE DEPTNO = (SELECT DEPTNO 

           FROM DEPT

   WHERE LOC = ‘DALLAS’);





다중행


*다중 행 서브 쿼리는 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용하는 서브 쿼리입니다. 

다중 행 서브 쿼리는 반드시 다중 행 연산자(Multiple Row Operator)와 함께 사용해야 합니다.



결과가 2개 이상 구해지는 쿼리문을 서브 쿼리로 기술할 경우에는 다중 행 연산자와 함께 사용해야 합니다

.

IN : 메인 쿼리의 비교 조건(‘=’ 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참입니다.

(in은 잘 안쓰인다..)-성능때문에..



ANY, SOME: 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참입니다.


ALL:메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.




 *EXIST: 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참입니다.

exist를 쓰면(in대신)-> 처리속도가 빠르다?

exitst는 왼쪽이 컬럼이 빠진다. 


-성능 좋아짐(비교회수가 in에 비해서 적어짐)


where 뒤에 deptno는 내부 서부커리의 조언컬럼으로 이동


select ename, sal, deptno

from emp e 

where exists(select distinct deptno

from emp

where deptno=e.deptno

and sal>=3000)





all연산자


ALL 조건은 메인 쿼리의 비교 조건이 *서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.* 

찾아진 값에 대해서 AND 연산을 해서 모두 참이면 참이 되는 셈이 됩니다.

 > ALL 은 “모든 비교값 보다 크냐”고 묻는 것이 되므로 최대값보다 더 크면 참이 됩니다. 


부등호를 단독으로 하면 안되지만 all은 붙이면 된다

모든 값도다 크면 되는구나......


ex)30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 

사람의 이름, 급여를 출력하는 쿼리문을 작성해 봅시다. 




SELECT ENAME, SAL

FROM EMP

WHERE SAL > ALL(SELECT SAL

                FROM EMP

                WHERE DEPTNO =30);



위의 문장과 밑에 코딩은 같다


SELECT ENAME, SAL

FROM EMP

WHERE SAL > (SELECT MAX(SAL)

                FROM EMP

                WHERE DEPTNO =30);



EX)모든 영업 사원들중의 최대 급여 많이 받는 

사원들의 이름과 급여와 직급(담당 업무)를 출력하되 /영업 사원은 출력하지 않습니다



다중 행 서브쿼리 => SELECT ENAME, SAL, JOB    FROM EMP

         WHERE SAL> ALL( SELECT SAL 

                    FROM EMP 

                    WHERE JOB='SALESMAN');

단일 행 서브쿼리 => SELEC T ENAME, SAL, JOB    FROM EMP

    WHERE SAL> ( SELECT  MAX(SAL)  

  FROM  EMP 

              WHERE JOB='SALESMAN');







any연산자


ANY 조건은 메인 쿼리의 비교 조건이 *서브 쿼리의 검색 결과와 하나 이상만 일치하면 참입니다.*

> ANY는 찾아진 값에 대해서 하나라도 크면 참이 되는 셈이 됩니다. 

그러므로 찾아진 값 중에서 가장 작은 값 즉, 최소값 보다 크면 참이 됩니다. 






반응형