쥬로그
오라클 - SELECT INTO, INSERT INTO SELECT 본문
< SELECT INTO, INSERT INTO SELECT >
* SELECT INTO(CREATE TABLE SELECT ... INTO)는 쿼리 결과를 테이블로 생성하고 싶을 때 사용한다.
* INSERT INTO SELECT는 쿼리 결과를 기존의 테이블에 추가하고 싶을 때 사용한다.
* SELECT INTO
- 쿼리 결과를 새 테이블로 만든다.
- 기존에 존재하지 않는 테이블이 새로 생성된다. (일종의 뷰와 동일한 효과)
- 오라클에서는 아래와 같이 선언한다. (뷰와 차이점)
CREATE TABLE 테이블명 AS SELECT * FROM 테이블명
√ SQL은 비절차적 언어로 에러 시 튜닝 처리
ex) 업무가 SALESMAN인 직원만 찾아서 따로 emp_salesman이라는 테이블을 생성해서 넣으시오.
-> create table emp_salesman as select * from emp where job = 'SALESMAN';
-> select * from emp_salesman
* INSERT INTO SELECT
- 쿼리 결과를 기존의 테이블에 추가한다. (기존 테이블이 존재해야 함)
- SELECT하는 테이블과 INSERT하는 테이블은 동일한 구조를 가져야 한다.
- 두 개의 별도 쿼리를 하나로 합침
INSERT INTO 테이블명1 SELECT * FROM 테이블명2 WHERE 조건절 ...
ex) 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;
* CASE ... WHEN ... END
- SQL의 조건문(if/switch문)에 해당
- 조건값에 따른 처리를 구분할 수 있다.
CASE WHEN 조건값1 THEN...
WHEN 조건값2 THEN...
ELSE ...
END
ex) emp 테이블에서 직원명, ABBR_JOB을 최대 3자로 앞쪽 세 자를 소문자로 출력하고, JOB을 같이 표시하시오
-> select emp.ename, (ename 출력)
case
when length(emp.job) > 3 then lower(substr(emp.job, 1, 3))
(= length 함수 사용하여 3자 초과일 경우 substr 함수를 이용해 첫자부터 세글자만 lower(소문자)로 출력되도록)
when length(emp.job) <= 3 then lower(emp.job)
(= length 함수 사용하여 3자 이하일 경우 lower(소문자)로 출력되도록)
end as abbr_job, emp.job from emp; (abbr_job과 JOB 함께 출력)
< Point >
☆ 기존에 존재하는 테이블에 쿼리 결과를 넣고 싶을 때는 INSERT INTO SELECT 문장을 사용한다.
☆ 쿼리 결과를 새 테이블에 넣고 싶을 때는 CREATE TABLE SELECT... INTO 문장을 사용한다.
단, 새 테이블에 내용이 비어 있어야 한다.
☆ Name 컬럼의 글자가 3자 이하면 그대로 출력하고 3자가 넘어가면 앞 쪽 세 글자만 출력하는 쿼리는 아래와 같다.
CASE WHEN LENGTH(Name) > 3 THEN SUBSTR(Name, 1, 3) WHEN LENGTH(Name) <= 3 THEN Name END
-> SUBSTR()은 원하는 글자를 떼내는 함수이고, LENGTH()는 문자열 길이를 출력하는 함수이다.
< 요약 >
* SELECT INTO(CREATE TABLE SELECT * FROM...)
- 쿼리문의 결괏값을 새로운 테이블로 만들고 레코드를 추가한다.
* INSERT INTO SELECT
- 쿼리문의 결괏값을 "기존" 테이블에 레코드로 추가한다.
* CASE... WHEN... END
- 조건식에 따라 다른 처리를 할 수 있다.
'Study > Oracle' 카테고리의 다른 글
오라클 - 서브쿼리, 집합연산 (0) | 2021.08.31 |
---|---|
오라클 - LIKE 검색, NULL 값, GROUP BY/HAVING (0) | 2021.08.30 |
오라클 - 조인, 별명, 뷰 (0) | 2021.08.26 |
오라클 - 중복제거, 논리연산자, 결과정렬 (0) | 2021.08.26 |
오라클 - SQL, CRUD (0) | 2021.08.26 |