SQL

데이터베이스와 SQL의 기초

Bordercolli 2023. 8. 7. 13:18
728x90

데이터베이스와 SQL의 기초

DB(Database)

  • 논리적으로 연관된 데이터를 모아 일정한 형태로 저장해 놓은 것
  • 응용 시스템들이 공용(shared)으로 사용하기 위해 통합(Integrated), 저장(Stored)한 데이터 집합

 

Database Management System(DBMS)

  • 데이터베이스 관리 프로그램
  • DBMS를 이용하여 데이터 입력, 수정, 삭제 등의 기능을 제공

DB특징

  • ISOS
  • R1C3
Integrated Data(통합 데이터) 데이터 중복 최소화
Stored Data(저장 데이터) 컴퓨터가 접근할 수 있는 매체에 저장된 데이터
Operational Data(운영 데이터) 조직의 고유한 업무를 수행하는데 필요한 데이터
Shared Data(공용 데이터) 여러 응용 시스템이 공동으로 소유하고 유지하는 데이터
Real Time Accessibility(실시간 접근성) 사용자 질의에 실시간 처리해 응답
Continous Evolution(지속적인 변환) 삽입, 삭제, 수정 작업을 통해 항상 최신의 데이터를 동적으로 유지
Concurrent sharing(동시 공유) 목적이 다른 여러 사용자가 동시에 같은 데이터를 공유
Content Reference(내용에 의한 참조) 데이터베이스에 있는 데이터를 참조할 때 레코드의 주소나 위치가 아닌 사용자가 요구하는 데이터 내용으로 참조 

데이터베이스 종류

계층형 데이터베이스 네트워크형 데이터베이스
1. 부모와 자식이 트리 관계를 이루는 구조
2. 부모는 여러 자식 레코드를 가질 수 있음.
3. 데이터 중복이 발생하기 쉬움.
4. 상하 종속관계로 인하여 수정이 어렵다.
5. 현재는 거의 사용되지 않음
1. 데이터를 노드로 표현한 모델
2, 노드는 네트워크 상에 있으며 서로 대등한 관계
3. 계층형의 단점인 중복, 상하 종속 관계 해결
4. 구조가 복잡하여 변경이나 운영이 어렵고 종속성 문제 발생
키-값 데이터베이스 관계형 데이터베이스
1. NoSQL의 한 종류로 키-값을 일대일 대응한 데이터 저장
2. 데이터 중복이 발생, 비정형 데이터 저장에 유리
1. 데이터 열과 행으로 구성하여 테이블로 정리
2. 고유키는 각 행을 식별
3. 데이터는 행 단위로 저장되며 각 항목의 속성은 열이라고 표현
4. 테이블간의 관계를 이용하여 데이터를 정의

상세

키-값 데이터베이스 

- 고유한 키 값이 정해져 있고, 그 키에 해당하는 값이 매핑되어 있는 형태이다. 

- 관계형 데이터베이스와는 다르게 데이터 중복이 발생하지만 비정형 데이터 저장에 유리

 

관계형 데이터베이스 

왜 관계형 데이터베이스라고 부르냐면 '관계형' 이 단어에서 부터 에측할 수 있듯이 테이블 간의 관계를 이용해서 데이터를 정의하여 사용할 수 있다.

즉, 어떤 한 테이블이 있고 다른 테이블이 있을 때 각각의 데이터는 중복을 최소화시키고 목적에 맞는 테이블 설계한 뒤 이 둘간의 조인을 통하여 우리가 원하는 데이터를 조회할 수 있다.

 

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

1. 데이터가 중복되지 않도록 하여 테이블의 역할을 명확하게 구분
2. 테이블 간에는 외래키(FK)를 사용하여 데이터를 공유하는 것으로 서로 관계를 맺도록 설계한 데이터 모델
3. 데이터의 중복을 허용하지 않으니 Object안에 Object를 넣을 수 없어서 두 개의 테이블의 데이터를 조인해서 사용

1. Schema-less: 스키마를 반드시 정의하지 않아도 된다.
2. key-value방식으로 데이터를 관리한다.
3. 수평적 확장(scale out)에 적합하다.
4. 트랜젝션 관리가 안된다.
4. 사용목적에 따라서는 ACID가 중요하지 않을 수 있다. 

상세

관계형 데이터베이스: 우리들이 많이 익숙한 여러가지 상용 솔루션부터 시작해서 오픈소스가 있는데, 대표적으로 ORACLE, MYSQL, SQL SERVER, SQL Lite, PostgreSQL, mariaDB 등이 있다.

비관계형 테이터베이스: 스키마(특정한 형태)가 없는 데이터베이스를 말한다. 특정한 형태가 없어서 형식에 자유롭다. mongoDB, redis, HBASE, cassandra

* redis : 메모리DB에 많이 사용한다.

* HBASE : 타임라인시리즈에 특화됨.

 

ACID

데이터베이스 트랜잭션들이 안정적으로 수행된다는 것을 보장하기 위한 성질을 가리키는 약어 

원자성(Atomicity) 트랜잭션과 관련된 작업들이 모두 수행되었는지 아니면, 모두 실행이 안되었는지를 보장하는 능력
ex) 자금 이체는 성공할 수도 실패할 수도 있지만, 중간 단계까지 실행되고 실패하는 일은 없도록 하는 것 
일관성(Consistency) 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
ex) 무결성 제약이 모든 계좌는 잔고가 있어야 한다면, 이를 위반하는 트랜잭션은 중단된다.
고립성(Isolation) 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것 
즉, 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음.
ex) 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다.
지속성(Durability) 1. DBMS가 사용자에게 transaction commit 응답을 했을 경우, 설사 DB객체에 대한 해당 변경사항이 디스크에 반영(Flush) 되기 전에 시스템 장애가 발생하였더라도 해당 트랜잭션의 커밋은 보장되어야 한다는 속성
2. DBMS는 트랜잭션의 지속성을 제공하기 위해 로그(log)라고 하는 데이터베이스 객체의 갱신 작업에 대한 기록을 관리
3. Commit된 transaction에 의해 갱신된 내용이 디스크에 미처 반영되기 전에 시스템 장애가 발생하면 시스템 재 구동 시에 로그를 판독하여 변경된 내용을 복구하게 된다.

 

그렇다면 SQL이란 무엇일까??? ▼

 

SQL(Structure Query Language)이란 무엇인가?

  • 데이터베이스에서 데이터 조작과 데이터 정의를 하기 위해 사용하는 언어
  • 사용자는 데이터베이스에 데이터를 입력/ 조회/ 수정/ 삭제를 하기 위해 SQL을 사용한다.

상세: sql 자체는 데이터베이스가 아니라 sql은 데이터베이스를 관리하기 위한 언어이다. 그러면 sql에는 어떤 구문이 있는가?

 

SQL구문 네 가지

DDL: 데이터 정의 언어(Data Define Language)는 데이터베이스를 정의하는 언어 테이블 및 스키마를 관리
1. CREATE: 데이터베이스 또는 테이블을 생성
2. ALTER: 테이블을 수정
3. DROP : 데이터베이스 또는 테이블 삭제
4. TRUNCATE: 테이블을 초기화

* DELETE와 TRUNCATE의 차이점: DELETE는 데이터를 지운다는 개념과는 비슷하지만, DELETE는 하나의 데이터를 삭제하는 것이지만, TRUNCATE는  테이블을 초기화하는 것으로 처음부터 데이터가 없었던 상태로 만들어 두는 것
즉, DELETE는 행 자체를 비우는 것 / TRAUNCATE는 테이블 자체를 비우는 것 
DML: 데이터 조작 언어(Data manipulation language)는 데이터베이스에 입력된 데이터를 검색, 입력, 수정, 삭제 
1. SELECT: 데이터를 검색
2. INSERT: 데이터를 임력 
3. UPDATE: 데이터를 수정
4. DELETE: 데이터를 삭제
DCL:데이터 제어 언어(Data control language)는 데이터베이스에 접근하거나 객체에 권한을 부여
1. GRANT: 특정 수행 권한을 부여
2. REVOKE: 특정 수행 권한을 삭제
3. COMMIT: 트랜잭션 작업을 완료하는 역할
4. ROLLBACK: 트랜잭션 작업을 취소하거나 이전 상태로 복구하는 역할 

SQL을 배워야 하는 이유

  • 질문

1. 작년 대비 매출이 얼마나 증가?

2. 계절별로 어떤 상품이 잘 팔리고 있는가?

3. 고객1인당 매출은 어떻게 되는가? 

4. 첫 구매 후 재구매까지 걸리는 시간은 어느정도인가?

...

어떠한 의사결정을 한다고 할때 이러한 의무를 가지고 데이터의 관점에서 바라보게 된다. 이러한 데이터를 보려면 데이터베이스에 저장되어 있는 데이터를 절약하기 위해서 사용되는 언어가 SQL이다.

 

  • 이유

1. 대부분의 데이터는 SQL방식의 DB에 저장되어 있다.

2. 그 데이터를 뽑으려면 SQL문법에 맞게 컴퓨터에 명령을 내려야 한다.

3. 데이터 분석의 시작은 '데이터 추출'이다. 데이터를 추출해야 분석할 수 있다.

4. SQL방식이 아닌 데이터를 추출할 때도, SQL과 비슷한 문법으로 컴퓨터에 명령을 내려야 한다.

 

상세: 데이터베이스에 데이터를 뽑으려면 SQL문에 맞게 컴퓨터에 명령을 내려야하는데, 데이터의 분석 시작은 '데이터 추출'에서부터 시작된다. 데이터를 우선 추출해야 그 추출한 데이터를 보고 분석할 수 있다. 그래서 데이터를 추출하기 위해서 SQL이 필요로 하고 또한 SQL장점이 SQL방식이 아닌 데이터의 추출 즉 관계형 DB가 아닌 NoSQL이나 Hadoop같은 빅데이터 시스템에서 조회할때도 sql구문을 사용할 수 있다. 그렇기 때문에 우리들이 sql을 배우면 다양한 형태에 저장된 데이터를 직접 조회하고 거기에 나온 데이터를 분석할 수 있다. 그림에서 면 사용자가 sql명령 하나를 실행했지만 실제 이 sql은 하둡, nosql, rdbms에서 사용할 수 있다. 각각의 db에는 웹로그, 게임로그, 회원 정보, 상품목록 같은 다양한 데이터가 목적에 맞게 저장되어있고 우리는 sql을 통해서 이런 데이터를 조회/ 분석할 수 있다. 

 

SQL을 통해 실습할 수 있는 내용들 

  • 오늘 10%이상 급등/하락한 종목은?
  • 3일 연속 5%이상 하락한 종목은?
  • COVID로 주가 폭락시 회복까지 걸리는 시간은?
  • 배당이 높은 주식은?
  • 일 거래량이 높은 주식은?
  • 30일 이동 평균 가격은?
  • 국제 오일 가격과 정유주와의 등락 관계는?

DBMS의 장점

1. 대용량 데이터 처리 제공

2. 데이터 중복(Redundancy)의 최소화

3. 일관성(Conssistency) 유지

4. 무결성(Integrity) 유지

5. 보안(Security) 보장

6. 데이터의 공용(shared)

7. 표준화(Standardization) 용이

 

상세: 데이터 종목을 최소화하여 현재 데이터가 최신임을 보장하는 시스템이다. DB는 다양한 사용자가 접근하다 보니 보안 부분에서도 강화되어 있다. 그리고 여기 저장된 데이터들은 여러 시스템들이 공용으로 사용할 수 있고, 표준화 용이는 행과 열에서 열에 대한 Columns의 속성으로서 현재 어떤 데이터가 저장되는지 그리고 데이터 키가 무엇인지 등 이러한 표준화가 잘 되어있다고 정리할 수 있다. 

 

 

 

 

'SQL' 카테고리의 다른 글

SQL 조건문  (0) 2023.08.09
SQL로 함수 사용하기  (0) 2023.08.09
CUSTOMER DATA2  (0) 2023.08.08
PRODUCT DATA  (0) 2023.08.07
CUSTOMER DATA1  (0) 2023.08.07