앞에서 만들었던 트위터의 미니 버전인 미니터 API를 만들면서 API가 새로 재시작 될 때마다 담아두었던 데이터가 모두 사라져서 굉장히 불편했다. 하지만 다행히도 이를 영구적으로 보존하기 위해서 데이터베이스 시스템을 사용해서 저장하는 방법이 있다는 것을 알게 되었다.
이번에는 데이터베이스 시스템 핵심개념과 SQL(Structured Query Language)에 대해서 배워보는 시간을 갖도록 해보겠다.
데이터베이스 시스템은 데이터베이스에 저장되어 있는 데이터를 읽고,저장하고,업데이터하고 마지막으로 삭제할 수 있다.
데이터베이스 시스템은 크게 2가지 종류 RDBMS 와 NoSQL로 명칭되는 비관계형 데이터베이스가 있다. 하지만 이 두개는 앞 TIL에서 이미 다뤘던 내용으로 생략하도록 하겠다.
궁금하다면 위에 TIL DAY.35를 참고하면 된다.
SQL은 MySQL같은 관계형 데이터베이스에서 데이터를 읽거나 생성 및 수정하기 위해 사용하는 언어이다. 기본적으로 CRUD라고 하여 데이터를 Create, Read , Update, Delete하는 기능을 제공하는 관계형 데이터베이스 시스템 전용 언어이다. SQL에는 여러 구문이 있지만 그중에서도 기본적으로 SELECT, INSERT, UPDATE , DELETE 그리고 JOIN 은 필수적으로 이해해야 한다.
SELECT 구문은 관계형 데이터베이스 시스템에서 데이터를 읽을 때 쓰는 SQL 구문이다.
SELECT
id,
name,
age,
gender
FROM users
users라는 테이블에서 id, name ,age, gender이라는 칼럼을 읽고 싶을 떄 위와 같은 SELECT 구문을 쓰면 된다. user 이라는 테이블에서 칼럼의 값을 읽고 싶다면 where이라는 구문을 함께 사용하여 user의 id,name,age,gender을 읽을 수 있다.
SELECT
id,
name,
age,
gender
From users
WHERE name = "김호균"
데이터를 생성할 떄는 INSERT 구문을 아래와 같이 사용한다.
{
"id" : 1,
"name" : "김호균",
"age" : 27,
"gender" : "남자"
}
위와 같은 데이터로 users테이블에 생성해보자
INSERT INTO users (
id,
name,
age,
gender
) VALUES (
1,
"김호균",
27,
"남자"
)
만일 하나 이상의 데이터를 생성하고 싶다면 다음과 같이 INSERT 구문을 사용하면 된다.
INSERT INTO users (
id,
name,
age,
gender
) VALUES (
1,
"김호균",
27,
"남자"
),(
2,
"송준기",
33,
"여자"
)
기존에 있는 데이터를 수정하기 위해 UPDATE 구문을 사용한다.
UPDATE table_name SET column1 = value1 WHERE column2 = value2
WHERE 구문과 같이 사용하지 않으면 해당 테이블의 모든 로우 값이 수정되기 때문에 같이 사용하게 된다. 물론 모든 로우 값을 수정해야 할 필요 WHERE 구문을 안써주면 된다.
데이터를 삭제할 때 DELETE 구문을 사용한다.
DELETE FROM table_name WHERE column = value
UPDATED 와 마찬가지로 모든 로우를 지워야하는 상황이 아니라면 WHERE 구문과 함께 사용해야 된다.
JOIN 구문은 여러 테이블을 연결할 때 사용된다. 관계형 데이터베이스 특성상 원하는 정보를 얻기 위해서는 하나 이상의 테이블을 읽어야하는 경우가 많다. 그럴 떄 아래와 같은 형식으로 JOIN 구문을 사용해서 테이블들을 연결할 수 있다.
SELECT
table1.column1,
table2.column2
FROM table1
JOIN table2 ON tabel1.id = table2.table1_id