본문 바로가기
Study/데이터베이스

오라클 SELECT INTO / INSERT INTO SELECT

by ✲ 2018. 3. 20.
728x90
반응형

오라클 SELECT INTO / INSERT INTO SELECT 


SELECT INTO


쿼리 결과를 새 테이블로 만든다. 

오라클에서는 CREATE TABLE 테이블명 AS SELECT * FROM 테이블명 

기존에 존재하지 않는 테이블이 새로 생성된다. (일종의 뷰와 동일한 효과) 


SQL - 비절차적 언어 / JAVA - 절차 언어 



예제) 

업무가 SALESMAN인 직원만 따로 찾아서 emp_salesman이라는 테이블을 생성해서 넣으시오. 

create table emp_salesman as select * from emp where job = 'SALESMAN';

결과확인 

select * 

from  emp_salesman;



INSERT INTO SELECT 


쿼리 결과를 기존의 테이블에 추가한다 ( 기존 테이블이 존재해야함) 

INSERT INTO 테이블명1 SELECT * FROM 테이블명2 WHERE 조건절...

SELECT 하는 테이블과 INSERT 하는 테이블은 동일한 구조를 가져야 함

두개의 별도 쿼리를 하나로 합침


예제)

emp 테이블에서 job이 salesman인 레코드를 찾아서 emp_salesman 테이블에 추가하시오


테이블만 존재하는 상태 즉, 내용없음 

truncate table emp_salesman; 

내용 확인 

select * from  emp_salesman; 

테이블 생성 

insert into emp_salesman select *from emp where job='SALESMAN';

내용 확인 

select * from  emp_salesman;


SELECT INTO 와 INSERT INTO SELECT 예제로 만들어진 테이블이 동일한 결과는 나오지만 만들어지는 과정이 다름 



CASE... WHEN....END  


SQL의 조건문 (if/switch문)에 해당 

조건값에 따른 처리를 구분할 수 있다. 

CASE WHEN 조건값 1 THEN ...

     WHEN 조건값 2 THEN ...

     ELSE...

END 


예제)

emp테이블에서 직원명, ABBR_JOB을 최대 3자로 앞쪽 세 자를 소문자로 출력하고, JOB을 같이 표시하시오


select emp,ename

    case

        when length(emp.job) > 3 then lower(substr(emp.job, 1, 3))

        when length(emp,job) <=3 then lower(emp.job)

    end as abbr_job, emp.job from emp;


lower (전부 소문자) / substr (첫자부터 시작해서 3자리까지) 



728x90
반응형

댓글