18. Database

 

 

Database

 

Database는 가공 처리된 데이터의 모임이다. 데이터를 저장, 관리하기 위해서는 데이터베이스를 관리하는 프로그램이 필요한데, 이를 DBMS(Database Management System)라고 한다.

대표적인 DBMS가 오라클, MSsql, Mysql, MariaDB 등이 있다. 

 

DBMS는 데이터를 관리하기 위해 작동하는 독립적인 서버 프로그램이다. 

데이터의 저장 및 관리는 DBMS가 하게되고, 사용자는  DBMS에 명령어를 주어서 데이터의 생성 및 저장, 수정을 할 수 있다.

 

DBMS를 구조화 시키면 아래의 그림과 같다.

 

 

하나의 DBMS는 내부에 Database를 가지며, 각 Database는 여러 개의 Table을 가질 수 있다.

 

실질적으로 데이터가 저장되는 곳을 Table이라고 하는데, 이는 데이터가 저장되는 형태를 시각화 시켜보면 쉽게 이해할 수 있다.

 

{"이름":"홍길동", "나이":12}

{"이름":"이순신", "나이":11}

{"이름":"강감찬", "나이":15}

 

위의 3행의 데이터를 Table로 표현하면 아래와 같다.

 

 

이를 분석하면 "이름", "나이"라는 두 개의 Column이 있고, 각 Column에 매치되는 값을 가진 3개의 Row가 있다고 표현할 수 있다.

 

이와 같이 각 Column에 데이터는 서로 연관되어 있기 때문에 이를 관계형 데이터베이스(Relation DataBase)라고 한다.

 

데이터베이스만 다루어도 매우 큰 일이기 때문에 이와 같이 개념만 이해하고 실질적으로 다루는 법으로 넘어가본다. 

 

 

Query

 

데이터베이스에 데이터를 저장하고 수정하기 위해서는 데이터베이스에 명령어를 내려야한다. 이와 같이 데이터베이스에 내리는 명령어를 Query라고 한다.

Query는 역할에 따라서 DDL, DML 등으로 구분한다.

 

DDL(Database Definition Language) - 데이터베이스 정의어

 

DBMS 내부에 database를 생성하거나 구조를 정위하기 위해서 사용하는 명령어를 데이터베이스 정의어(DDL)이라고 하며, 대표적으로 CREATE 문이 있다.

 

아래는 DataBaseA라는 데이터베이스를 생성하는 명령어이다.

 

CREATE database DataBaseA

 

database를 생성했으면 table을 생성한다. 테이블을 생성할때는 Column과 각 Column이 가지는 데이터 타입(data type)을 명시해줘야 한다.

만약 이름과 나이를 저장하는 테이블을 만들고 싶다면 아래와 같이 명령을 할 수 있다.

 

CREATE table TableA (idx INTEGER PRIMARY KEY, name TEXT, age INTEGER)

 

분석하면, DataBaseA라는 데이터베이스 내부에 TableA라는 이름을 가진 테이블을 만들고 내부 Column은 idx, name, age 세개를 만든다.

각 Column의 데이터 형태는 idx는 정수형(integer), name은 텍스트(text), age는 정수형(integer)으로 한다.

idx 는 주 키(Primary Key)로 사용한다.

주 키는 테이블 내에서 index로 사용되며, 중복되지 않는 유일한 값을 의미한다.

 

* Column에 명시되는 data type은 아래 참고

https://www.jbmpa.com/python_basic/29

 

위의 쿼리로 만들어진 테이블의 구조를 시각화 시키면 아래의 그림과 같다.

 

 

 

 

DML(Data Manupulation Language) - 데이터베이스 조작어

 

데이터베이스를 생성하고 테이블을 만들었으면, 테이블 내부에 데이터를 저장해야한다. 이렇게 데이터를 저장하고 수정, 추출, 삭제 하는 명령을 데이터베이스 조작어(DML)이라고 하며, 많이 쓰이는 명령어는 아래와 같다.

 

SELECT - 데이터 추출

INSERT - 데이터 입력

UPDATE - 데이터 수정

DELETE - 데이터 삭제

 

 

1) INSERT - 데이터 입력

 

위에서 만든 테이블에 데이터를 입력해보자.

 

INSERT INTO TableA (idx, name, age) VALUES (1, "Maru", 8)

 

위의 INSERT 구문은 TableA라는 테이블에 아래와 같이 값을 입력하라는 명령이다.

idx = 1

name = "Maru"

age = 8

 

몇 개의 데이터를 추가로 입력한다.

 

INSERT INTO TableA (idx, name, age) VALUES (2, "Seulchan", 7)

INSERT INTO TableA (idx, name, age) VALUES (3, "Sun", 10)

INSERT INTO TableA (idx, name, age) VALUES (4, "Moon", 14)

 

결과를 테이블 형태로 만들어보면 아래와 같다.

 

 

 

2) UPDATE - 데이터 수정

 

데이터의 수정은 UPDATE 구문을 이용한다. 

 

UPDATE TableA SET age = 9 WHERE idx = 1

 

위의 명령은 TableA라는 테이블의 age라는 column의 값을 9로 수정한다는 의미이다. 

WHERE 절은 조건이다. 즉, idx가 1인 Row에 한해서 age를 9로 수정한다는 조건을 붙여준다.

만약 WHERE 절이 없다면 모든 age가 9로 변경되므로, UPDATE를 사용할 때는 WHERE절, 즉 조건을 붙여준다는 것을 명심한다.

 

테이블에 저장된 결과는 아래와 같다.

 

 

3) DELETE - 데이터 삭제

 

데이터의 삭제는 DELETE를 이용한다. DELETE로 삭제하면 한개의 Row 전체가 삭제된다.

DELETE FROM TableA WHERE idx = 3

 

위의 명령은 TableA라는 테이블로부터 Row를 삭제한다. 다만 조건이 idx가 3인 Row만 삭제한다는 의미이다.

DELETE구문도 마찬가지로 WHERE절이 없으면 테이블내의 모든 Row가 삭제된다. 따라서 DELETE구문을 사용할때는 WHERE절을 필히 사용할 수 있도록 주의한다.

 

테이블에 저장된 결과는 아래와 같다.

 

 

4) SELECT - 데이터 추출

 

데이터베이스를 사용할 때 가장 많이 사용되는 구문이다.

 

구조는 아래와 같다.

SELECT 추출할 colum FROM 테이블 WHERE 조건

 

실제 예는 아래와 같다.

SELECT name, age FROM TableA

 

TableA라는 테이블에서 name, age  두 개의 칼럼을 추출하라는 의미가 된다.

 

위의 구문에 의해 추출된 결과는 아래와 같다.

 

 

SELECT 구문도 조건을 이용하여 추출할 수 있다.

SELECT idx, name, age FROM TableA WHERE idx < 3

 

TableA라는 테이블에서 idx, name, age 칼럼을 추출하되, 조건이 idx가 3보다 작은 것만 추출하라는 의미이다.

 

위의 구문에 의해 추출된 결과는 아래와 같다.

 

 

 

*******************************************************

 

지금까지 관계형 데이터베이스에 대한 기본적인 것을 알아보았다.

위에서 언급한 RDB뿐만 아니라, NoSql이라고 하여 비관계형 데이터베이스도 있고, RAM기반 데이터베이스 등 현대에서는 다양한 데이터베이스가 사용되고 있다.

 

참고로 데이터베이스를 전공하여 취업을 하게되면 매우 높은 연봉을 받게된다. 

컴퓨터공학을 전공하고자 하는 사람이 있다면 데이터베이스 분야에 대해서 관심을 가지는 것도 좋은 방법 중의 하나이다.

 

데이터베이스에 대한 공부는 매우 방대하므로, 자세한 것은 데이터베이스를 전문으로 강의하는 곳에서 좀 더 많은 것을 알아보도록 한다.

 

 

 

 

Python의 Sqlite3를 이용한 예제 - https://www.jbmpa.com/python_basic/28

'파이썬 기초' 카테고리의 다른 글

18.2 database data types  (0) 2020.05.16
18-1 Sqlite3  (0) 2020.05.16
17. 쓰레드 (Thread)  (1) 2020.05.16
16. 예외 처리  (0) 2020.05.16
15. 모듈(module)과 패키지(package), import  (0) 2020.05.16
14. 클래스(class)  (0) 2020.05.16
13. 파일 읽고 쓰기  (0) 2020.05.16
12. 함수 (function) 만들기  (0) 2020.05.16

+ Recent posts