글쟁이, 코딩한다

1231 / K_digital 18일차 / DB, SQL 본문

나는 코딩도 한다/TIL

1231 / K_digital 18일차 / DB, SQL

Algori 2020. 12. 31. 16:42

0.

 세상에, 한 해가 또 지나간다.

 

DB와 DBMS

 

 데이터베이스(DataBase) : 데이터들을 저장하는 일련의 파일
 => DBMS(DataBase Management System) : 이를 관리하는 소프트웨어 

1) DBMS의 종류

 

 최근에는 관계형 데이터베이스를 다루는 R(elation) DBMS를 대부분 사용 
 => Oracle(보안상 강점 <-> 난해한 문법, 비용), MySQL(저렴한 금액), SQLite, MS SQL, PostgreSQL, ...

 

 #Oracle, MySQL이 인기가 많다 #ANSI SQL 기반으로 조금씩만 차이를 가지고 있다. 

 

2) Data Lake와 Data Warehouse
 

모든 데이터를 때려넣어둔 Data Lake, 데이터를 손질해 쌓아둔 Data Warehouse 

 

데이터 처리 순서 :

 ETL 추출, 변형, 저장(적재) (extract, transform, load) ; 데이터를 추출해 간단히 바꿔 저장한다.(Data Warehouse의 방식)

=> 데이터가 너무 많아졌어요. 또 너무 빨리 쏟아져요.

 ELT 추출, 적재, 변형 ; 데이터를 추출해 일단 저장하고 필요시 변형(Data Lake의 방식, 최근 더 부각)

3) 데이터 모델링

 

 현실 =(개념)=> E-R 다이어그램 =(논리)=> Relation 모델 =(물리)=> 물리적인 SQL 코드

1- 개념 데이터 모델링
 현실 개체(Entity) 추출과 개체들간 관계 정리(E-R 다이어그램)

#Entity(개체, 사각형) : 중요 데이터를 가진 사람, 사물 ex)회원, 제품 ; 표 형태, 각각 entity ID 
#Relationship(관계, 마름모) : entity들 사이 연관성, 대응 관계 ; 표 형태 
#Attribute(속성, 타원) : 의미 있는 데이터들의 작은 논리적 단위 ; 표 안의 열들

2- 논리 데이터 모델링
 E-R다이어그램 기반 Relation 모델을 만드는 과정

#Relation(릴레이션) : entity 데이터를 2차원 테이블 구조(행열)로 표현한 것 
 ##Attribute == Field(Column) : Relation의 열 ###Degree(차수) : 테이블 안 열의 수
 ##Tuple == Record(Row, Instance) : Relation의 행 ###Cardinality(카디널리티) : 테이블 안 행의 수

3- 물리 데이터 모델링
 Relation 모델을 저장 장치에 저장할 물리 구조로 구현

 

SQL

 

구조적 질의 언어, Structured Query language

 

    R-DBMS에서 데이터를 관리하기 위함 #Query : 질문 ; DB에 보내는 질의 ; 명령어를 의미하기도 함

 

1) SQL의 기능들

 

DDL : Relation(DB 테이블)을 정의하기 위해 사용 : CREATE(생성), ALTER(변경), DROP(삭제) 등
DML : 데이터 관리(CRUD)를 위해 사용 : SELECT(read), INSERT(create), UPDATE(update), DELETE(delete) 등 
DCL : 사용자 관리, 권한 다루기 : GRANT(부여), REVOKE(해제)

2) SQL 문법(기초기초)
  

1- 대소문자를 무시한다

#예외도 있다. #권장사항(명령어는 대문자로, 그외는 소문자로)은 있다

2- 명령은 반드시 세미콜론(;)으로 끝난다

3- 고유값은 따옴표로 감싸준다

  ## 주석 : -- 한 줄, /* 여러줄 */

 

3) SQL 사용

 

 #따로 설치가 필요없는 SQLite3 사용 #파이썬에서 작동

 

1. DB 불러오기


db = "maindb.db" # or "maindb.sqlite"
conn = sqlite3.connect(db) #Database 생성 -> 커넥션 연결(주로 conn 변수)

conn.cursor( ) #커서로 연결(cur) #cursor = db 파일 사이를 오가며 명령문을 수행해준다

conn.commit( ) #확정적으로 DB에 저장 
conn.rollback( ) #commit 직전으로 이동

conn.close( ) #연결 끊기(DB 파일 변환을 위해)

2. 기초 명령어


cur = conn.cursor( )

cur.execute( ) #하나의 명령문
cur.executescript( ) #여러 명령어를 실행 ##큰 스크립트로 구성 ##하나만도 가능
cur.executemany(A,B) #하나의 SQL 문에 데이터를 바꿔가며 실행

cur.fetchone( ) / cur.fetchall( ) #불러온 데이터를 저장 ##더 편한 명령어가 있다.

3. 데이터프레임으로 변환


script = """
SELECT
	column
FROM
	table
"""    
#""" """은 문자열 줄바꿈을 가능하게 해준다.

df = pd.read_sql_query(script, conn) #sql_query를 읽어 df로 전환. 뒤에 연결 주체를 확인해줘야 한다.
df

4. SQL 명령어

  #추가 정리와 세부 정돈이 필요 #순서에 유념하자

 

DDL

CREATE : TABLE을 만든다

#자료형 이름 #제약조건 #FOREIGN KEY 

ALTER : TABLE을 수정한다

#ADD #RENAME

DROP : TABLE을 삭제한다

 

DSL

SELECT(+ FROM) : Data를 선택해 불러온다

#SQL의 핵심 명령어

#ORDER BY : 정렬 #DISTINCT : 중복 제외 #LIMIT(와 OFFSET) : 제한 #

#조건절 WHERE : 사칙연산, LIKE, SUBQUERY, BETWEEN, IS NULL ...

INSERT(+INTO & VALUES) : Data를 삽입한다

#excutemany를 활용한 한번에 밀어넣기 

UPDATE(+ SET) : Data 수정

DELETE(+ FROM) : Data 삭제

 

##추가추가

1) *은 all을 의미한다.

2) ?는 format문의 { }에 해당

3) DB Browser for SQLite : DB를 곧바로 보는 프로그램 <--> 코드는 자동화에 좋다

 

오늘의 (다음) 공부할 것

 

1. 자격증 : 정보처리기사, 빅데이터 분석기사
    Tensorflow Certificate, AWS(AWS한국사용자모임), GCP

2. for 문의 더 세밀한 이해

3. dataframe merge의 더 세밀한 이해

 

오늘의 (연휴에) 할 일

 

1. 가족신문 만들기

2. 소설 시작하기

3. 복습 & 오늘의 공부할 것들 가운데 적어도 2개

4. 하기 싫다? 그럼 맘 편히 쉬기

Comments