1. SQL의 개념을 이해하고, 명령어들을 통해 활용할 수 있다.
- SQL 개념
✔︎ SQL (Structured Query Language) : 구조화된 Query 언어
✔︎ 데이터베이스용 프로그래밍 언어
✔︎ 데이터베이스에 query를 보내 원하는 데이터만을 뽑아올 수 있음
✔︎ 질의문
이라는 뜻으로, 저장되어 있는 정보를 필터하기 위한 질문
✔︎ In-Memory : 끄면 데이터 사라짐
✔︎ File I/O : 원하는 데이터만 가져올 수 없고, 항상 모든 데이터를 가져온 뒤 서버에서 필터링 필요
✔︎ Database : 필터링 외에도 File I/O로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터에 특화된 서버
✔︎ 데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위해 행해지는 하나 이상의 쿼리를 모아놓은 하나의 작업 단위
✔︎ 데이터베이스 트랜잭션이 발생할 때, 안정성을 보장
할 수 있는 성질
✔︎ Atomicity (원자성) : 하나의 트랜잭션 내에서는 모든 연산이 성공
하거나 모두 실패
해야 함
✔︎ Consistency (일관성) : 하나의 트랜잭션 전과 후에 데이터베이스의 일관된 상태가 유지
되어야 함
✔︎ Isolation (격리성, 고립성) : 각각의 트랜잭션은 독립적
임. 서로의 연산을 확인받거나 영향 줄 수 ❌
✔︎ Durability (내구성, 지속성) : 하나의 성공된 트랜잭션에 대한 로그가 기록되고 영구적
으로 남음
✔︎ SQL (구조화 쿼리 언어)
관계형 데이터베이스
의 기반테이블
의 구조와 데이터 타입 사전 정의, 테이블에 정의된 내용만 알맞은 형태의 데이터로 삽입 가능열(column)
에는 하나의 속성
에 대한 정보 저장행(row)
에는 각 열의 데이터 형식에 맞는 데이터
가 저장✔︎ NoSQL (비구조화 쿼리 언어)
비관계형 데이터베이스
의 기반Key-Value
타입 : Key-Value 쌍으로 데이터를 배열 형태로 저장문서형(Document)
데이터베이스 : 데이터를 테이블이 아닌 문서처럼 저장Wide-Column
데이터베이스 : 열(column)에 대한 데이터를 집중적으로 관리Graph
데이터베이스 : 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성✔︎ 차이점
테이블
에 저장고정
된 형식의 스키마 필요 → 데이터 속성별로 열에 대한 정보를 미리 저장동적
으로 스키마 형태 관리 → 행 즉시 추가 가능, 모든 열에 대한 데이터 입력 안해도 됨수직
적 확장 → 높은 메모리와 CPU 사용, 비용 ↑, 시간 ↑수평
적 확장 → 값싼 서버 증설과 클라우드 서비스 사용, 비용 ↓, 편리성 ↑✔︎ SQL 기반 관계형 데이터베이스 사용 케이스
✔︎ NoSQL 기반 비관계형 데이터베이스 사용 케이스
- SQL 명령어
✔︎ 데이터베이스 생성
CREATE DATABASE 데이터베이스_이름;
✔︎ 데이터베이스 사용
USE 데이터베이스_이름;
✔︎ 테이블 생성
CREATE TABLE 테이블_이름(
필드
);
✔︎ 테이블 정보 확인
DESCRIBE 테이블_이름;
✔︎ SELECT : 데이터셋에 포함될 특성 특정
✔︎ FROM : 테이블 관련 작업할 때 반드시 입력, 결과를 도출해낼 테이블 명시
SELECT *
FROM 테이블_이름
※ * (와일드카드)
: 전부 선택할 때 사용
✔︎ WHERE : 필터 역할, 선택적으로 사용
// 특정 값과 동일한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 = "특정 값"
// 특정 값 제외한 데이터 찾기
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 <> "특정 값"
// 특정 값과 비교
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_1 <= "특정 값"
// 특정 문자열 포함
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 LIKE "%특정 문자열%"
// 특정 값 일치
SELECT 특성_1, 특성_2
FROM 테이블_이름
WHERE 특성_2 IN ("특정값_1", "특정값_2")
// NULL
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NULL
// NOT NULL
SELECT *
FROM 테이블_이름
WHERE 특성_1 IS NOT NULL
✔︎ ORDER BY : 정렬, 선택적 사용
// 오름차순 (기본 - ASC 생략 가능)
SELECT *
FROM 테이블_이름
ORDER BY 특성_1
// 내림차순
SELECT *
FROM 테이블_이름
ORDER BY 특성_1 DESC
✔︎ LIMIT : 출력할 데이터 개수 제한, 쿼리문 가장 마지막에 사용
SELECT *
FROM 테이블_이름
LIMIT 결과_개수
✔︎ DISTINCT : 유니크한 값을 받을 때
SELECT DISTINCT 특성_1
FROM 테이블_이름
✔︎ INNER JOIN : 둘 이상의 테이블의 공통된 부분 연결
SELECT *
FROM 테이블_1
(INNER) JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
✔︎ OUTER JOIN : 테이블 기준 왼쪽 또는 오른쪽 조인
// LEFT JOIN
SELECT *
FROM 테이블_1
LEFT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
// RIGHT JOIN
SELECT *
FROM 테이블_1
RIGHT OUTER JOIN 테이블_2 ON 테이블_1.특성_A = 테이블_2.특성_B
☞ 정보처리기사 자격증을 취득할 때 공부했던 것들이 떠올랐다. 그 때도 프로그래밍 언어보다 흥미를 느꼈는데, 아마 비교적 명령어들도 적고 사람이 하는 언어와 비슷해서 이해가 쉽게 가기 때문인 것 같다. 정보처리기사 때도 그랬지만, 이론적으로 공부하는 건 의미가 없다. 여러 과제들을 통해 mysql
을 사용해서 자유자재로 사용해보는 경험이 중요할 것이다.
・ 데이터베이스 설계
・ 과제 - Learn SQL, Designing Schema