it공부

연관성 없는 서브쿼리를 사용하는 DML명령

콩쨈 2020. 7. 5. 21:26
반응형

서브쿼리

-   하나의 sql문 안에 포함된(nested)또 다른 sql
-   서브쿼리는 select,from,where절에 사용가능
-   from절에 사용되는 서브쿼리를 inline-view 라고 하고 독립실행이 가능해야함
-   서브쿼리는 ( )로 묶어 기술  --깊이가 3~5정도 되는경우가 다분한데 복잡한이경우 서브쿼리를 쓰는이유는 조인을 줄일수있음
-   전체 로직은 복잡하나 조인을 줄일수있음
-   쿼리의 실행순서 :from절->where절 ->select절 이지만각절에 서브쿼리가 존재하면 각 절에서 서브쿼리부터 수행

(서브쿼리 종류)
1.연관성없는 서브쿼리 
-   메인쿼리에 사용된테이블과 서브쿼리에 사용된 케이블이 조인으로 연결되지않은경우

 

 

예시

직무이력테이블과 사원테이블에서 사원번호와 직무코드가 같은 사원정보를 조회하시오
(사원번호,사원명, 직위코드)
  
                            
      --  (메인쿼리)        
     select EMPLOYEE_ID as 사원번호,
            EMP_NAME as 사원명,
            JOB_ID as 직위코드
      from JOB_HISTORY; 
            
                            
         
      --  (서브쿼리)
select EMPLOYEE_ID as 사원번호,
       EMP_NAME as 사원명,
       JOB_ID as 직위코드 
  from EMPLOYEES
 where (EMPLOYEE_ID,JOB_ID)=(서브쿼리)

      --  (결합)
select EMPLOYEE_ID as 사원번호,
       EMP_NAME as 사원명,
       JOB_ID as 직위코드 
  from EMPLOYEES
 where (EMPLOYEE_ID,JOB_ID)=(select EMPLOYEE_ID,JOB_ID
                                      from JOB_HISTORY);

2.연관성 없는 서브쿼리를 사용하는 DML명령 


1)update문 
-   자료의 갱신을 위한 명령 
-   사용형식 
       update 테이블명[별칭 
        set  컬럼명1=값1[,
             컬럼명2=값2[, 
                  :
             컬럼명n=값n]
        [where 조건];

 

예시

회원테이블에서 회원들의 평균마일리지로 모든회원의 마일리지를 변경하시오 서브쿼리: 회원들의 평균마일리지

--(서브쿼리)
select avg(MEM_MILEAGE)from member;

--(메인쿼리)모든 회원의 마일리지 값을서브쿼리결과로 변경
update member a 
        set  MEM_MILEAGE=(서브쿼리);
        
--(결합)

update member a 
        set  MEM_MILEAGE=(select avg(MEM_MILEAGE)from member);


select MEM_NAME, MEM_MILEAGE from member;      
    rollback;
    
    update member a
    set MEM_MILEAGE=1000
    where MEM_ID ='a001';
   

 

2)delete 문
-테이블에서 자료삭제


(사용형식)
delete 테이블명
[where조건]
-   where절이 없으면 테이블의 모든자료 삭제
-   서브쿼리를 이용하는경우는 '조건'절에 서브쿼리 존재
       

 

반응형

'it공부' 카테고리의 다른 글

상속의 개요  (0) 2020.07.05
데이터모델링 하는방법  (0) 2020.07.05
SQL 단어 개념 정리  (0) 2020.07.05
select 명령 Oracle SQL  (0) 2020.07.05
PL/SQL  (0) 2020.07.05