2022-03-04 T.I.L 작업중

정종훈·2022년 3월 4일
0

임시

목록 보기
6/11

관계형 데이터베이스 성취목표

백엔드 개발에서 매우 중요한 데이터베이스를 학습합니다.
이번 유닛은 다음의 세 가지의 큰 흐름을 따라 진행합니다.

  • SQL 문법
  • 스키마 디자인 (Schema design)
  • Node.js에서 데이터베이스를 사용하는 방법

Learn SQL, Designing Schema

SQL(Structured Query Language)을 학습하면, 관계형 데이터베이스를 자유자재로 다룰 수 있습니다. 대표적인 관계형 데이터베이스(RDBMS)인 MySQL로 Schema를 설계하고, SQL을 사용하여 데이터를 영속성있게(persistently) 저장하는 방법을 학습합니다.

Achievement Goals

  • 3 Tier Architecture 를 이해한다.

  • 영속성의 개념을 이해하고, 데이터베이스의 필요성을 인지한다.

  • 데이터베이스 종류를 이해한다.

    • 관계형 데이터베이스와 NoSQL의 차이를 이해한다.

    • 관계형 데이터베이스 및 NoSQL이 어떤 경우에 적합한지 이해한다.

      		#### Learn SQL
  • SQL 주요 문법을 이해할 수 있다.

    • 조회, 삽입, 갱신, 삭제 구문을 자유자재로 사용할 수 있다.
    • 조회 시 다양한 조건을 걸어 원하는 정보만 조회할 수 있다.
    • 통계를 위한 쿼리를 만들 수 있다.
  • 스키마 디자인을 할 수 있다.

    • 앱에 필요한 테이블과 필드, 그리고 관계를 부여할 수 있다.
  • 1:N, N:N 관계를 이해하고, 데이터베이스에서 테이블을 조작할 수 있다.

    • Foreign Key, Primary Key에 대해 이해할 수 있다.

SQL 소개

데이터베이스의 필요성

앞서 데이터를 저장하는 방법으로 파일에 저장하거나 메모리에 임시저장 하면됨.

근데 왜 데이터베이스를 이용함? 그냥 엑셀이나 CSV로 보관하면 되지?

1. In-memory

JS에서 변수를 만들어 저장 하면 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라짐

이 뜻은 변수등에 저장된 데이터는 프로그램의 실행 여부에 의존하는 거임.

컴퓨터 갑자기 꺼지면 변수걍 ㅂㅂㅇ임.

File I / O

파일을 읽은 방식으로 작동하는 형태를 말함. 엑셀 시트나 CSV같은 파일에 넣으면 되지.

근데 왜??

  • 데이터가 필요할 때마다 전체! 파일을 읽어야 함.

  • 데이터량이 많아지면 파일이 일부 손상되거나 여러 개의 파일들을 동시에 다뤄야 함!

반면에 관계형 데이터베이스에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장할 수 있음. 한 번에 여러 개의 테이블을 가질 수 있기 때문에 SQL을 활용해 데이터를 불러외 수월함!

또한, 엑셀 시트와 CSV 파일 등처럼 특정 형태의 파일은 대용량의 데이터를 저장하기 위한 목적이 아님!

SQL 소개

하나의 언어인 Structured Query Language

데이터베이스 언어로, 주로 관계형 데이터베이스에서 사용함.(키값형 객체형등 많음)

MySQL, Oracle, SQLite, PostgreSQL 등 다양한 데이터베이스에서 SQL 구문 사용가능!

SQL이란 데이터베이스 용 프로그래밍 언어!

데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입할 수 있음

그리고 SQL은 데이터가 구조화된(Structured) 테이블을 사용하는 데이터베이스에서 활용할 수 있음!

SQL과 반대로 데이터의 구조가 고정되어 있지 않은 데이터베이스를 NoSQL이라고 함!

관계형 데이터베이스와는 달리, 테이블말고 다른 형태로 데이터 저장!

NoSQL에서 대표적으로 MongoDB와 같은 문서 지향 데이터베이스

중요한것은 SQL을 사용하기 위해데이터의 구조가 고정되어 있어야 함!

SQL은 구조화된 쿼리 언어입니다. 쿼리란? 질의문임!

SQL Basics


기본 쿼리문 알아보기

다음은 SQL을 사용에 필요한 기본 문법입니다. 이게 뭔데? 나도 모름 알기도 빡셈 그래서

내 기준으로 CRUD(생성, 읽기, 갱신, 삭제)로 나눔.

Create 관련

  • Insert Into

INSERT INTO [테이블 명] ( 컬럼명1, 컬럼명2, ...)
VALUES (레코드1, 레코드2, ...);

테이블에 새 레코드를 삽입하는 데 사용됨. 아니 그러면 테이블 자체를 새로 만들때는??
CREATE DATABASE!!!

  • Null Values

WHERE [컬럼명] IS NULL // 빈 결과만 조회
WHERE [컬럼명] IS NOT NULL // 채워져 있는 결과만 조회!

Read 관련

  • Select
  1. SELECT * FROM [테이블] : *를 사용하여 전체 열을 확인 할 수 있음.

  2. SELECT .. INTO

SELECT [열] INTO [새 테이블]
FROM [기존 테이블]
WHERE [조건]

INTO 가 포함되면
조건에 맞는 기존 테이블의 열 내용을 새 테이블로 가져와 테이블을 만듦.

  1. SELECT DISTINCT [컬럼명] FROM [테이블명] : 일반적인 select 문제는 중복 여부에 상관없이 모든 자료를 요청하지만 DISTINCT를 쓰면 지정된 컬럼명이 중복되지 않고 고유한 자료, 레코드만 찾을수 있음!

출처: https://121202.tistory.com/26 [안방철의 방구석]

  • Where
  1. WHERE [컬럼명] = [레코드 값]

SELECT * FROM Customers
WHERE City = "Berlin"

테이블명 (Customers) 뒤에 WHERE 문을 붙이면 뒤에 조건에 맞게 검색함!

  1. Where절에 사용할수 있는 연산자들

    2.1 AND 연산자

    SELECT user_id , user_mobile , user_gender , user_amount , user_addr FROM User_Table

    WHERE user_gender = 'male' AND user_amount >= 5500 ;

    해설 : User Table에서 성별(user gender)이 남자 이고 보유금액(user amount)가 5500 이상인 사람의 정보를 불러옴!

    2.2 OR 연산자

    생략

    3.3 IN 연산자

    SELECT user_num , user_id , user_mobile , user_gender , user_amount , user_addr

    FROM User_Table

    WHERE user_id IN ('user1','user3')

    ORDER BY user_num DESC;

    해설 : User Table에서 사용자의 아이디(user id)가 'user1'인 사람과 'user3' 인 사람의 정보를 user_num을 통해(ORDER BY) 역순(DESC)으로 정렬하여 불러옴

    IN 조건의 범위를 지정하는 데 사용. 값은 콤마(,)로 구분하여 괄호 내에 묶으며,

    이 값 중에서 하나 이상과 일치하면 조건에 맞는 것으로 평가

    OR과 동일하지만

    ~ IN은 평가 순서를 보다 쉽게 관리 할 수 있고

    ~ OR 연산자보다 실행 속도가 빠르며

    ~ IN 연산자에 다른 SELECT 문을 넣을 수 있다!

    3.4 NOT 연산자

    SELECT user_num , user_id , user_mobile , user_gender , user_amount , user_addr

    FROM User_Table

    WHERE NOT user_id IN ('user1','user3')

    ORDER BY user_num DESC;

    풀이 : ~~ 에서 user_id가 'user1'인 사람과 'user3'인 사람의 정보를 제외한 모든 정보를 ~~

  • Order By

SELECT 문을 사용할 때 출력되는 결과물은 테이블에 입력된 순서대로 출력됨.

근데 우리는 가끔씩 정렬하고 싶을떄가 있음!

이때 사용하는 것이 ORDER BY 절!!!

ORDER BY 절은 항상 SELECT 문의 맨 마지막에 위치함!

  1. SELECT * FROM [테이블명]
    ORDER BY [컬럼명1, 컬럼명2, ...] (ASC, DESC) (어샌딩이 기본)

컬럼명을 여러개 콤마(,)로 여러개 지정하면 레벨의 순서를 지정할 수 있음! 앞에가 기본!!

  • Like

SELECT [컬럼명] FROM [테이블명] WHERE [컬럼명] LIKE [조건]

%는 ~랑 같음..

예를들어 신라면, 진라면, 삼양라면 => ~ 라면 => % 라면

잠재의식의 힘, 비잠재의식의 소망, 기본의식의 꿈 => ~의식 ~ => %의식%

  • Wildcards
  1. ?
    ?의 글자 수만큼 찾는 단어를 몰라도 됨 . ex) '??a%' 3번째 글자가 a인 모든 레코드를 찾아라!
  2. []
    ex) 첫번째 글자가 a 혹은 c혹은 s인 레코드를 찾아라 => [ACS]
    ex) [A-F] : A부터 F까지
    ex) [^ACF] : A나 C나 F가 첫 글자가 아닌것!

Update 관련

  • Update

UPDATE [테이블명] SET [열] = "변경할 값" WHERE [조건]

조건이 없을 경우 테이블이 있는 열 전체를 변경할 값으로 UPDATE 됨.

  • Aliases

SELECT *
FROM 테이블1 AS [별칭1]

테이블1에 별칭1 이라고 짓기!

Delete 관련

  • Delete
    참고로 DELETE는 테이블의 내용을 삭제하고 DROP은 테이블자체를 삭제함!

DELETE FROM [테이블명] WHERE [조건]

테이블안에서 조건을 만족하는 레코드 삭제!

Join 관련

  • Inner Join
    교집합임.

    SELECT [컬럼명들]
    FROM [테이블 A] LEFT JOIN [테이블 B] ON [A.~~] = [B.~~]

Left Join

  • A기준 차집합임.

Right Join

  • B기준 차집합임.

데이터베이스 관련 용어

  • SQL Create DB

    CREATE DATABASE [테이블명] // DB 만듦

  • SQL Drop DB

    DROP DATABASE [테이블명] // DB 없앰

  • SQL Create Table

    CREATE TABLE [테이블명]

  • SQL Drop Table

    DROP TABLE [테이블명]
    SQL Alter Table
    SQL Not Null
    SQL Unique
    SQL Primary Key
    SQL Foreign Key
    SQL Default
    SQL Auto Increment
    SQL Dates

데이터베이스 관련 명령어

데이터베이스 생성

CREATE DATABASE 데이터베이스_이름;

데이터베이스 사용

데이터베이스를 이용해 테이블을 만들거나 수정하거나 삭제하는 등의 작업을 하려면,
먼저 데이터베이스를 사용하겠다는 명령을 전달해야 합니다. 빡세네..

USE 데이터베이스_이름;

테이블 생성

USE를 사용해 데이터베이스를 선택했다면, 이제 테이블을 만들 수 있음

Example) user라는 이름의 테이블 만들기

과 같은 필드 조건이 있을때

와 같이 user 테이블을 생성함.

SQL 콘솔에서 엔터키를 이용해 여러 줄의 코드를 입력할 수 있음!

위와 같이 입력하고, 다음에서 설명할 DESCRIBE명령어를 이용해 테이블 정보를 확인!

테이블 정보 확인

다름의 명령어를 통해 테이블 정보 확인 가능!

DESCRIBE user;

그러면

SQL 명령어 간략하게 살펴보기

SELECT

SELECT는 데이터셋에 포함될 특성을 특정함!

FROM

테이블과 관련한 작업을 할 경우 반드시 입력해야 함. FROM 뒤에는 결과를 도출해낼 데이터베이스 테이블을 명시!

WHERE

필터 역할을 하는 쿼리문 WHERE은 선택적으로 사용가능!

ORDER BY

돌려받는 데이터 결과를 어떤 기준으로 정렬하여 출력할지 결정합니다. ORDER BY는 선택적으로 사용할 수 있습니다.

LIMIT

결과로 출력할 데이터의 개수를 정할 수 있습니다. LIMIT은 선택적으로 사용할 수 있습니다. 그리고 쿼리문에서 사용할 때에는 가장 마지막에 추가합니다.

DISTINCT

유니크한 값을 받고 싶을 때에는 SELECT DISTINCT 를 사용할 수 있습니다.

INNER JOIN

OUTER JOIN

여러 쿼리문을 한 번에 써보기

ACID

ACID가 뭔데?

데이터베이스 트랜젝션이 발생할 때, 그 안정성을 보장할 수 있는 성질

Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)

  • 원자성 : 트랜젝션과 관련된 작업들이 부분적으로 싱행되다가 중단되지 않는 것을 보장하는 능력
    예를 들어 계좌이체는 성공할수도 있고 실패할수도있지만 내 계좌에서 돈만 빠져나는데 성공하고
    상대방의 계좌에 돈이 추가되는데에는 실패하면 안됨

  • 일관성 : 트랜젝션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것

  • 독립성 : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
    은행 관리자가 작업을 실행하지만 그 중간에 가로챌수는 없지

  • 지속성 : 성공적인 트랜잭션 수행은 영원히 반영되어야 함

아니 그래서 트랜젝션은 뭔데?

데이터베이스의 상태를 변환시키는 논리적 기능을 수행하기 위해 행해지는 하나 이상의
쿼리를 모아 놓은 하나의 작업 단위

SQL vs NoSQL

profile
괴발개발자에서 개발자로 향해보자

0개의 댓글