Major Study./Bioinformatics

생물정보학을 위한 IT 기초 - MYSQL

sosal 2015. 4. 22. 05:10
반응형

DATABASE

 

* Relational database란 무엇인가?

관계형 데이터베이스는 row와 column의 table 형태로 데이터를 저장하는 관계형 데이터 모델이다.
하나의 데이터베이스는 여러개의 테이블을 가진다.
테이블의의 column은 instance의 attribute의 나열이며, row는 실제 개체의 instance 정보를 담고있다.
row는 고유한 unique key를 가질 수 있고, foreign key로서 다른 테이블과 연결될 수 있다.
관계형 데이터베이스는 데이터 시스템을 관리하고 질의하는데 Structured Query Language(SQL)를 사용한다.

 

* Cursor: SQL은 data set을 return한다. 이 모든 데이터 셋을 처리하는것은 불가능하기 때문에, cursor가 record by record로 접근하여 데이터를 가져온다.

 

MYSQL

 

- 데이터베이스, 테이블 보기

show databases;         #데이터베이스 목록 보기

use database_name;    #데이터베이스 사용

show tables;               #사용하는 데이터베이스의 테이블 목록 보기

 

- 데이터베이스, 테이블 만들기

CREATE DATABASE database_name

CREATE TABLE table_name (name VARCHAR(20), age int); # 사용하고있는 데이터베이스 안에 생성된다.

 

- 테이블 데이터 넣기

INSERT INTO table_name value ("이정훈", 20);     # table의 column은 name과 age

INSERT INTO table_name value ("제미경", 24);

+-----------+------+

| name        | age   |

+-----------+------+
| 이정훈       |   20   |
| 제미경       |   24   |
+-----------+------+

 

- 테이블 데이터 수정하기

UPDATE table_name set age=26 where name="이정훈";  # name이 '이정훈'인 데이터의 age를 26으로 수정

UPDATE table_name set age=31 where name="제미경";  # name이 '제미경'인 데이터의 age를 31로 수정

 

+-----------+------+

| name        | age   |

+-----------+------+
| 이정훈       |   26  |
| 제미경       |   31  |
+-----------+------+

 

- 테이블 column 이름바꾸기, 추가하기, 삭제하기

ALTER TABLE table_name change name Name VARCHAR(30);

# 'name' column을 'Name'으로 바꾸고 VARCHAR(20)에서 VARCHAR(30)으로 변경

+-----------+------+
| Name       | age  |
+-----------+------+
| 이정훈       |   26   |
| 제미경       |   31   |
+-----------+------+

ALTER TABLE table_name ADD department VARCHAR(30) default 'Bioinformatics';

# department라는 column을 추가하고, default 값으로 Bioinformatics로 지정

 

+-----------+------+----------------+
| Name        | age   | department       |
+-----------+------+----------------+
| 이정훈       |   26   | Bioinformatics   |
| 제미경       |   31   | Bioinformatics   |
+-----------+------+----------------+

 

ALTER TABLE table_name DROP age;    #age column 삭제
+-----------+----------------+
| Name        | department       |
+-----------+----------------+
| 이정훈       | Bioinformatics   |
| 제미경       | Bioinformatics   |
+-----------+----------------+

 

- 데이터 select로 호출하기 - WHERE, ORDER BY, GROUP BY

 

mysql> select * from table_name where Name="제미경"; # Name이 제미경인것만 리턴
+-----------+----------------+
| Name        | department        |
+-----------+----------------+
| 제미경       | Bioinformatics   |
+-----------+----------------+

 

SELECT * FROM table_name ORDER BY Name# 이름으로 정렬하기
+-----------+----------------+
| Name        | department       |
+-----------+----------------+
| 이정훈       | Bioinformatics   |
| 제미경       | Bioinformatics   |
+-----------+----------------+

 

SELECT * FROM table_name ORDER BY Name desc; # 정렬 내림차순
+-----------+----------------+
| Name        | department        |
+-----------+----------------+
| 제미경       | Bioinformatics   |
| 이정훈       | Bioinformatics   |
+-----------+----------------+

SELECT * FROM table_name GROUP BY department; # department가 unique 하게 출력
+-----------+----------------+
| Name        | department        |
+-----------+----------------+
| 이정훈       | Bioinformatics   |
+-----------+----------------+

# GROUP BY는 원하는 column이 select 결과에 하나만 뜨도록 하는 명령어


mysql> SELECT DISTINCT department FROM table_name;
+----------------+
| department        |
+----------------+
| Bioinformatics    |
+----------------+
# DISTINCT는 select로 뽑아져나오는 column이 unique한것만 출력한다. 따라서 department column만 select 할 시, Bioinformatics 하나만 출력된다.

 

mysql> SELECT DISTINCT * FROM table_name;
+-----------+----------------+
| Name        | department        |
+-----------+----------------+
| 이정훈       | Bioinformatics   |
| 제미경       | Bioinformatics   |
+-----------+----------------+

# DISTINCT를 사용했지만, (Name, department) 자체는 모두 unique하기 때문에 모두 출력된다.