데이터 베이스
데이터 베이스(Data Base)
- 전자적으로 저장되고 체계적인 데이터 모음
- DBMS (데이터베이스 관리 시스템) 라는 소프트웨어를 사용하여 데이터를 저장, 검색 및 편집
데이터베이스 특징
- 실시간 접근성(real time accessibility)
- 계속적인 변화(continuous change)
- 생성, 수정, 삭제를 통한 최신 데이터 유지
- 동시 공유(concurrent sharing)
- 내용에 따른 참조(reference by content)
- 사용자가 원하는 데이터를 주소가 아닌 내용에 따라 참조 가능
- 데이터 독립성(Data Independence)
DBMS(DataBase Management System)
-
데이터베이스를 운영하고 관리하는 소프트웨어
- SQL(Structured Query Language)
- DBMS에서 사용하는 언어
- DBMS 유형
-
계층형(Hierarchical)
-
망형(Network)
-
관계형(Relational)
-
가장 많이 사용하는 데이터베이스
-
데이블의 행과 열로 구성
-
-
- 객체지향형(Object-Oriented)
-
객체관계형(Object-Relational)
- RDBMS : 정형화된 데이터 관리
- NoSQL : 비정형 데이터 관리
SQL 명령어
- 데이터 정의어(DDL: Data Definition Language)
- CREATE, UPDATE, ALTER, TRUNCATE
- 데이터 조작어(DML: Data Manipulation Lauguage)
- CRUD: INSERT, UPDATE, DELETE, SELECT
- 데이터 제어어(DCL: Data Control Language)
- GRANT, REVOKE, TRANSACTION, COMMIT, ROLLBACK ..
SQL 데이터 자료형
ORACLE | MYSQL/MariaDB | SQL Server | PostgreSQL | |
---|---|---|---|---|
숫자 (Numeric Type) |
NUMBER FLOAT |
TINTINT SMALLINT INT BIGINT DECIMAL FLOAT DOUBLE |
BIGINT INT SMALLINT TINYINT NUMERIC/DECIMAL FLOAT REAL |
SMALLINT INTEGER BIGINT DECIMAL NUMERIC REAL DOUBLE |
문자(열) (String Type) |
CHAR VARCHAR2 |
CHAR VARCHAR |
CHAR VARCHAR |
CHAR VARCHAR |
boolean | BIT | BIT | BOOLEAN | |
날짜/시간 (Date/Time Type) |
DATE TIMESTAMP |
DATE TIME DATETIME TIMESTAMP YEAR |
DATE DATETIME DATETIME2 SMALLDATETIME TIME |
DATE TIME TIMESTAMP |
큰 객체 | LONG CLOB BLOB |
TEXT MEDIUMTEXT LONGTEXT BLOB |
TEXT BINARY IMAGE |
TEXT |
기본 문법
수정사항 반영
- FLUSH PRIVILEGES
CREATE
- 데이터베이스,계정,테이블을 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
# 데이터베이스 생성
CREATE DATABASE 데이터베이스이름
# 계정 생성
CREATE USER 'ID'@'localhost' IDENTIFIED BY 'PASSWORD'
CREATE USER 'ID'@'%' IDENTIFIED BY 'PASSWORD'
# 테이블 생성
CREATE TABLE 테이블이름 (
필드이름1 필드타입1,
필드이름2 필드타입2,
...
)
DROP
- 데이터베이스,계정,테이블을 삭제
1
2
3
4
5
6
7
8
9
10
11
# 데이터베이스 삭제
DROP DATABASE 데이터베이스이름;
# 계정 삭제
DROP USER 'ID'@'localhost' IDENTIFIED BY 'PASSWORD'
DROP USER 'ID'@'%' IDENTIFIED BY 'PASSWORD'
# 테이블 삭제(테이블 전체를 삭제)
DROP TABLE 테이블이름
# 테이블의 내용만 전체 삭제
TRUNCATE TABLE 테이블이름
GRANT
- 데이터베이스의 권한 부여
1
GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO 'ID'@'%' IDENTIFIED BY 'PASSWORD'
ALTER
- 데이터베이스와 테이블의 내용을 수정
1
2
3
4
5
6
7
8
9
10
11
12
# 데이터베이스 수정
1. ALTER DATABASE 데이터베이스이름 CHARACTER SET=문자집합이름
2. ALTER DATABASE 데이터베이스이름 COLLATE=콜레이션이름
# 새로운 필드 추가
ALTER TABLE 테이블이름 ADD 필드이름 필드타입
#기존 필드의 삭제
ALTER TABLE 테이블이름 DROP 필드이름
#필드 타입 변경
ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입
INSERT
- 테이블에 새로운 레코드 추가
1
INSERT INTO 테이블명(필드이름1, 필드이름2, ...) VALUES(값1, 값2, ...);
UPDATE
- 레코드의 내용 수정
1
2
3
UPDATE 테이블명
SET 필드이름1=데이터값1, 필드이름2=데이터값2, ...
WHERE 필드이름=데이터값
DELETE
- 테이블의 레코드를 삭제
1
DELETE FROM 테이블이름 WHERE 필드이름=데이터값
SELECT
- 테이블의 레코드를 조회
1
2
3
SELECT 필드이름
FROM 테이블이름
WHERE 조건
- 애스터리스크(asterick)와 별칭(alias)
- 애스터리스크(asterick): 별표(*)를 이용하여 테이블의 모든 필드 조회
- 별칭(alias): 테이블과 필드에 임시로 별칭(alias)을 부여하고, 해당 별칭을 SELECT 문에서 사용
1
2
3
4
5
6
7
8
9
# 애스터리스크(asterisk)
SELECT * FROM 테이블이름
# 별칭(alias)
1. SELECT 필드이름 AS 별칭
FROM 테이블이름;
2. SELECT 필드이름
FROM 테이블이름 AS 별칭;
ORDER BY
- SELECT문으로 조회한 결과를 정렬
- 기본 설정은 오름차순
1
2
3
4
5
6
# 오름차순
SELECT * FROM 테이블이름 ORDER BY 필드이름
SELECT * FROM 테이블이름 ORDER BY 필드이름 ASC
#내림차순
SELECT * FROM 테이블이름 ORDER BY 필드이름 DESC
JOIN
- 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블이나 결과 집합으로 표현
1
2
3
4
5
6
7
8
9
# INNER JOIN
첫번째테이블이름 INNER JOIN 두번째테이블이름 ON 조건
첫번째테이블이름 JOIN 두번째테이블이름 ON 조건
# LEFT JOIN
첫번째테이블이름 LEFT JOIN 두번째테이블이름 ON 조건
# RIGHT JOIN
첫번째테이블이름 RIGHT JOIN 두번째테이블이름 ON 조건
GROUP BY
- 동일한 값을 가진 컬럼을 기준으로 그룹별 연산을 적용
- 집계함수(COUNT(), MAX(), MIN(), SUM(), AVG()) 와 함께 자주 사용
1
2
3
4
SELECT 필드이름, 그룹함수(필드이름)
FROM 테이블이름
[WHERE 조건]
GROUP BY 필드이름;
HAVING
- SELECT 문의 WHERE 절처럼 GROUP BY 절에 의해 반환되는 결과 집합의 조건을 설정
1
2
3
4
5
SELECT 필드이름, 그룹함수(필드이름)
FROM 테이블이름
[WHERE 조건]
GROUP BY 필드이름
HAVING 조건;
제약 조건
- NOT NULL: 해당 필드는 NULL 값을 저장할 수 없음
1
2
3
4
5
6
7
8
9
# CREATE 문으로 NOT NULL 설정
CREATE TABLE 테이블이름 (
필드이름 필드타입 NOT NULL,
...
)
# ALTER 문으로 NOT NULL 설정
ALTER TABLE 테이블이름
ADD 필드이름 필드타입 NOT NULL
- UNIQUE: 설정된 필드는 중복된 값을 저장할 수 없음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# CREATE 문으로 UNIQUE 설정
1. CREATE TABLE 테이블이름 (
필드명 필드타입 UNIQUE,
...
)
2. CREATE TABLE 테이블이름 (
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름] UNIQUE (필드이름)
)
# ALTER 문으로 UNIQUE 설정
1. ALTER TABLE 테이블이름
ADD 필드이름 필드타입 UNIQUE
2. ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름] UNIQUE (필드이름)
- PRIMARY KEY: NOT NULL + UNIQUE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# CREATE 문으로 PRIMARY KEY 설정
1. CREATE TABLE 테이블이름 (
필드이름 필드타입 PRIMARY KEY,
...
)
2. CREATE TABLE 테이블이름 (
필드이름 필드타입,
...,
[CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)
)
# ALTER 문으로 PRIMARY KEY 설정
1. ALTER TABLE 테이블이름
ADD 필드이름 필드타입 PRIMARY KEY
2. ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름] PRIMARY KEY (필드이름)
- FOREIGN KEY
- 한 테이블을 다른 테이블과 연결해주는 역할
- FOREIGN KEY 제약 조건은 하나의 테이블을 다른 테이블에 의존
1
2
3
4
5
6
7
8
9
10
11
12
13
# CREATE 문으로 FOREIGN KEY 설정
CREATE TABLE 테이블이름 (
필드이름 필드타입,...,
[CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름)
)
# ALTER 문으로 FOREIGN KEY 설정
ALTER TABLE 테이블이름
ADD [CONSTRAINT 제약조건이름]
FOREIGN KEY (필드이름)
REFERENCES 테이블이름 (필드이름)
페이징 처리
- 많은 데이터를 한번에 볼 수 없기 때문에 특정 위치부터 특정 개수까지 표시
- DB별 페이징 처리
- ORACLE : ROWNUM
- MySQL, MariaDB: LIMIT
- MSSQL: OFFSET,FETCH(2012 이후)
VIEW 테이블
- 실질적으로 존재하는 테이블이 아닌 정의만 갖고있음.
- READ ONLY 테이블(SELECT만 가능)
1
2
3
4
5
6
7
8
# 뷰 생성(원본 테이블과 같은이름 사용 불가)
CREATE VIEW v_뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건
#뷰 삭제
DROP VIEW 뷰이름
프로시저, 트리거
- 프로시저(Procedure)
- DB에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것
1
2
3
4
5
6
7
8
9
10
11
12
13
# 프로시저 생성
create procedure sp_프로시저명()
begin
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건
end
# 프로시저 출력
call sp_프로시저명()
# 프로시저 삭제
drop procedure sp_프로시저명()
- 트리거(Trigger)
- DML문이 수행될 때 DB에서 자동으로 동작하도록 작성된 프로그램
1
2
3
4
5
6
7
8
9
10
11
# 기존 테이블 업데이트 시 새로운 테이블에 기존 내용이 입력되는 트리거
CREATE TRIGGER tg_트리거명
BEFORE UPDATE
ON 기존테이블명
FOR EACH ROW
BEGIN
INSERT INTO 새로운테이블명
(필드이름1, 필드이름2, ...)
VALUES
(old.필드이름1, old.필드이름2, ...)
END
댓글남기기