데이터베이스란?
- 특정 데이터를 확인하고 싶을 때 간단하게 찾아낼 수 있도록 정리된 형태
- 날라가면 안되니까, 하드디스크/SSD 등 비휘발성 저장장치에 저장하자~
DBMS(Database Management System)란?
- DB를 관리하는 SW로, 사용 목적은 생산성 향상과 기능성, 신뢰성 확보에 있음
- 어떤 시스템이던 데이터에 대한 CRUD 기능은 필요
- 이와 같은 기본 기능을 DBMS에서 제공!
- 밑바닥 부터 구현해서 쓰지말고, DB에 접근은 DBMS를 통해 해보자~
SQL이란?
- 위에서 언급한 DBMS와의 대화에 필요한게 SQL!
- SQL이 대화할 수 있는 DBMS는 RDBMS!
- RDBMS: Relational Database Management System
- SQL은 Relational Database에서 사용한다!
- SQL의 명령의 종류는 총 3가지!
- 참고: https://server-talk.tistory.com/159
- DML: DB내의 데이터 조작 (내부 데이터 CRUD)
- SELECT
- INSERT
- UPDATE
- DELETE
- DDL: 테이블과 같은 데이터 구조 정의 (DB 데이터 구조 CRUD)
- CREATE
- ALTER
- DROP
- TRUNCATE
- DCL: 데이터베이스 제어 (트랜잭션(?)제어, 접근 권한 제어)
- GRANT
- REVOKE
- COMMIT
- ROLLBACK
테이블
- 행과 열로 구성된 표 형식의 데이터
- 지원하는 데이터 타입
- 수치형: 숫자만으로 구성된 데이터
- 문자열형: 임의의 문자로 구성
- 날짜시간형: 날짜와 시각 나타냄
- NULL: 값이 없는 데이터
SELECT
- '질의', '쿼리'로 불리는 명령
- 테이블의 열 (Column) 데이터를 읽어오기
DESC
- SQL 명령은 아님
- 테이블에 어떤 열이 정의(Field, Type 등) 되어 있는지 알 수 있음
WHERE
- 테이블의 행 데이터를 읽어오기
- 많은 행 속에서 필요한 데이터만 검색하기 위함
- 조건식을 통해서 "필요한 데이터"를 추출해보자!
- ex) SELECT 열 FROM 테이블명 WHERE 조건식
- 조건식
- = : 값이 같다면
- <> : 값이 다르다면
- IS NULL : 값이 NULL 이라면
- IS NOT NULL : 값이 NULL 아니라면
- 조건 조합하기
- AND, OR, NOT
- AND가 OR 보다 우선순위 높아서 괄호 사용을 권장한다~
- 패턴 매칭
- LIKE 술어를 통해 패턴 매칭을 해보자!
- ex) WHERE text LIKE 'SQL%'
- 해석: SQL~~~~~ 형식의 text를 뽑아와주세요!
- 복잡한 패턴이라면 정규 표현식 사용을 검토해보자~
ORDER BY
- 검색 결과의 행 순서를 바꾸는 명령
- 서버에서 클라이언트로 행 순서를 바꾸어 결과를 반환하는 것 뿐, 저장장치에 저장된 데이터의 행 순서 변경 X
- ex) SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명
- 순서
- DESC: 내림차순으로 정렬하기
- ASC: 오름차순으로 정렬하기
- 복수의 열에 순서 부여가능!
- ex) SELECT name FROM student ORDER BY age DESC, id ASC
- MySQL의 경우, NULL 값을 가장 작은 값으로 취급한다
LIMIT
- 결과의 최대 행수를 제한하는 방법
- 표준 SQL은 아님. (MySQL, PostgreSQL에서 사용)
- OFFSET과 조합해 pagination 처럼 알맞은 위치에, 필요한 사이즈의 정보를 가져올 수 있음
AS
- 해당 열에 대해 별명을 부과할 수 있다.
- 가령 두가지 column을 연산하여 새로운 column을 만들때, 별명을 부여해 가져오면 보기 좋음
- 다만, SQL의 구 처리 순서에 따라 반영 시점이 달라서, 잘 알고 쓰자!
- ex) SELECT *, price * quantity AS amount FROM sample
WHERE amount >= 2000; // 오류오류! ==> WHERE구 -> SELECT구 순서로 처리!
문자열 연산
- CHARACTER_LENGTH: 문자열의 길이를 계산해 돌려주는 함수
- OCTET_LENGTH: 문자열의 길이를 바이트 단위로 계산해 돌려주는 함수
CASE
- 간단한 데이터 처리는 CASE로도 가능하다!
- ex) SELECT a AS "코드",
CASE a
WHEN 1 THEN '남자'
WHEN 2 THEN '여자'
ELSE '미지정'
END AS "성별" FROM sample;
INSERT
- RBDMS에서 INSERT 명령을 통해 테이블의 행 단위로 데이터를 추가한다!
- 행의 데이터는 다음과 같이 "VALUES" 구를 통해 지정하자
- ex) INSERT INTO sample VALUES(1, 'ABC', '2014-01-25')
- ex) INSERT INTO sample (열1, 열2) VALUES(값1, 값2)
DELETE
- RBDMS에서 DELETE 명령을 통해 행 단위로 데이터 삭제 가능
- 조건식 "WHERE"를 통해 해당 조건을 만족하는 행을 삭제하자
- 다만! 조건을 만족하는 모든 행을 삭제하니 주의 요망
- ex) DELETE FROM sample WHERE no=3;
UPDATE
- RDBMS에서 UPDATE 명령을 통해 데이터를 갱신할 수 있다
- ex) UPDATE 테이블명 SET 열1 = 값1, 열2 = 값2, WHERE 조건식;
- ex) UPDATE sample SET a = 'xxx' WHERE no = 2;
- ex) UPDATE 테이블명 SET 열명=값 WHERE 조건식
- ex) UPDATE sample SET a = 'xxx', b = '2014-01-01' WHERE no = 2;
물리삭제와 논리삭제
- 물리삭제: 직접 데이터를 DB에서 ㄹㅇ 삭제
- ex) 개인 정보 삭제 등
- 논리삭제: 삭제 플래그를 통해서 논리적으로 삭제되었음을 표시
- ex) 쇼핑 주문 취소 등... 주문 데이터 자체는 갖고있는게 유리할 수도!
- 상황에 따라, 용도에 따라 데이터 삭제 방법을 선택하자!