1. In-Memory
: 변수 등에 저장한 데이터는 프로그램이 종료될 때 프로그램과 함께 데이터도 사라지므로 데이터는 프로그램의 실행에 의존한다.
2. File I/O
: 파일을 읽는 방식으로 In-Memory보다는 데이터를 저장하는 방식으로 적절해 보이지만, 데이터가 필요할 때마다 전체 파일을 읽어야하고, 파일의 크기가 커질수록 비효율적이다.
반면에 관계형 데이터베이스에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장하고, 여러 테이블을 가질 수 있기 때문에 데이터를 불러오기 수월하다.
: 관계형 데이터베이스에서 사용하는 구조화된 쿼리(Query: 저장되어 있는 데이터를 필터링하기 위한 질의문) 언어
// 데이터베이스 생성
CREATE DATABASE 데이터베이스_이름;
// 데이터베이스 사용
USE 데이터베이스_이름;
// 테이블 생성
CREATE TABLE 테이블_이름 (
id int PRIMARY KEY AUTO_INCREMENT,
name varchar(255),
email varchar(255)
);
// 테이블 정보 확인
DESCRIBE 테이블_이름;
SELECT: 데이터 셋에 포함될 특성을 특정한다.
FROM: 테이블과 관련된 작업을 할 때 사용하고, FROM 뒤에 결과를 도출해 낼 데이터베이스 테이블 명시한다.
WHERE: 필터 역할의 쿼리문
// 특정 값과 동일한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = 특정 값
// 특정 값과 제외한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 <> 특정 값
// 특정 값과 대 소 비교해 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 > 특정 값
// 특정 문자열과 비교해 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 LIKE "%특정 문자열"
// 특정 리스트의 값과 일치하는 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 IN (값_1, 값_2)
// 값이 없는 경우인 NULL 찾기
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL
// 값이 없는 경우인 NULL을 제외한 경우 찾기
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL
ORDER BY: 데이터 결과 정렬 기준 설정(기본정렬 = 오름차순, 내림차순 = DESC)
LIMIT: 결과로 출력할 데이터 개수 설정
DISTINCT: 중복없이 유니크한 값 선택
INNER JOIN, JOIN: 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결
OUTER JOIN: LEFT, RIGHT 중 한 테이블의 모든 결과 + 공통된 부분
관계형 데이터베이스
: 관계형 데이터베이스는 SQL을 기반으로 하고, 테이블의 구조와 데이터 타입 등을 사전에 정의하며 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
비관계형 데이터베이스
: NoSQL을 기반으로 하고, 데이터가 고정되어 있지 않은 데이터베이스를 가리킨다.
특징 | 관계형 DB | 비관계형 DB |
---|---|---|
데이터 저장(Storage) | 미리 작성된 스키마 기반으로 SQL을 사용해 저장 | NoSQL은 key-value, document, wide-column, graph 방식으로 데이터 저장 |
스키마(Schema) | 고정된 형식의 스키마 사용 | 동적으로 스키마의 형태 관리 가능 |
쿼리(Querying) | 테이블의 형식과 테이블 간의 관계에 맞춰 SQL을 사용해 데이터를 요청한다 | 데이터 그룹 자체를 조회하는 것에 초점을 둔다 |
확장성(Scalability) | 수직적으로 확장한다 | 수평적으로 확장한다 |