요즘들어 안좋은 얘기들 많으 들어서 그런지
조금 우울한 하루들이 계속 되고있다.

아무래도 정신적인 문제는 공부에 집중에 저하가 되는 것 같다.
당분간은 속이 괜찮아질때까지 쉬엄쉬엄
페이스조절하면서 공부를 해보려한다.
처음 설정했던 목표를 위해서, 오늘도 화이팅!














오늘은 데이터 베이스에 관련된 내용을 공부했다.
크게보면 RDBMS(관계형 데이터베이스)의 주제로
안에 있는 내용들을 들여다 보려한다.

DB의 필요성

DB는 DataBase의 약자로 줄여서 부른다.
우리는 데이터베이스가 왜 필요한지 생각해봐야한다.

In-Memory
-> 우리가 프로그램 내에 데이터를 저장하려면, 프로그램이 실행되는 동안에만 값을 유지하고
종료되면 데이터는 사라지게된다. 즉, 프로그램 실행에 의존되어진다.

File I/O
엑셀 시트 CSV와 같은 파일형태로 저장할 수도 있다.
나도 이전 직종에서 프로그램 로그를 남길때나 데이터 검사를 위해 잠시 테스트로 데이터를 남길때
주로 CSV에 남겼다. 하지만 웹은 내가 사용했던 CPU랑은 다르고 구조도다르다.
만약 웹상에 이와 같이 CSV파일 같은 경우로 남기게되면 데이터가 필요할 때마다 전체파일을
매번 읽어야하고, 파일이 커지면 커질수록 작업이 버거워서 매우 비효율 적이다.

SQL

SQL의 약자는 Structured Query Language이며, 직역하면 구조화 쿼리 언어이다.
주로 관계형 데이터 베이스에 사용한다. (MySQL, Oracle etc…)

즉, SQL을 사용하기 위해서는 데이터 구조가 고정되어 있어야한다.
사전에 구조와 데이터 타입 등을 사전 정의하고
테이블에 정의된 내용에 알맞은 형태의 데이터만 삽을 할 수 있다.

행과 열로 구성된 테이블에 데이터를 저장하고
각 역은 하나의 속성, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다.
엑셀과 비슷한 형태의 느낌으로 생각하면된다.

여기서 Q에 해당하는 Query가 무엇인지 알아보자.

Query
데이터베이스 용 프로그래밍 언어이다.
쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있다.
오늘은 w3schools 웹사이트를 통해
간단한 SQL 문법에 대해서 공부했고

오늘 공부해본 SQL을 사용하기위한 기본 문법을 아래 적어본다.

1). SELECT
SELECT 컬럼명 FROM 테이블
-> 테이블로부터 컬럼의 데이터를 가져오기
-> ex) SELECT City FROM Customers;
-> ex) SELECT * FROM Customers;

2). DISTINTCT
DISTINTCT
-> 유니크한 값 찾기

3). WHERE
WHERE 컬럼명 = 찾을값
-> 특정값을 찾을때 (조건)
-> ex) WHERE City = ‘Oslo’;
-> 다중으로 쓸때 ex) WHERE City = ‘Oslo’ AND City = ‘London’;

4). IN
SELECT * FROM Customers
WHERE Country IN (‘Norway’, ‘France’);
-> Where 뒤에 사용, 둥중하나라도 있을 경우 필터링

5) ORDER
ORDER BY
-> 오름차순정렬,
-> ESC 내림차순
-> 여러개 정렬할때 / ORDER BY 요소, 요소

6). INSERT
INSERT INTO 테이블 ( 컬럼명1,컬럼명2 ) VALUES ( 값1,값2 );
-> 해당 테이블 안에 컬럼에 해당하는 값을 넣은
-> ex) INSERT INTO Customers (Name, age) VALUES (‘LEE’,’28’);

7). UPDATE UPDATE 테이블 SET 컬럼명 = 데이터
-> 해당 테이블의 컬럼에 데이터를 업데이트
-> ex) UPDATE Customers SET City = ‘Oslo’;

8). DELETE
DELETE FROM 테이블명;
-> 해당 테이블 행을 모두 삭제
-> WHERE절을 붙일경우 해당하는 내용의 행만 삭제
-> ex) DELETE FROM Customers;
-> ex) DELETE FROM Customers WHERE Country = ’Norway’;

9). BETWEEN
BETWEEN 값 AND 값
-> 해당 컬럼에서 사이에 해당하는 값을 추출
-> ex) SELECT * FROM Products WHERE Price BETWEEN 10 AND 20;

10). ALIAS
AS 별칭

-> 해당 테이블이나 컬러명의 별칭을 붙임
-> SELECT * FROM Customers AS c;

11). JOIN ON
FROM 기존 테이블명 JOIN 연결 테이블명 ON 테이블값 비교

LEFT JOIN
-> 왼쪽집합만
-> SELECT * FROM Orders LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

INNER JOIN
-> 교집합
-> SELECT * FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

RIGHT JOIN
-> 오른쪽 집합만
-> SELECT * FROM Orders RIGHT JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

12). LIKE
LIKE ‘문자열%’
*와일드카드*
‘문자열%’ -> 맨앞에만찾기
‘%문자열’ -> 맨뒤에만찾기
‘%문자열%’ -> 전체 찾기
‘_문자열%’ -> 두번째 글짜찾기
‘[문자열]’ -> 문자열 안에 OR찾기 
‘[문자열1-문자열2]%’ -> 첫번째 문자열의 문자열1 부터 문자열2까지찾기

13). GROUP BY

GROUP BY
-> 그룹별 집계
-> ex) SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country;

14). Function 관련

MIN(열) -> 열중에 가장 작은값
MAX(열) -> 열중에 가장 큰값 찾기
Count(*) -> 전체 행의 숫자 가져오기
AVG(열) -> 열의 평균값
SUM(열) -> 열의 합산값

15). Data Base 관련
CREATE DATABASE 이름
-> 데이터베이스 생성

DROP DATABASE 이름
-> 데이터베이스 삭제

CREATE TABLE 이름
-> 이름에 해당하는 테이블 생성

DROP TABLE 이름
-> 이름에 해당하는 테이블 완전삭제

TRUNCATE TABLE 테이블 이름
-> 테이블 내용만삭제

ALTER TABLE 테이블명 ADD 컬럼명 데이터 타입
-> 테이블의 컬럼 추가
ex) ALTER TABLE Country add USA VARCHAR(25)

ALTER TABLE 테이블명 DROP COLUMN 컬럼명
-> 테이블의 컬럼 삭제

ACID

ACID는 데이터 베이스 내에서 일어나는 하나의 트랜잭션의 안정성을
보장하기 위해 필요한 성질이다.
여기서 트랜잭션(Transaction)이란?
여러 개의 작업을 하나로 묶은 실행 유닛이다.

즉, 각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는
모든 작업들은 다 완료해야 정상적으로 종료한다.

Atomicity (원자성)
하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나
전부 실패해서 결과를 예측할 수 있어야한다.

Consistency (일관성)
데이터베이스의 상태가 일관되어야한다는 성질
만약 이름과 나이라는 데이터를 가지게끔 규약해놓은 테이블이 있을때
이름을 삭제한다거나, 이름을 안넣고 추가한다거나
이렇게 되면 데이터베이스의 상태가 인관되지않고 변하게된다.

Isolation (격리성)
모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야한다.
실제 여러개의 트랜잭션이 수행될 때, 각 트랜젝션은 고립되어
연속으로 실행된 것과 동일한 결과를 나타낸다.

Durability (조속성)
하나의 트랜잭션이 성공적으로 수행되었다면
해당 트랜잭션에 대한 로그가 남아야한다. 만약 시스템 오류가 발생하더라도
해당 기록은 영구적이어야한다는 뜻이다.

NoSQL

SQL앞에 No가 붙은 형태로 비관계형 데이터 베이스를 가르킨다. (MonggoDB, Casandra etc..)
NoSQL은 데이터가 고정되어 있지 않은 데이터베이스를 가르킨다.
관계형 데이터베이스는 데이터를 입력할 때 스키마에 맞게 입력해야하는 반면
비관계형 데이터베이스는 데이터를 읽어올 때 스키마에 따라 데이터를 읽어온다.
이런 방식을 schema on read라고 한다.

즉, 데이터를 입력하는 방식에 따라 데이터를 읽어올 때 영향을 미친다.

비관계형 데이터베이스 타입

  1. Key-Value (Redis, Dynamo)
  2. 문서형 (MongoDB)
  3. Wide-Column (Cassandra, HBase)
  4. 그래프 (Neo4J, InfiniteGraph)

위와 같이 4가지 타입이 있고
이번학습에서는 주로 관계형 데이터베이스를 다룰 것 같고
비관계형 데이터베이스는 우선 있다 정도만 알아둬야할 것 같다.
관계형 데이터베이스 공부를 어느정도 마친후
이후에 추가학습을 통해 공부가 필요해보인다.


오늘의 커피량: ☕️ ☕️ ☕️ ☕️
오늘의 점심: 김밥