• 분류 전체보기 (160)
    • 개인프로젝트 (5)
      • 시연영상모음 (4)
      • 주저리주저리.. (1)
    • 자바스크립트이야기 (69)
      • ExtJS (30)
      • ExtJS 유의사항 (3)
      • HTML5 (1)
      • jQuery (17)
      • jQuery플러그인소개 (9)
      • jQuery UI 소개 (9)
    • 스프링연동하기 (23)
      • spring3 mvc 설정 (4)
      • spring3 mybatis 설정 (4)
      • spring3 기타설정 (11)
      • ibatis and mybatis (4)
    • DB (26)
      • MySQL vs MS-SQL vs O.. (5)
      • MySQL (10)
      • MSSQL (5)
      • Oracle (6)
    • 서버에웹환경구축하기 (13)
      • 1.VirtualBox+CentOS .. (5)
      • 2.JAVA(JDK) 설치 (1)
      • 3.Apache+Tomcat 설치 (3)
      • 4,SVN Server 설치 (1)
      • 5.마리아DB(MariaDB) 설치 (2)
      • 6.몽고DB(MongoDB)설치 (1)
    • 샘플소스 (14)
      • 샘플소스(JAVA) (7)
      • 샘플소스(JSTL) (4)
      • 샘플소스(jQuery/스크립트) (3)
    • 에디터연동 (5)
      • NAVER-스마트에디터 (4)
      • DAUM-다음에디터 (1)
    • 블로그팁 (3)
    • 디지털이야기 (2)
댓글
DB
26
/144
2014. 8. 13. 10:43
오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...)


2014/08/12 - [DB/MySQL] - MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...)


2014/08/13 - [DB/MSSQL] - MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM)


오라클에서 데이터 이관하는 작업과 같은 일괄로 다른 테이블에 INSERT해야하는 경우가 생긴다.

이럴경우 INSERT INTO .. SELECT ... FROM 을 이용하여 다른 테이블에 데이터를 

일괄 등록이 가능하다


간단하게 진행을 해보도록 하자


1. original_table 생성 (기존 테이블)

create table original_table (
  id varchar(10),
  title varchar(20),
  flag varchar(1)
)

2. new_table 생성(데이터 이관하기 위한 신규 테이블)

create table new_table (
  id varchar(10),
  title varchar(20)
)

3. original_table에 임의 데이터 생성

insert into original_table (id,title,flag) values('1','제목11','Y');
insert into original_table (id,title,flag) values('2','제목22','Y');
insert into original_table (id,title,flag) values('3','제목33','Y');
insert into original_table (id,title,flag) values('4','제목44','Y');
insert into original_table (id,title,flag) values('5','제목55','Y');
insert into original_table (id,title,flag) values('6','제목66','Y');
insert into original_table (id,title,flag) values('7','제목77','Y');
insert into original_table (id,title,flag) values('8','제목88','N');
insert into original_table (id,title,flag) values('9','제목99','Y'); 

4. original_table -> new_table 로 flag값이 N인 데이터만 이관

    (예상 결과 = id값이 8인 데이터만 insert 되겠지? ㅎㅎ)

INSERT INTO new_table(id,title)
SELECT id,title
  FROM original_table 
WHERE flag = 'N'

5. 신규 테이블에 INSERT 데이터 확인

SELECT * FROM new_table

- 실행결과



역시 예상대로 ID값이 8인 데이터만 INSERT 되었다.

일괄로 모든 데이터 넣고 싶을경우에는 WHERE 조건만 빼면 될것이다.




슈퍼맨슈퍼맨슈퍼맨



도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!

저작자표시 (새창열림)

'DB > Oracle' 카테고리의 다른 글

Oracle - if ~ else 조건문 사용하기 : DECODE  (0) 2014.08.24
오라클 - 널체크(NVL 사용하기)  (0) 2014.08.23
ORACLE 오라클 rownum을 이용하여 페이징 처리하기  (0) 2014.08.15
오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR  (0) 2014.08.12
오라클(Oracle) sequence 생성, 등록, 최종 시퀀스값 조회하기  (2) 2014.08.11
/143
2014. 8. 13. 09:30
MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM)

2014/08/12 - [DB/MySQL] - MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...)


2014/08/13 - [DB/Oracle] - 오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...)





이번 포스팅은 MS-SQL에서 INSERT SELECT문과 SELECT INTO FROM문을 이용하여 데이터를 

일괄로 삽입 해보고자 한다.


1. INSERT SELECT


- temp_table (기존에 쌓여있는 데이터가 들어있는 테이블)

CREATE TABLE temp_table(
   id varchar(20),
  title varchar(20),
  flag varchar(1)
)


- test_table (temp_table 의 데이터를 insert하기위한 테이블)

CREATE TABLE test_table (
   id varchar(20),
  title varchar(20)
)


- temp_table에 임의의 데이터를 INSERT

insert into temp_table(id,title,flag) values('1','제목1','Y');
insert into temp_table(id,title,flag) values('2','제목2','N');
insert into temp_table(id,title,flag) values('3','제목3','Y');
insert into temp_table(id,title,flag) values('4','제목4','Y');
insert into temp_table(id,title,flag) values('5','제목5','N');
insert into temp_table(id,title,flag) values('6','제목6','Y');
insert into temp_table(id,title,flag) values('7','제목7','Y');
insert into temp_table(id,title,flag) values('8','제목8','N');
insert into temp_table(id,title,flag) values('9','제목9','Y'); 

이제부터 temp_table -> test_table에 id값과 title값만을 insert하고자 한다.

조건으로 flag 값이 'Y' 인 데이터만을 INSERT 하도록 하겠음


- INSERT ... SELECT ... FROM .. 실행 

   (조건 사용여부는 상황에 따라 넣어주면 되겠다)

INSERT test_table(id,title)
SELECT id,title
FROM temp_table
WHERE flag = 'Y'


- 실행결과




정상적으로 test_table에 flag값이 Y인 데이터가 일괄로 들어같 것을 확인 할 수 있었다.


※ 기존 테이블과 신규 테이블구조가 동일하면 하단처럼 INSERT SELECT 가능

INSERT test_table
SELECT * FROM temp_table



2. SELECT INTO FROM


이번 방법은 TABLE COPY 및 CREATE VIEW와 비슷한 개념인듯..


사용법


SELECT [컬럼 1] , [컬럼 2]
INTO [신규 생성할 테이블명]
FROM [기존 테이블명]

위와 같은 구조이다.

예를 들어 다음쿼리를 실행시켜 보도록 하자 

SELECT * 
     INTO into_table 
   FROM temp_table

temp_table의 데이터를 into_table을 생성하여 모든 데이터를 insert 하겠다 라는 것과 같은 내용이다.


- 실행결과




확인결과 기존 temp_table의 테이블구조 + 데이터가 동일하게 into_table로 생성 및 insert 되었다.


※ INSERT ... SELECT VS SELECT .. INTO .. FROM 차이점


    - INSERT SELECT : INSERT할 테이블 및 SELECT 할 테이블이 모두 존재

    - SELECT INTO : SELECT 테이블이 존재하고 INSERT 테이블이 존재하지 않을경우



슈퍼맨슈퍼맨슈퍼맨



도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!

저작자표시 (새창열림)

'DB > MSSQL' 카테고리의 다른 글

MS-SQL - 널체크(ISNULL 사용하기)  (0) 2014.08.23
MS-SQL 2005 이상 row_number() over(order by 정렬조건) 을 이용하여 페이징쿼리를 동작시켜보자  (0) 2014.08.15
MS-SQL 계층형 트리구조 쿼리 (재귀호출) - with ...(col 1, col 2 ...,col n) as ... union .  (2) 2014.08.12
MS-SQL 시퀀스 identity 생성 및 초기화하기  (0) 2014.08.11
/141
2014. 8. 12. 15:10
MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...)



2014/08/13 - [DB/Oracle] - 오라클(Oracle) 데이터를 일괄로 다른테이블에 INSERT 하기 (INSERT INTO ... SELECT ... FROM ...)


2014/08/13 - [DB/MSSQL] - MS-SQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...)


이번에는 기존에 데이터가 쌓여있는 테이블의 존재하는 모든 데이터를 일괄로 신규로 생성한 테이블에 옮기고자 할때  INSERT ... SELECT ... FROM 을 이용하여 데이터를 이관할 수 있다.

우선 2가지 테이블이 존재한다고 가정하자  굿모닝


* TEMP_TABLE (기존에 데이터가 쌓여있는 테이블)

create table temp_table(
  id varchar(10),
  title varchar(20),
  flag varchar(1)
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

* TEMP_TABLE에 들어갈 가상의 데이터 INSERT

insert into temp_table(id,title,flag) values('1','제목1','Y');
insert into temp_table(id,title,flag) values('2','제목2','N');
insert into temp_table(id,title,flag) values('3','제목3','Y');
insert into temp_table(id,title,flag) values('4','제목4','Y');
insert into temp_table(id,title,flag) values('5','제목5','N');
insert into temp_table(id,title,flag) values('6','제목6','Y');
insert into temp_table(id,title,flag) values('7','제목7','Y');
insert into temp_table(id,title,flag) values('8','제목8','N');
insert into temp_table(id,title,flag) values('9','제목9','Y'); 

* REAL_TABLE (신규로 특정 컬럼만 이관하기 위한 테이블)

create table real_table(
  id varchar(10),
  title varchar(20)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

※ 위와같이 2개의 테이블 생성한 후 temp_table에만 데이터를 넣어놓은 상태이다

    temp_table -> real_table에 id,title 컬럼만 일괄로 넣고자 한다.

    하지만 조건으로 flag값이 'N'인 데이터만 넣고자 한다.

    그렇다면 결론적으로 real_table에 들어가야 하는 데이터들은

    id값이 2,5,8 인 데이터들만 들어가야 할 것이다 .

 

* INSERT ... SELECT ... FROM  실행

INSERT real_table(id,title)
SELECT id,title
FROM temp_table
WHERE flag = 'N'

* 실행 결과




위와 같이 정상적으로 temp_table의 데이터 중 flag값이 'N' 인 3개의 데이터들이 id,title값만 real_table 테이블에 데이터가 제대로 들어가는 것을 확인 할 수 있다.



슈퍼맨슈퍼맨슈퍼맨



도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!

저작자표시 (새창열림)

'DB > MySQL' 카테고리의 다른 글

MySQL - 널체크(IFNULL 사용하기)  (0) 2014.08.23
MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자  (0) 2014.08.15
MySQL 인코딩 UTF-8 설정하기 [한글깨짐문제 해결]  (7) 2014.08.12
MySQL 시퀀스 auto_increment 생성 및 초기화하기  (0) 2014.08.11
MySQL 대소문자 구분 안하기 - lower_case_table_names 변경  (7) 2014.07.10
/142
2014. 8. 12. 15:10
MySQL 인코딩 UTF-8 설정하기 [한글깨짐문제 해결]

2014/08/05 - [서버에웹환경구축하기/5.마리아DB(MariaDB) 설치] - [서버구축 - 11] 서버에 MySQL과 동일한 마리아DB(MariaDB) 설치하기

2014/08/05 - [서버에웹환경구축하기/5.마리아DB(MariaDB) 설치] - [서버구축 - 12] 마리아DB(MariaDB) 인코딩 UTF-8 설정하기


mysql 설치 시 UTF-8 환경으로 default 설치 되는 경우도 있지만, 본인처럼 한글이 깨지는 현상 발생시 mysql 환경을 utf-8으로 맞춰주는 포스팅을 진행하고자 한다.


대부분 mysql 기본 설치 시, 인코딩 타입이 latin(?) 타입으로 주로 설치되는것을 확인 할 수 있었다.


다음 명령어를 통하여 본인의 mysql 문자 인코딩을 확인하도록 하자똑똑

SHOW VARIABLES LIKE 'c%'

* 문자 인코딩 목록확인



확인결과 system 부분만 utf8이고 그외에는 latin1으로 인코딩 되어있다.

다음 파일을 수정하여 utf8 환경으로 변경 하도록 하자ㅋㅋㅋ


윈도우일경우 my.ini 

리눅스일경우 my.cnf


파일을 찾아서 각각 위치에 맞추어 추가를 해주도록 하자


본인은 local환경이 윈도우에 APM 파일을 설치하여 확인한 결과이다.

100% 되는방법이라고 장담은 못한다. 보편적인 방법을 설명하는 것 뿐이다.

본인의 경우, 윈도우/리눅스 MySQL 설치 후,  인코딩 설정시에는 적용이 되서 포스팅을 한것임.파이팅


* my.ini 또는 my.cnf 코드 추가

[client]
.
.
#하단추가
default-character-set = utf8

[mysqld]
.
.
#하단추가
init_connect="SET collation_connection = utf8_general_ci"  
init_connect="SET NAMES utf8"  
default-character-set = utf8  
character-set-server = utf8  
collation-server = utf8_general_ci  

[mysqldump]
.
.
#하단추가
default-character-set = utf8

[mysql]
.
.
#하단추가
default-character-set = utf8


데몬 재실행 후 다시한번 인코딩 확인 명령어를 찍어서 확인해보도록 하자


* 문자 인코딩 목록 재확인(1)




위와같이 대부분 utf8로 잡혔다 하지만 database 부분에 대해서는 latin1이 여전히 적용되있었다 .

아마 기존에 신규 생성된 database가 latin1으로 생성되서 그런거 같다.

그래서 신규 생성했던 2가지 database 를 제거 후 다시한번 확인 해보았다. 대답해



* 문자 인코딩 목록 재확인(2)



확인결과 정상적으로 UTF-8 로 인코딩 타입이 적용되었다.참잘했어요



슈퍼맨슈퍼맨슈퍼맨



도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!

저작자표시 (새창열림)

'DB > MySQL' 카테고리의 다른 글

MySQL LIMIT를 사용하여 페이징쿼리를 동작시켜보자  (0) 2014.08.15
MySQL SELECT 쿼리로 한꺼번에 다른 테이블에 INSERT 하기 (INSERT ... SELECT ... FROM ...)  (0) 2014.08.12
MySQL 시퀀스 auto_increment 생성 및 초기화하기  (0) 2014.08.11
MySQL 대소문자 구분 안하기 - lower_case_table_names 변경  (7) 2014.07.10
MySQL GROUP CONCAT 이용하여 쿼리목록을 컬럼 하나로 보여주기 (세로를 가로로)  (0) 2014.07.09
/140
2014. 8. 12. 08:00
MS-SQL 계층형 트리구조 쿼리 (재귀호출) - with ...(col 1, col 2 ...,col n) as ... union .


2014/08/12 - [DB/Oracle] - 오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR


MS-SQL 2005 부터 추가된 재귀쿼리를 설명 하고자 한다.

트리구조 쿼리에 사용하면 유용할 거 같아서 포스팅을 하게 되었다.


with xxx(col 1,col 2...col n)

as ( 

 table 

 union

 table

)

select * from xxx order by order column


오라클 재귀쿼리 호출했던 같은 구조의 테이블로 샘플을 짜보겠다.


2014/08/12 - [DB/Oracle] - 오라클 계층형 트리구조 쿼리 (재귀호출) - START WITH .. CONNECT BY PRIOR


1. 테이블 생성

create table tree_table(
	id int not null,
    parent_id int not null,
    name nvarchar(30) not null
);

2. 트리쿼리 출력을 위한 임의의 데이터 생성

-- 1depth 
insert into tree_table(id,parent_id,name)
values(1,0,'1depth 1');
insert into tree_table(id,parent_id,name)
values(2,0,'1depth 2');
insert into tree_table(id,parent_id,name)
values(3,0,'1depth 3');

-- 2depth 1
insert into tree_table(id,parent_id,name)
values(4,1,'2depth 1-1');
insert into tree_table(id,parent_id,name)
values(5,1,'2depth 1-2');
insert into tree_table(id,parent_id,name)
values(6,1,'2depth 1-3');

-- 2depth 2
insert into tree_table(id,parent_id,name)
values(7,2,'2depth 2-1');
insert into tree_table(id,parent_id,name)
values(8,2,'2depth 2-2');
insert into tree_table(id,parent_id,name)
values(9,2,'2depth 2-3');

-- 3depth 1
insert into tree_table(id,parent_id,name)
values(10,4,'3depth 1-1');
insert into tree_table(id,parent_id,name)
values(11,4,'3depth 1-2');
insert into tree_table(id,parent_id,name)
values(12,4,'3depth 1-3');

3. 재귀쿼리로 트리목록 출력

WITH tree_query  AS (
  SELECT  
         id
       , parent_id
       , name
       , convert(varchar(255), id) sort  
  	   , convert(varchar(255), name) depth_fullname
    FROM tree_table
    WHERE parent_id = 0
    UNION ALL 
    SELECT
          B.id
        , B.parent_id
        , B.name
        , convert(varchar(255), convert(nvarchar,C.sort) + ' > ' +  convert(varchar(255), B.id)) sort
        , convert(varchar(255), convert(nvarchar,C.depth_fullname) + ' > ' +  convert(varchar(255), B.name)) depth_fullname
    FROM  tree_table B, tree_query C
    WHERE B.parent_id = C.id
) 
SELECT id, parent_id, name, depth_fullname FROM tree_query order by SORT

위의 재귀쿼리 실행결과를 확인해 보도록 하자 





위와같이 트리구조로 출력되는것을 확인하였다. 


구조로 따지자면,


   1depth 1

   |

   -------- 2depth 1-1

   |                 |

   |                 ---- 3depth 1-1

   |                 |

   |                 ---- 3depth 1-2

   |                 |

   |                 ---- 3depth 1-3

   -------- 2depth 1-2

   |

   -------- 2depth 1-3

   |

   1depth 2

   |

   -------- 2depth 2-1

   |

   -------- 2depth 2-2

   |

   -------- 2depth 2-2

   |   

   1depth 3


와같은 구조로 출력되었다.

정렬이 중요한대 위의 정렬은 데이터가 많지 않아 잘 나오는거같다.

만약 재귀쿼리가 정상적으로 출력이 되지 않으면 sort에 대한 부분은 고민하고 수정해보도록 하자.

마지막으로 잘 활용해서 실무에 적용해보도록 합시다~ 파이팅



슈퍼맨슈퍼맨슈퍼맨



도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!

저작자표시 (새창열림)

'DB > MSSQL' 카테고리의 다른 글

MS-SQL - 널체크(ISNULL 사용하기)  (0) 2014.08.23
MS-SQL 2005 이상 row_number() over(order by 정렬조건) 을 이용하여 페이징쿼리를 동작시켜보자  (0) 2014.08.15
MS-SQL SELECT 쿼리로 다른 테이블로 INSERT (INSERT SELECT FROM , SELECT INTO FROM)  (1) 2014.08.13
MS-SQL 시퀀스 identity 생성 및 초기화하기  (0) 2014.08.11
이전 1 2 3 4 5 6 다음

티스토리툴바