DataBase
기본적인 DataBase의 문법과 간단한 SQL에대한 예제들을 소개합니다.
- RDBMS란?
- DDL, DML
- Aggregate, Group Function
- SQL
- ERD
- Table 생성
RDBMS란? (Relational Database Management System)
- F.커드가 도입한
관계형 모델을 기반
으로 데이터베이스를 관리하는 방식이다. - RDBMS의 종류로는 Oracle, Mysql 등이 널리 사용되고있다.
- Relational을 표현하기 위하여 ERD(Entity-Relationship Diagram)으로 테이블을 표현한다.
NoSQL
NoSQL이란? MongoDB, Redis 등등 이 존재한다.
NoSQL 장점
- 데이터 분산형 구조를 만드는 것에 용이, 복제 및 대응에 용이, 빠른 데이터 처리, 대용량 데이터 저장
NoSQL 단점
- 보안의 취약하다, join을 통한 값을 찾기가 힘들다 (복잡한 Query가 어렵다.)
NoSQL의 등장이유
트래픽을 줄이고 분산하여 보다 쉽고 간단하게 저장
하는 것이 더 필요하다고 판단하여 새로운 데이터베이스를 필요로하게 되어서 등장하였다.
DDL & DML
DDL
(Data Definition Language)
- Create, Drop, Truncate, Alter, Data Type, Constraint
- Table 자체를 구성하는대 사용한다.
DML
(Data Manipulation Language)
- Insert, Delete, Update Table 내부의 data를 바꿀때 사용한다.
DDL
Create
테이블 생성
1 | CREATE TABLE MEMBER( |
- DataType (Oracle)
Data Type Description VARCHAR2(size) 가변길이 문자열 (최대 4000byte) CHAR(size) 고정길이 문자열 (최대 2000byte) NUMBER(p,s) 가변길이 숫자. 전체 p 자리 중 소수점 이하 s자리 (p:38, s:-84~127) DATE 고정길이 날짜+시간, 7Byte Alter
테이블 수정- 테이블 컬럼(col) 추가
1
ALTER TABLE Student ADD (name VARCHAR(50));
- 테이블 컬럼(col) 수정
1
ALTER TABLE Student MODIFY (name VARCHAR(50));
- 테이블 컬럼(col) 삭제
1
ALTER TABLE Student DROP name;
Drop
테이블 삭제- 테이블 삭제
1
DROP TABLE Student
Truncate 테이블의 모든 데이터 삭제(테이블은 존재)
- 테이블 내부 데이터 삭제
1
TRUNCATE TABLE Student
Rename 이름 변경
- 테이블 Rename
1
RENAME Student TO employee;
Comment 테이블에 설명 추가
Constraint
테이블에 제약조건 생성Table의 특정규약을 설정한다 즉 제약조건이다.
- NOT NULL
- UNIQUE
PRIMARY KEY
=> PRIMARY KEY는NOT NULL + UNIQUE
하다.FOREIGN KEY
=>주의 PRIMARY KEY에게만 FOREIGN KEY 가능
- CHECK
PRIMARY KEY
PK는 한테이블당 한개만 존재
인덱스 자동생성
여러 컬럼을 하나의 PK로 설정 가능
1
2
3
4
5CREATE TABLE member (
id1 NUMBER(5),
id2 NUMBER(5),
PRIMARY KEY(id1, id2)
);여러 컬럼이 PK일떄 FK를 걸어야 할 경우
PK에 해당하는 모든 컬럼
을 선택해야한다.FOREIGN KEY
ON DELETE SET NULL : 해당하는 FK를 NULL로 바꾼다.
ON DELETE CASCADE : 해당하는 FK를 가진 참조행도 삭제
table을 생성할떄부터 Constraint를 넣는 방법
1
2
3
4
5
6
7CREATE TABLE member (
id NUMBER(5) PRIMARY KEY,
job_id NUMBER(5),
CONSTRAINT c_member_fk FOREIGN KEY (job_id)
REFERENCES job(id)
ON DELETE SET NULL
);table에 Constraint를 추가해서 넣는 방법
1
2
3
4ALTER TABLE MEMBER
ADD CONSTRAINT c_member_fk
FOREIGN KEY (job_id) REFERENCES job(id);Constraint를 삭제하는 방법
1
ALTER TABLE MEMBER DROP CONSTRAINT c_member_fk;
DML
Insert 테이블 Data 추가
1
INSERT INTO 테이블이름 (col1, col2) VALUES(“val1”, “val2”);
Update 테이블 Data 수정
1
UPDATE 테이블이름 SET name="Kim" Where id = 1;
Delete 테이블 Data 삭제
1
DELETE FROM 테이블이름 Where id = 1;
Aggregate Function
AVG
AVG (평균 구하기)
1
SELECT AVG(salary) FROM Student;
- Group By
1
2SELECT 부서명, AVG(salary) FROM 직장; => 오류 발생
SELECT 부서명, AVG(salary) FROM 직장 GROUP BY 부서명;Having => Group By를 한 결과에 대해서 조건을 걸어주는 역할을 한다.
COUNT
- 해당 col의 수를 센다.
1
2
3SELECT COUNT(column_name)
FROM table_name
WHERE condition;
MAX
- 해당 col의 최대값을 보여준다.
1
2
3
4SELECT MAX(column_name)
FROM table_name
WHERE condition;
MIN
- 해당 col의 최소값을 보여준다.
1
2
3SELECT MIN(column_name)
FROM table_name
WHERE condition;
SUM
- 해당 col의 합을 보여준다.
1
2SELECT SUM(col_name) FROM table_name;
SELECT SUM(salary) FROM Student;
SQL (structured Query Language)
구조화된 질의 언어
기본적인 문법 구조
- SELECT : Table의 원하는 col을 선택한다.
- FROM : 특정 Table로 부터
- WHERE : 특정 조건
SQL 기본 Example
Student 테이블을 전부다 가져오고싶다.
1
SELECT*FROM Student; => *는 전부를 나타낸다.
Student 테이블중에서 name(col)을 가져오고싶다.
1
SELECT name FROM Student;
Student 테이블중에서 name(col)이 kimsejune을 가져오고싶다.
1
SELECT name FROM Student WHERE name=“kimsejune”;
JOIN
2개 이상의 테이블을 합쳐서 하나의 테이블로 만든다.
Cross Join : (Cartasian Product) 모든 가능한 쌍이 나타난다.
Inner Join
: 조건을 만족하는 tuple만 나타난다.1
2SELECT name, jobname FROM Student Inner Join Job
ON Student.id = Job.student_id;Outer Join
: 조건을 만족하지 않는 tuple도 나타난다. => null로 표기- Left Outer Join => join table의 왼쪽 table 값중 null인 것도 가져온다.
1
2SELECT name, jobname FROM Student Left Outer Join Job
ON Student.id = Job.student_id; - Right Outer Join => join table의 오른쪽 table 값중 null인 것도 가져온다.
1
2SELECT name, jobname FROM Student Right Outer Join Job
ON Student.id = Job.student_id; - Full Outer Join => 양쪽 table 값중 null인 것도 가져온다. Natural Join : 조건을 만족하는 tuple들의 동일한 col이 합쳐져서 나타난다.
1
2SELECT name, jobname FROM Student Full Outer Join Job
ON Student.id = Job.student_id;
Self Join
: 자기 자신과 Join- 상사를 찾을 때 많이 이용된다.
ERD
Entity-Relationship Diagram
테이블의 관계
- 1:1
- 한 사람은 한개의 학번을 가진다.
- 1:M
- 교수님은 여러명의 제자를 가지지만 제자는 한명의 담당교수만이 존재한다.
- N:M
- 한 사람은 여러개의 취미를 가질 수 있고 하나의 취미도 여러명의 사람이 가지고 있다.
Table 생성
방법 1. 직접 SQL (Create) 를 사용하여서 만들기
방법 2. ERD를 그린후 적용하기
방법 3. Library 이용하기
- sequelize, knex … etc
- 테이블 컬럼(col) 추가