본문 바로가기
SQL

[SQL] 데이터분석가 입문 필수 SQL 부트캠프 (1) mySQL과 HeidiSQL 설치하기, Database 불러오기, CREATE 테이블 생성

by 모닥불🔥 2024. 2. 24.

지난 목요일에 취업 특강을 듣고 SQL 빡공을 시작했다. 원래 SQLD 시험이 2주 정도 남아서 열심히 공부를 하려던 참이었는데 더더욱 자극이 되었다. 현재 공동구매로 할인도 하고 있는 메타코드M의 SQL 입문 필수 SQL 부트캠프 강의이다(구매는 메타코드m 사이트에서 할 수 있다. https://mcode.co.kr/kor/).

 

강의는 MYSQL + heidiSQL을 사용해 진행되고, 직접 따라 쳐보면서 할 수 있어서 아주 도움이 많이 된다. 그나저나 강사님 영상에서 보면 실물이 훨씬 잘생기셨는데 썸네일은 왜 저런 사진을 쓰셨는지 모르겠다. :) 하핫 TMI...


🔥 SQL 기본개념과 mySQL, HeidiSQL 설치

튜토리얼에서는 SQL 기본 개념을 조금 다루고, mySQL과 HeidiSQL 설치를 함께 해주신다. 기본 개념은 database와 테이블의 차이나 PK, FK에 관한 내용이었다.

 

mySQL은 무료, 오라클은 유료인데 내가 검색해 본 바에 의하면, 대기업은 오라클을, 그 외에는 mySQL을 더 많이 쓴다고 한다. SQLD 공부하면서 봤던 SQL문은 전부 오라클 형식 혹은 SQL 서버 형식으로 적혀 있어서 나는 오라클 방식이 더 익숙하다.

최근에 프로그래머스에서 코딩테스트 연습을 하고 있는데, mySQL은 날짜 형태를 DATE_FORMAT(날짜열이름, '%Y-%m-%d') 이런 식으로 쓰는 반면 oracle은 TO_CHAR(날짜열이름, 'YYYY-MM-DD') 이런 식으로 쓴다. 대부분 코드는 동일하나 소소하게 다름! 하여튼 이 강의에서는 mySQL을 사용한다.

 

설치할 때 주의할 점은 딱히 없고, 전부 next 눌러서 설치하면 된다. 중간에 비밀번호 설정해야 하는데 비밀번호는 꼭 기억하기! HeidiSQL도 그냥 기본 설정으로 모두 설치한 뒤 mySQL 설치할 때 설정한 root 암호를 입력해서 연결해 주면 세팅은 끝이다. 이제부터 HeidiSQL의 기본 조작을 배워본다.

 

datatype에 대한 이야기도 하셨는데, 간단하게 정수형 데이터타입(INT, TINYINT, BIGINT), 실수형(DECIMAL), 날짜형(DATE, DATETIME, TIME ...) 형태가 있다고 했다. python에서는 실수형 데이터타입을 float라고 부르는데 SQL에서는 decimal이라고 부르는 게 좀 신기했다.

 

🔥데이터베이스 새로 생성하기

HeidiSQL에서 데이터베이스를 생성할 때에는 마우스 우클릭 > 새로 생성 > 데이터베이스로 생성한다. word 문서로 치면 새 문서를 여는 셈.. 여기다가 표를 삽입하는 건 또 다른 문제이고, 그냥 바탕이 되는 파일을 하나 생성하는 것이다.

이름은 아무거나 넣으면 되는데, 조합은 utf8bm4_general_ci로 변경해 주어야 한다. 그래야 한글이 들어가도 잘 처리한다고 한다. 이런 팁은 야매로 얻기 힘들고, 진짜 강의같은 걸 들어야 얻을 수 있는 것 같다. 이렇게 확인 누르면 생성이 되고, 생성된 데이터베이스를 우클릭 > 삭제하면 쉽게 삭제할 수도 있다. 원래 SQL문에서는 DROP DATABASE 'TEST'; 뭐 이렇게 써야 하지만 HeidiSQL을 쓰면 버튼 누르기 형태로 사용할 수 있어서 편하다.

 

여기에다가 테이블을 넣어주는 방법은 여러가지가 있다.

1. 내가 직접 테이블을 생성하는 방법. CREATE문을 사용

2. csv 파일 등 외부 파일에서 데이터를 가져온 다음 테이블에 넣는 방법

3. 아예 다른 사람의 데이터베이스 자체를 들고 오는 경우


🔥 1. 테이블을 생성해 보자

테이블 생성은 CREATE문을 사용하는데, CREATE문의 기본 형태는 아래와 같다.

CREATE TABLE 테이블명(
컬럼명 데이터타입,
컬럼명 데이터타입,
컬럼명 데이터타입
);

 

예를 들어보면, 아래와 같이 만들 수 있다. not null 조건 등을 붙여줄 수도 있다.

CREATE TABLE customers(
customer_number INT NOT NULL,
customer_name VARCHAR(50) NOT NULL,
phone VARCHAR(50)
);

 

HeidiSQL에서는 이런 식으로 코드를 작성하고, 코드 내부에 커서를 둔 다음 단축키 Ctrl+Shift+F9를 눌러 현재 코드를 실행할 수 있다. 

 

실행하고 테이블: 테이블명 탭을 클릭하면, 테이블 내 컬럼의 정보를 알 수 있다. null 허용 이런 것은 not null을 적어 주어야 하지만, 여기서는 체크 하거나 해제하면 쉽게 바꿀 수 있다! 신기... 현업에서 테이블에 NOT NULL 조건을 부여할 때에는 '이 데이터는 반드시 받아야 하는 정보인가?' 라는 생각을 하면서 만들어야 한다.

 

🔥 INSERT문

# INSERT문의 기본 형태

INSERT INTO 테이블명
(컬럼명1, 컬럼명2, 컬럼명3)
VALUES
(DATA1, DATA2, DATA3)
;

 

INSERT문을 활용하여 만든 테이블에 값을 넣을 수 있다.

여기서는 아래와 같은 코드를 넣었고, F5를 눌러 새로고침한 후 데이터 탭에 들어가면 값이 잘 들어간 것을 확인할 수 있다.

데이터타입이 INT일 때는 그냥 숫자를 적어주면 되지만, 문자형 데이터일 때는 따옴표 ' ' 사이에 넣어야 함에 주의!

 

INSERT INTO customers
	(customer_number, customer_name, phone)
VALUES
	(1, '이상훈', '010-1234-5678'),
	(2, '김상훈', '010-1234-5679'),
	(3, '박상훈', '010-1234-5679')
;

 

🔥 DELETE / TRUNCATE

현업에서 쿼리를 지우는 일은 거의 없다. 데이터분석가는 주로 만들어진 데이터를 가지고 와서 쓰는 경우가 많기 때문이다. DELETE는 데이터를 삭제하는 것, TRUNCATE는 테이블을 초기화 하는 것이며, 조건(WHERE 절)에 따라 특정한 데이터만 삭제하는 경우도 가능하다. CREATE, INSERT, DELETE, TRUNCATE 등 기본 개념은 이전 글에서 다루었으니 그쪽을 참고하면 좋을 듯. 여기선 생략!

 

HeidiSQL에서는 테이블에서 우클릭을 하면 테이블 삭제(drop)와 테이블 비우기(truncate)기능을 제공한다.

 

🔥 UPDATE / ALTER

UPDATE는 테이블의 내용을 변경하는 SQL문으로, 이것도 현업에서 많이 사용되진 않는다고 한다. 고객의 전화번호가 잘못 입력되어 변경하고 싶다. > 이런 상황에 쓰인다.

ALTER는 테이블의 구조 자체를 변경하는 기능이다. TABLE의 이름을 변경하거나 컬럼을 추가, 컬럼명 변경, 데이터타입을 바꾸거나 컬럼을 삭제할 수 있다. 진~짜 간단하게만 정리하고 넘어가겠음!

 

📒 테이블 이름 변경

ALTER TABLE 테이블명 RENAME 새테이블명;
# 예시
ALTER TABLE customers RENAME newcustomers;

 

📒 새로운 컬럼 추가

ALTER TABLE 테이블명 ADD 새컬럼명 데이터타입 제약조건;
# 예시
ALTER TABLE newcustomers ADD 지역 VARCHAR(50);

 

📒 데이터타입 변경

ALTER TABLE 테이블명 MODIFY 컬럼명 변경할 데이터타입;
# 예시
ALTER TABLE newcustomers MODIFY 지역 INT;

 

📒 컬럼명 변경

ALTER TABLE 테이블명 CHANGE 기존컬럼명 새컬럼명 데이터타입 제약조건;
# 예시
ALTER TABLE newcustomers CHANGE 지역 REGION VARCHAR(50);

 

📒 컬럼 삭제

ALTER TABLE 테이블명 DROP 컬럼명;
# 예시
ALTER TABLE newcustomers DROP REGION;

 


🔥 2. 외부에서 만든 데이터(.csv)를 테이블에 넣어보자!

csv 파일을 불러올 때는,

  • 도구 > csv 파일 가져오기 버튼을 클릭한다.
  • 위와 같은 창이 뜨면 불러올 csv 파일을 선택한다.
    이때 유의할 부분은, 경로에 한글이 들어가면 안 된다는 것이다. 자꾸 오류가 나니까 경로에 한글이 없도록 아예 C드라이브에 바로 csv 파일을 넣는 등의 조치를 해준다.
  • 인코딩에서 Utf8bm4_general_ci를 선택해준다. 아까 말했듯, 한글 인식을 잘해준다.
  • 제어문자 > 필드 종결자에서 csv 파일은 구분자가 콤마(,)이기 때문에 콤마로 설정해 준다.

csv 파일 속 데이터를 가져오기 위해 기존에 만들어 둔 테이블이 있다면 거기에 데이터를 넣으면 되지만, 없다면 테이블 > 새 테이블을 선택해서 새롭게 테이블을 만든 후 데이터를 가져와야 한다.

<새 테이블>을 누르면 자동으로 CREATE TABLE 문장을 적어주는데, '_' 부분에 컬럼명만 넣어주고 조금 손보고 테이블 생성을 눌러주면 손쉽게 표를 만들고 데이터를 넣을 수 있다.

처음 시도하면 오류가 뜬다. 로컬 데이터를 가져오는 권한이 허용되지 않았기 때문인데, HeidiSQL 쿼리문 적는 창에다가 아래 SQL문을 써준다.

SET GLOBAL LOCAL_INFILE=TRUE;

 

(아래 코드로 권한 ON/OFF 확인 가능) 그러면 위 코드를 실행하기 전에는 Value OFF였던 것이 ON으로 바뀐다. 

SHOW GLOBAL VARIABLES LIKE 'LOCAL_INFILE';

🔥 3. 아예 다른 사람이 만든 데이터베이스(DB)를 불러오자

파일 > SQL 파일 불러오기를 눌러 다른 사람이 만든 DB를 불러올 수 있음! 재생 버튼 ▶ 을 누르고, 새로고침 하면 데이터베이스와 DB 속에 있는 표들이 한 번에 불러와진다.

 

이 부트캠프 강의에서는 mySQL에서 기본적으로 제공되는 샘플 데이터를 사용할 예정인데, 구글에 mysqltutorial이라고 검색하면 mySQL sample database라는 사이트가 뜬다. 접속해서 Download MySQL Database 버튼을 클릭하면 샘플 데이터 다운로드 가능! 현업에서도 다른 사람이 만든 DB를 가져오는 경우가 많으니까 알아두자.


여기까지 SQL 기본 개념 튜토리얼 부분과 mySQL 설치, HeidiSQL 설치 후 샘플 데이터베이스를 불러오는 것까지 완료!

중요한 내용 전환이 있는데 글이 너무 길어지는 것 같아, 한 번 끊어서 작성해야겠다. 휴휴 :D