본문 바로가기

공부/SQL 활용

7월 31일 - SQL 활용 10 : CSV 변환

CSV 변환

 -> 외부에서 나오는 자료를 데이터베이스에 저장하는 법 

 

 

CSV 변환작업 해보기

 

  -> post.csv 파일 가져와서 zipcode테이블에 저장하기 

 

 

1. 우편테이블 생성 

  - post.csv파일을 참조로 하여 테이블 작성한다. 

  - zipcode는 정해져있는 고정수이고 데이터타입을 num으로 줘도 되지만, 후의 자료 관리 및 편집 시 char형으로

    주는 것이 관리하기에 더 수월하기에 char형으로 데이터타입을 설정해준다. 

 

create table zipcode(
    zipcode  char(7)       not null --우편번호(A열) --데이터타입 char로 줘야 후에 자료 관리할 때 편함. 
    ,sido      varchar(30)  not null --시, 도(B열)
    ,gugun   varchar(50)             --구, 군(C열)
    ,dong    varchar(50)              --동(D열)
    ,li         varchar(50)              --리(E열)    
    ,bunji    varchar(255)            --번지(F열)    
    ,etc      varchar(255)             --동(G열)    
); 

 

2. 우편테이블에 데이터 import 하기

  -> 자동 테이블 생성되기 때문에 앞서 만들었던 zipcode테이블을 먼저 drop시키고 데이터 import한다.

 

  1) ①번 우클릭 후 데이터임포트 클릭, ②번 불러올 csv파일 로드하기, ③번 헤더 체크 풀기

 

1) 데이터 import 하기 - 파일불러오기

 

  2) 테이블 자동생성

    - 테이블이름을 적어줌으로써, 해당 csv파일의 테이블을 자동생성한다.

 

2) 데이터 import하기 - 테이블 자동생성

 

  3) 테이블 열 추가

    - 열1 , 열2, ~는 csv파일의 A열, B열,~ 을 의미한다. 

 

3) 데이터 import 하기 - 열 추가

 

  4) 테이블 열 정의하기

     - 테이블의 각 열에 해당하는 이름 및 타입 설정하기

 

4) 데이터 import 하기 - 데이터 열 정의하기

  5) 완료

    - count했을 때, 파일이 잘 들어간 것을 확인 할 수 있다.

 

 

 

문제) 시도의 갯수를 구하시오

 

select sido, count(sido)  
from zipcode  
group by sido  
order by count(sido) desc;

 

- 3000개 이상인 곳만

select sido, count(sido) 
from zipcode 
group by sido 
having count(sido)>=3000
order by count(sido) desc;

 

문제) 서울지역의 구의 갯수를 구하시오

 

select count(*)
from(
     select gugun
     from zipcode
     where sido='서울특별시'
     group by gugun
     );   

 

 

 

문제) 각 시도별, 구군별 동의 갯수를 구하시오

 

 

3. zipcode.ctl 파일 만들기 

   -> d:\java0514\database\zipcode.ctl

   -> cmd창에서 실행

 

load data infile 'post.csv' 
insert
into table zipcode 
fields terminated by ',' 
trailing nullcols 
(zipcode,sido,gugun,dong,li,bunji,etc) 

 

*cmd창에서 실행하기 전, 데이터 import를 해서 만든 테이블은 삭제하고 1번의 직접 만든 테이블로 새로 생성해주었다.

*실행하기 전에 테이블이 만들어져있어야한다.

>d:

>cd java0514

>cd database

>dir

sql연결

>sqlldr java0514/1234 control="zipcode.ctl"