일반적으로 데이터를 조회하거나 어떤 형태로 표현하고 싶을 때 엑셀 시트나 CSV 파일 등을 사용한다. 이런 형태도 데이터를 저장하고 사용할 수 있는데 굳이 데이터베이스를 써야 하는 이유는 다음과 같다.
JavaScript에서 데이터를 다룰 때는 프로그램이 실행될 때만 존재하는 데이터가 있다. 이런 데이터는 프로그램이 종료될 때 사라진다. 데이터가 프로그램의 실행과 종료에 좌지우지 되기 때문에 예기치 못하게 종료할 때는 데이터를 보호할 수 없다.
File I/O는 파일을 읽는 방식으로 작동하는 형태를 의미한다. 엑셀이나 CSV는 어느정도의 데이터를 저장하기에는 적합하지만, 데이터가 필요할 때마다 전체 파일을 매번 읽어야 한다. 데이터가 많을수록 이 작업은 컴퓨터에게 버겁고, 비효율적이다.
관계형 데이터베이스에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장할 수 있고, 한 번에 여러 개의 테이블을 가질 수 있어 데이터를 불러오기 수월하다. 또한 엑셀 시트와 CSV 같은 특정한 파일 형태는 대용량의 데이터를 저장하기 위한 목적이 아니다. 따라서 대용량의 데이터를 다룰 때는 그에 맞게 만들어진 데이터베이스를 사용하는 것이 중요하다.
SQL은 '구조화된 쿼리 언어'이자 데이터베이스 언어로, 주로 관계형 데이터베이스에서 사용한다. 대표적으로 MySQL, Oracle, SQLite 등 데이터베이스에서 SQL 구문을 사용할 수 있다.
쿼리는 질의문이라는 뜻을 가지고 있다. 구글 검색창에 넣는 검색어도 쿼리의 한 종류라 할 수 있다. 검색어는 전체 자료에서 검색어로 데이터를 필터링한다.
SQL이 구조화된 쿼리 언어이기 때문에, 데이터베이스에 SQL 구문을 통해 원하는 데이터를 필터링하거나 수정할 수 있다. 단, "구조화된" 쿼리 언어이기 때문에 구조화된 테이블을 사용하는 데이터베이스에서 쓸 수 있다. (구조가 고정되지 않은 데이터베이스인 NoSQL도 있다.)
CREATE DATABASE 데이터베이스명;
데이터베이스를 사용하기 앞서 사용하겠다는 명령을 전달해야 한다.
USE 데이터베이스명;
customer라는 테이블을 생성하는 예시이다. id는 기본키이면서 자동 증가하도록 설정했다.
CREATE TABLE customer (
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
DESCRIBE라는 명령어로 생성한 테이블의 정보를 확인할 수 있다.
DESCRIBE customer;
----- 이제부터 MySQL에서 자주 사용하는 명령어를 간단하게 살펴본다. -----
데이터셋에 포함될 특성을 특정하는 명령어다. 아래와 같이 와일드카드 표시 *
를 붙이면 전부 선택한다는 의미다.
SELECT *
테이블 관련 작업을 할 때 반드시 입력해야 한다. 이 명령어로 결과를 도출해낼 데이터베이스 테이블을 명시한다. 아래의 구문은 테이블의 모든 특성을 선택한다는 의미이다.
SELECT *
FROM 테이블명
필터 역할을 하는 선택적으로 사용할 수 있는 명령어다. 일치하는 값을 찾고자 할 때는 =
를, 값을 제외하고 찾고자 할 때는 <>
연산자를 쓰면 된다.
SELECT *
FROM 테이블명
WHERE 특성1 = "값"
SELECT *
FROM 테이블명
WHERE 특성1 <> "값"
값과 비슷한 값들을 필터링할 때는 LIKE
와 %
혹은 *
를 사용한다.
SELECT *
FROM 테이블명
WHERE 특성1 LIKE "%특정 문자열%"
두 개 이상의 값과 일치하는 데이터를 필터할 때는 IN
을 사용한다.
SELECT *
FROM 테이블명
WHERE 특성1 IN ("값1", "값2")
값이 없는 경우를 찾을 때는 IS NULL
을, 없는 경우를 제외할 때는 IS NOT NULL
을 쓴다.
SELECT *
FROM 테이블명
WHERE 특성1 IS NULL
SELECT *
FROM 테이블명
WHERE 특성1 IS NOT NULL
데이터를 어떤 기준으로 정렬해서 출력할지 정하는 명령어다. 디폴트는 오름차순인데, DESC
로 내림차순 정렬도 할 수 있다.
SELECT *
FROM 테이블명
ORDER BY 특성1 DESC
유니크(unique)한 값을 받고 싶을 때 쓰는 명령어다. 아래는 특성1을 기준으로 유니크한 값들만 선택하는 구문이다.
SELECT DISTINCT 특성1
FROM 테이블명