SQL 소개
DB의 필요성
In-Memory
- 파이썬에서 데이터를 다룰 때 프로그램이 실행될 때만 존재하는 데이터가 있다.
- 파이썬에서 변수를 만들어 저장해도 프로그램이 종료되는 순간 데이터도 같이 없어진다.
- 데이터는 프로그램에 의존한다.
- 원하는 데이터를 원하는 시간에 꺼내오기 힘들어지고 데이터 수명이 프로그램의 수명에 의존한다.
File I/O
- 파일을 읽어오는 방식으로 작동하는 형태의 단점
- 파일을 매번 읽어야 하는 것 자체가 단점이다. 특히 파일의 크기가 커질수록 버거워진다.
- 파일이 손상되거나 여러 개의 파일을 동시에 다뤄야 하는 등 복잡하고 데이터량이 많을수록 힘들어진다.
- 관계형 DB에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장할 수 있다.
- 한번에 여러 개의 테이블을 가질 수 있다.
SQL
- SQL(Structured Query Language) : DB 언어 기준 주로 관계형 DB에서 사용됨
- cf. MySQL, Oracle, SQLite, PostgreSQL 등
- 구조화된 쿼리 언어
Query
- query : 질의문
- cf. 검색할 때 입력하는 검색어도 일종의 쿼리이며, 검색을 하게 된다면 기존 존재하는 데이터를 검색어로 필터하듯이 쿼리는 저장되어 있는 정보를 필터하기 위한 질문으로 볼 수 있다.
- SQL : DB 용 프로그래밍 언어
- DB에 Query를 보내 원하는 데이터만을 가져올 수 있게 해준다.
- Relation 이라고 불리는 데이터가 구조화된 테이블을 사용하는 DB에서 활용이 가능하다.
- NoSQL : 반면 데이터 구조가 고정되어 있지 않은 DB
- 관계형 DB와 달리 테이블을 사용하지 않고 다른 형태로 데이터를 저장한다.
- cf. MongoDB(문서 지향 DB)
종류
Data Definition Language (DDL)
DDL
: 데이터를 정의할 때 사용되는 언어- cf. 테이블을 만들 때 사용하는
CREATE
나 테이블을 제거할 때 사용되는DROP
- 데이터베이스의 테이블과 같은 오브젝트를 정의할 때 사용된다.
Data Manipulation Language (DML)
DML
: 데이터베이스에 데이터를 저장할 때 사용되는 언어- cf.
INSERT
처럼 새로운 레코드를 추가할 때 사용되는 문법 - 따라서 데이터를 삭제하는
DELETE
라든가 변경하는UPDATE
등이 여기에 포함된다.
Data Control Language (DCL)
DCL
: 데이터베이스에 대한 접근 권한과 관련된 문법- 어느 유저가 데이터베이스에 접근할 수 있는지 권한을 설정하거나 없애는 역할
- cf. 권한을 주는
GRANT
나 권한을 가져가는REVOKE
등이 포함
Data Query Language (DQL)
DQL
: 정해진 스키마 내에서 쿼리를 할 수 있는 언어- 여기에 포함된 문법은
SELECT
- 이렇게 따로 언어가 분류되지만
DQL
을DML
의 일부분으로도 본다.
Transaction Control Language (TCL)
TCL
:DML
을 거친 데이터 변경사항 수정- cf.
COMMIT
처럼DML
이 작업한 내용을 데이터베이스에 커밋하거나ROLLBACK
처럼 커밋했던 내용을 다시 롤백하는 문법
DB 설계
Relational DB
- 구조화된 데이터가 하나의 테이블로 표현이 되는데, 사전에 정의된 테이블을 relation이라고도 한다.
- 테이블을 사용하는 DB
- RDB Keyword
- 데이터 : 각 항목에 저장되는 값
- 테이블(relation) : 사전에 정의된 행과 열로 구성되어 있는 체계화된 데이터
- 필드(column) : 테이블의 열
- 레코드(tuple) : 테이블의 한 행에 저장된 정보
- 키 : 테이블의 각 레코드를 구분할 수 있는 값 각 레코드마다 고유값이어야 하며 기본키(Primary key)와 외래키(foreing key) 등이 있다.
관계종류
- 1:1
- 1:N
- N:N
- 테이블 자체 관계 : self referencing
1:1
- 테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결되어 있는 경우
- 흔치 않다. 어차피 1:1이라면 같이 적는 게 낫다.
1:N
- 테이블의 레코드 하나당 여러 개의 레코드와 연결되어 있는 경우
- 한 유저가 여러 개의 전화번호를 가질 수 있는 경우
- 하지만 그 반대는 성립할 수 없다.
- 관계형 DB에서 제일 많이 사용된다.
N:N
- 여러개의 레코드가 여러 개의 레코드를 가지는 관계
- 따로 ‘조인 테이블’을 만들어 관리
- 양방향에서 다수를 가질 수 있는 경우 해당
- N:N관계는 두 개의 1:N 관계
- 양 테이블에서 1:N 관계를 형성할 수 있는 새로운 테이블을 만들어서 관리해줄 수 있다.
자기참조 관계(Self Referencing Relationship)
- cf. 추천인이 누구인지 파악하기 위한 목적, 조직 내 상하 관계 표현
- 각 유저당 한 명만 추천할 수 있지만 추천 받은 사람은 여러 명에서부터 추천을 받게 된다.
- 1:N 관계와 비슷하다.
SQL Basics
기본 쿼리문
SQL
- Select
- Where
- And, Or, Not
- Order By
- Insert Into
- Null Values
- Update
- Delete
- Count
- Like
- Wildcards
- Aliases
- Joins
- Inner Join
- Left Join
- Right Join
- Group By
DB
- SQL Create DB
- SQL Drop DB
- SQL Create Table
- SQL Drop Table
- SQL Alter Table
- SQL Not Null
- SQL Unique
- SQL Primary Key
- SQL Foreign Key
- SQL Default
- SQL Auto Increment
- SQL Dates
Reference
- 스키마 작성 : lucidchart
- 쿼리 연습 : dbeaver
- Database Normalization Basics
- SQL 조인 시각 사이트
- SQL 연습 사이트