데이터베이스
체계적인 데이터 모음
데이터
저장이나 처리에 효율적인 형태로 변환된 정보
데이터를 저장하고 잘 관리하여 활용할 수 있는 기술이 중요해짐
→ 우리가 알고있는 데이터 저장 방식은 어떤 것이 있을 까?
기존의 데이터 저장 방식
파일(File) 이용
스프레드 시트(Spreadsheet) 이용
1. 파일을 이용한 데이터 관리
어디서나 쉽게 사용 가능
데이터를 구조적으로 관리하기 어려움
2. 스프레드 시트를 이용한 데이터 관리
테이블의 열과 행을 사용해 데이터를 구조적으로 관리 가능
스프레드 시트의 한계
크기 - 일반적으로 약 100만 행 까지만 저장 가능
보안 - 단순히 파일이나 링크 소유 여부에 따른 단순한 접근 권한 기능 제공
정확성 - 공식적으로 '강원'지명이 '강언'으로 바뀌었다면 테이블의 모든 위치에서 해당 값을 업데이트 해야함. 데이터가 시트에 분산되어 있다면 변경에 누락이 생기거나 추가 문제가 발생할 수 있음
데이터베이스 역할
데이터를 저장하고 조작 (CRUD)
데이터베이스 역할
데이터를 저장(구조적)하고 조작
관계형 데이터베이스
데이터 간에 관계가 있는 데이터 항목들의 모음
테이블, 행, 열의 정보를 구조화하는 방식
서로 관련된 데이터 포인터를 저장하고 이에 대한 액세스를 제공
관계
여러 테이블 간의 (논리적) 연결
DBMS (Database Management System)
데이터베이스를 관리하는 소프트웨어 프로그램
데이터 저장 및 관리를 용이하게 하는 시스템
데이터베이스와 사용자 간의 인터페이스 역할
사용자가 데이터 구성, 업데이트, 모니터링, 백업, 복구 등을 할 수 있도록 도움
RDBMS (Relational Database Management System)
관계형 데이터베이스를 관리하는 소프트웨어 프로그램
SQLite
경량의 오픈 소스 데이터베이스 관리 시스템
→ 컴퓨터나 모바일 기기에 내장되어 간단하고 효율적인 데이터 저장 및 관리를 제공
데이터베이스 정리
Table은 데이터가 기록되는 곳
Table에는 행에서 고유하게 식별 가능한 기본 키라는 속성이 있으며 외래 키를 사용하여 각 행에서 서로 다른 테이블 간의 관계를 만들 수 있음
데이터는 기본 키 또는 외래 키를 통해 결합(join)될 수 있는 여러 테이블에 걸쳐 구조화됨
SQL (Structure Query Language)
데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어
SQL Syntax
SQL Statements
SQL을 구성하는 가장 기본적인 코드 블록
SQL Statements 예시
해당 예시 코드는 SELECT Statement라 부름
이 Statement 는 SELECT, FROM 2개의 keyword로 구성됨
수행 목적에 따른 SQL Statements 4가지 유형
DDL - 데이터 정의
DQL - 데이터 검색
DML - 데이터 조작
DCL - 데이터 제어
SQL 학습 방향
단순히 SQL 문법을 암기하고 상황에 따라 실행하는 것이 아닌 SQL을 통해 관계형 데이터베이스를 잘 이해하고 다루는 방법을 학습
Query
데이터베이스로부터 정보를 요청하는 것
일반적으로 SQL로 작성하는 코드를 쿼리문(SQL 문)이라고 한다.
SQL 표준
SQL은 미국 국립 표준 협회 (ANSI)와 국제 표준화 기구(ISO)에 의해 표준이 채택됨
모든 RDBMS에서 SQL 표준을 지원
다만 각 RDBMS마다 독자적인 기능에 따라 표준을 벗어나는 문법이 존재하니 주의
데이터를 조회하는 유형은 DQL 밖에 없음
SELECT
테이블에서 데이터를 조회
SELECT 키워드 이후 데이터를 선택하려는 필드를 하나 이상 지정
FROM 키워드 이후 데이터를 선택하려는 테이블의 이름을 지정
SELECT 정리
테이블의 데이터를 조회 및 반환
'*' (asterisk)를 사용하여 모든 필드를 선택
ORDER BY
조회 결과의 레코드를 정렬
SELECT FirstName FROM employees ORDER BY FirstName;
SELECT FirstName FROM employees ORDER BY FirstName DESC;
SELECT Country, City FROM customers ORDER BY Country DESC, City;
SELECT Name, Milliseconds/60000 AS '재생 시간(분)' FROM tracks ORDER BY Milliseconds DESC;
SELECT ReportsTo FROM employees ORDER BY ReportsTo;
DISTINCT
조회 결과에서 중복된 레코드를 제거
SELECT DISTINCT Country FROM customers ORDER BY Country;
WHERE
조회 시 특정 검색 조건을 지정
SELECT LastName, FirstName, City FROM customers WHERE City = 'Prague';
SELECT LastName, FirstName,City FROM customers WHERE City != 'Prague';
SELECT LastName, FirstName, Company, Country FROM customers WHERE Company IS NULL AND Country = 'USA';
SELECT LastName, FirstName, Company, Country FROM customers WHERE Company IS NULL OR Country = 'USA';
SELECT Name, Bytes FROM tracks WHERE 100000 <= Bytes AND Bytes <= 500000;
SELECT Name, Bytes FROM tracks WHERE Bytes BETWEEN 100000 AND 500000;
SELECT Name, Bytes FROM tracks WHERE Bytes BETWEEN 100000 AND 500000 ORDER BY Bytes;
SELECT LastName, FirstName, Country FROM customers WHERE Country = 'Canada' OR Country = 'Germany' OR Country = 'France';
SELECT LastName, FirstName, Country FROM customers WHERE Country IN ('Canada', 'Germany', 'France');
SELECT LastName, FirstName, Country FROM customers WHERE Country NOT IN ('Canada', 'Germany', 'France');
SELECT LastName, FirstName FROM customers WHERE LastName LIKE '%son';
SELECT LastName, FirstName FROM customers WHERE FirstName LIKE '___a';
Operators
Comparison Operators (비교 연산자)
=, >=, <=, !=, IS, LIKE, IN, BETWEEN ...AND
Logical Operators (논리 연산자)
AND, OR, NOT
IN Operator
값이 특정 목록 안에 있는지 확인
LIKE Operator
값이 특정 패턴에 일치하는지 확인 (Wildcards와 함께 사용)
Wildcard Characters
'%' 문자열과 일치하는지 확인
'_' 단일 문자와 일치하는지 확인
LIMIT
LIMIT clause
조회하는 레코드 수를 제한
SELECT TrackId, Name, Bytes FROM tracks ORDER BY Bytes DESC LIMIT 7;
SELECT TrackId, Name, Bytes FROM tracks ORDER BY Bytes DESC LIMIT 3, 4;
GROUP BY
레코드를 그룹화하여 요약본 생성 ('집계 함수'와 함께 사용)
Aggregation Functions (집계 함수)
값에 대한 계산을 수행하고 단일한 값을 반환하는 함수
SUM, AVG, MAX, MIN, COUNT
SELECT Country FROM customers GROUP BY Country;
SELECT Composer, AVG(Bytes) FROM tracks GROUP BY Composer ORDER BY AVG(Bytes) DESC;
SELECT Composer, AVG(Milliseconds/60000) FROM tracks GROUP BY Composer HAVING AVG(Milliseconds/60000) < 10 ;