프로그래밍/SQL

SQL-13) 서브 쿼리(Sub Query) : SQL문, SQLD, SQLD 자격증, DB , database

LeeSeunghyuk 2020. 10. 30. 16:46
반응형

 

안녕하세요 이승혁입니다.

오늘은 서브쿼리에 대한 이론과 실습을 진행해 보도록 하겠습니다.

 

※ 서브쿼리(Sub Query) ?

 

    지금까지 살펴본 쿼리는 하나의 쿼리 블록으로 구성된 쿼리였습니다.

    다른 쿼리 블록에 포함된 쿼리 블록을 서브 쿼리, 다른 쿼리 블록(서브 쿼리)를 포함한 쿼리 블록은 메인 쿼리라고 합니다.

 

 

※ 서브쿼리 사용 가능 절

 

     SELECT절, FROM절, WHERE절, HAVING절, ORDER BY절, INSERT문의 VALUES절, UPDATE문의 SET 절  

 

※ 스칼라 서브쿼리

 

    서브 쿼리 중 SELECT 절에 사용하는 서브쿼리입니다.

    스칼라 서브 쿼리는 단일 행 서브쿼리입니다.

   

select dname, (select max(sal)
                from emp
                where emp.deptno = dept.deptno) 부서최대월급
 from dept;

    -- 반환값을 2개 이상 지정시

select dname, (select max(sal),min(sal)
                from emp
                where emp.deptno = dept.deptno) 부서최대최소월급
 from dept;

2개의 값은 반환할 수 없다.

※ 중첩 서브쿼리

 

     서브쿼리 중 WHERE 절과 HAVING 절에 사용하는 서브쿼리입니다.

 

select ename,sal,comm,deptno
from emp               
where sal in (select sal         -- deptno = 30 인 사원들의 월급만을 가진 테이블 ( 서브쿼리 )
               from emp 
               where deptno=30);

 

※ 다중행 / 단일행 서브쿼리

 

    서브쿼리가 반환하는 행의 개수에 따라 다중 행 서브 쿼리, 단일 행 서브 쿼리로 구분할 수 있다.

 

※ 다중 컬럼 서브쿼리

 

1. non pairwise 방식

 

where sal in (select sal

                  from emp

                  where deptno = 30)

     and  comm in (select comm

                            from emp

                            where deptno = 30);

 

2. pairwise 방식

 

where (sal,comm) in ( select sal, comm

                                 from emp

                                 where deptno=30);

 

non pair / pair 결과는 같지만 데이터의 정렬이 다르다.

실행 계획이 다르기 때문이다. 실행 계획까지 알아야 대용량 데이터를 빠르게 검색하고 분석할 있다.

   실행 계획은 튜닝 파트에서 다루도록 하겠습니다.

 

※ 데이터 분석가의 업무 

1. 일상적인 업무 : 매일 매일 봐야하는 통게 데이터를 뽑아내고 시각화

2. 특별한 업무 : 머신러닝을 이용해서 미래를 예측 , 딥러닝을 이용해서 예측과 분석

 

pair wise 방식과 non pair wise 방식은 결과가 같아보이나 실제로는 다른 결과가 나온다.

    - update set sal = 1250 , comm = 300 where ename='KING' ;

 

 

오늘은 서브쿼리를 간단하게 다루어 보고 다음 시간에 조금 더 깊게 진행해보도록 하겠습니다

 

반응형