Diary, Data, IT

[TIL] 8일차 TIL(20230215) - DBMS이론 및 SQL기초, 조건절 본문

STARTERS/TIL

[TIL] 8일차 TIL(20230215) - DBMS이론 및 SQL기초, 조건절

라딘 2023. 2. 15. 17:22

 

[TIL] 8일차 TIL(20230215) - DBMS이론 및 SQL기초, 조건절

 

 


1. 데이터베이스
- 목적에 맞도록 관련된 데이터를 저장하고 처리하기 위한 방법
- 동시성: 여러 명의 사용자가 동시에 접근 가능
- DBMS: 데이터베이스를 관리/운영하는 역할, 동시 사용 가능한 데이터 저장공간을 위한 시스템
- 관계형 DBMS(RDBMS)는 정형화된 키, 값의 테이블의 집합, SQL언어를 통해 처리할 수 있음


2. 데이터베이스의 기능적 특징
- 데이터 정의: 데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경기능을 수행
- 데이터 조작: 데이터를 조작하는 소프트웨어(응용 프로그램)가 요청하는 데이터의 삽입, 수정, 삭제 작업을 지원
- 데이터 추출: 사용자가 조회하는 데이터 혹은 응용 프로그램의 데이터를 추출
- 데이터 제어: 데이터베이스 사용자를 생성하고 모니터링하며 접근을 제어하며, 백업과 회복, 동시성 제어 등의 기능을 지원


3. Schema(스키마)
- DBMS에 테이블을 여러개 저장하는 공간


4. Table
- DBMS의 기본 저장구조로서 column과 row단위로 구성됨
- Entity: 데이터로 저장하고자 하는 관심이 있는 명사 단위의 개체
  ex) 엔티티: 학생/ 속성: 이름, 학과, 학번, 학점 등
- Entity Relation에 의해 테이블 사이의 관계를 불필요한 낭비를 줄이고 효율적으로 저장하게 함
- 테이블 사이의 관계: 기본 키(Primary Key)와 외래 키(Foreign Key)를 사용해 관계를 맺어줌
- 추후에 SQL의 join기능을 통해 테이블을 묶을 수 있음


5. SQL 명령어 구분
- DML(Data Manipulation Language): 데이터 조작어로 검색 및 수정기능 제공
SELECT, INSERT, UPDATE, DELETE, MERGE
- DDL(Data Definition Language): 데이터 구조를 생성, 변경, 삭제 등의 기능 제공
CREATE, ALTER, DROP, RENAME
- DCL(Data Control Language): 데이터에 대한 권한 관리 및 트랜잭션 제어, 보안과 관련된 사항
GRANT, REVOKE

 

6. 데이터 자료형 종류

 

데이터 타입 설명
INTEGER, INT 4바이트 정수형
NUMERIC(m,d)
DECIMAL(m, d)
전체자리수 m, 소수점이하 자리수 d를 가진 숫자형
CHAR(n) 문자형 고정길이, 문자를 저장하고 남은 공간은 공백으로 채움
VARCHAR(n) 문자형 가변길이
DATE 날짜형/ 연도, 월, 날, 시간을 저장

 

 

7. 테이블 생성 및 삭제

- CREATE TABLE 테이블명 (속성명 자료형);

CREATE TABLE BookLibrary (
	bookid	INTEGER,
    bookname	VARCHAR(20),
    publisher	VARCHAR(20),
    price	INTEGER
);

- DROP TABLE 테이블명: 테이블의 구조와 데이터를 모두 삭제

 

7.1 제약조건

- 테이블을 생성할 때 예상치 못한 데이터의 손실이나 일관성을 어기는 데이터의 추가, 변경 등을 예방하기 위해 제약조건을 설정

- NOT NULL: NULL값을 가질 수 없음
- UNIQUE: 중복된 값을 저장할 수 없음
- PRIMARY KEY/FOREIGN KEY
- CHECK: 조건을 만족하지 않으면 오류 반환
- DEFAULT: 값을 입력하지 않으면 기본값으로 설정

 

7.2 PRIMARY KEY, FOREIGN KEY
- PRIMARY KEY: 기본키(인덱스)로 지정하여 테이블을 검색할 때 기준으로 사용, 기본키의 지정 유무가 검색 속도에 영향을 주기 때문에 지정하는 것이 좋음
- FOREIGN KEY: 다른 테이블들과의 관계를 나타낼 수 있는 외래키

CREATE TABLE BookLibrary (
	bookname VARCHAR(20) NOT NULL,
	publisher VARCHAR(20) UNIQUE,
	price INTEGER DEFAULT 10000 CHECK(price > 5000),
	PRIMARY KEY (bookname, publisher)
);

 

 

8. ALTER문
- ALTER TABLE 테이블명 ADD 칼럼명 자료형: 테이블에 해당 자료형을 가진 칼럼(속성)을 추가
- ALTER TABLE 테이블명 MODIFY 칼럼명 자료형: 테이블에 해당 칼럼(속성)의 자료형을 변경
- ALTER TABLE 테이블명 DROP COLUMN 칼럼명: 테이블의 해당 칼럼을 삭제

 

-- booklibrary 테이블에 VARCHAR(30)의 자료형을 가진 inventory속성 추가
ALTER TABLE booklibrary ADD inventory VARCHAR(30);

-- booklibrary 테이블의 inventory속성의 데이터 타입을 INTEGER로 변경
ALTER TABLE booklibrary MODIFY inventory INTEGER;

-- booklibrary 테이블의 inventory속성 삭제
ALTER TABLE booklibrary DROP COLUMN inventory;

 

9. SELECT FROM절

SELECT [ALL┃DISTINCT] 컬럼이름[,] | *
FROM [dbname.]테이블이름[,]
[WHERE 검색조건(들)]
[GROUP BY 속성이름]
[HAVING 검색조건(들)]
[ORDER BY 속성이름 [ASC┃DESC]]


- ORDER BY에 칼럼 번호로 지시 가능

 


10. INSERT
- INSERT는 새로운 값을 추가하는 명령
- 값을 추가할 때 테이블의 자료형에 부합하는 형식으로 넣어줘야 함

INSERT INTO 테이블명(칼럼1, 칼럼2, 칼럼3, ...)
VALUES (값1, 값2, 값3, ...);

 

 

11. UPDATE
- 특정 칼럼(속성) 값을 수정하는 명령어
- *주의*: 조건을 걸어주지 않으면 해당 테이블의 모든 값을 수정하게 됨.

UPDATE 테이블명
SET 칼럼명1=값1, 칼럼명2=값2, ...
WHERE 조건;



12. WHERE 조건 구문

술어 연산자
비교 =, <, >, <=, >= price < 20000
범위 BETWEEN AND price BETWEEN 10000 AND 20000
집합 IN, NOT IN price IN (10000, 20000, 30000)
패턴 LIKE bookname LIKE '%이%'
NULL IS NULL, IS NOT NULL price IS NULL
복합조건 AND, OR, NOT (price < 20000) OR (bookname LIKE '철학의 역사')

 

12.1 LIKE절
- LIKE '문자열 조건': 문자열 조건과 일치하는 것들만 선택

연산자 기능 설명
% 여러 문자와 일치하는 패턴 %학% ‘학’이 포함된 문자열
_ 한 문자와 일치하는 패턴 _학 ‘학’ 앞에 임의의 한 문자가 들어간 문자열
[] 1개의 문자와 일치 '[0-9]%' 0-9 사이 숫자로 시작하는 문자열
[^] 1개의 문자와 불일치 '^[0-9]%' 0-9 사이 숫자로 시작하지 않는 문자열

 


13. NULL

- NULL값은 비교가 불가능하며, 연산을 수행하면 결과 역시 NULL값으로 반환됨

- 집계 함수 계산 시 NULL이 포함된 행은 집계에서 빠짐

- 해당되는 행이 하나도 없을 경우 SUM, AVG 함수의 결과는 NULL이 되며, COUNT 함수의 결과는 0

- IFNULL(칼럼, '대체할 값'): 해당 칼럼에 NULL이 있을 경우 다른 값으로 대체해줌

 


14. DISTINCT/LIMIT
- DISTINCT: 조회된 결과에서 중복된 데이터를 제외하고 출력(unique)
- LIMIT: 쿼리문의 결과의 출력 개수를 제한, 쿼리문의 제일 마지막에 사용
  LIMIT s, n: s번째 행부터 n개를 출력


15. CASE WHEN

CASE
WHEN 조건
THEN '반환 값'
WHEN 조건
THEN '반환 값'
ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END


- ELSE가 존재하지 않고, 조건에 맞지 않아서 반환 값이 없으면 NULL를 반환

 

 


 

소감 및 정리

데이터베이스에 대한 개념 설명과 간단한 SQL문을 작성하는 시간을 가졌다. SQL문 자체를 처음 다뤄보는 것은 아니지만 배운지 시간이 꽤 지났고 직접 쓸 일이 많지는 않았어서 잊어버리고있던 구문이 생각보다 많았다. 당분간 수업을 통해 해당 구문들에 익숙해지는 시간을 가져야할 것 같다.