DataBase Syntax

DataBase

Database

기본적인 DataBase의 문법과 간단한 SQL에대한 예제들을 소개합니다.

  • RDBMS란?
  • DDL, DML
  • Aggregate, Group Function
  • SQL
  • ERD
  • Table 생성

RDBMS란? (Relational Database Management System)

  • F.커드가 도입한 관계형 모델을 기반으로 데이터베이스를 관리하는 방식이다.
  • RDBMS의 종류로는 Oracle, Mysql 등이 널리 사용되고있다.
  • Relational을 표현하기 위하여 ERD(Entity-Relationship Diagram)으로 테이블을 표현한다.

NoSQL

NoSQL이란? MongoDB, Redis 등등 이 존재한다.

NoSQL 장점

  • 데이터 분산형 구조를 만드는 것에 용이, 복제 및 대응에 용이, 빠른 데이터 처리, 대용량 데이터 저장

NoSQL 단점

  • 보안의 취약하다, join을 통한 값을 찾기가 힘들다 (복잡한 Query가 어렵다.)

NoSQL의 등장이유

  • 트래픽을 줄이고 분산하여 보다 쉽고 간단하게 저장하는 것이 더 필요하다고 판단하여 새로운 데이터베이스를 필요로하게 되어서 등장하였다.

DDL & DML

DDL (Data Definition Language)

  • Create, Drop, Truncate, Alter, Data Type, Constraint
  • Table 자체를 구성하는대 사용한다.

DML (Data Manipulation Language)

  • Insert, Delete, Update Table 내부의 data를 바꿀때 사용한다.

DDL

Create 테이블 생성

1
2
3
4
CREATE TABLE MEMBER(
id INTEGER(5) PRIMARY KEY,
name VARCHAR(50)
);
  • DataType (Oracle)
    Data Type Description
    VARCHAR2(size) 가변길이 문자열 (최대 4000byte)
    CHAR(size) 고정길이 문자열 (최대 2000byte)
    NUMBER(p,s) 가변길이 숫자. 전체 p 자리 중 소수점 이하 s자리 (p:38, s:-84~127)
    DATE 고정길이 날짜+시간, 7Byte

    Alter 테이블 수정

    • 테이블 컬럼(col) 추가
      1
      ALTER TABLE Student ADD (name VARCHAR(50));
    • 테이블 컬럼(col) 수정
      1
      ALTER TABLE Student MODIFY (name VARCHAR(50));
    • 테이블 컬럼(col) 삭제
      1
      ALTER TABLE Student DROP name;

    Drop 테이블 삭제

    • 테이블 삭제
      1
      DROP TABLE Student

    Truncate 테이블의 모든 데이터 삭제(테이블은 존재)

    • 테이블 내부 데이터 삭제
      1
      TRUNCATE TABLE Student

    Rename 이름 변경

    • 테이블 Rename
      1
      RENAME Student TO employee;

    Comment 테이블에 설명 추가

    Constraint 테이블에 제약조건 생성

    Table의 특정규약을 설정한다 즉 제약조건이다.

    • NOT NULL
    • UNIQUE
    • PRIMARY KEY => PRIMARY KEY는 NOT NULL + UNIQUE하다.
    • FOREIGN KEY => 주의 PRIMARY KEY에게만 FOREIGN KEY 가능
    • CHECK

    PRIMARY KEY

    PK는 한테이블당 한개만 존재

    인덱스 자동생성

    여러 컬럼을 하나의 PK로 설정 가능

    1
    2
    3
    4
    5
    CREATE TABLE member (
    id1 NUMBER(5),
    id2 NUMBER(5),
    PRIMARY KEY(id1, id2)
    );

    여러 컬럼이 PK일떄 FK를 걸어야 할 경우 PK에 해당하는 모든 컬럼을 선택해야한다.

    FOREIGN KEY

    ON DELETE SET NULL : 해당하는 FK를 NULL로 바꾼다.

    ON DELETE CASCADE : 해당하는 FK를 가진 참조행도 삭제

    • table을 생성할떄부터 Constraint를 넣는 방법

      1
      2
      3
      4
      5
      6
      7
      CREATE TABLE member (
      id NUMBER(5) PRIMARY KEY,
      job_id NUMBER(5),
      CONSTRAINT c_member_fk FOREIGN KEY (job_id)
      REFERENCES job(id)
      ON DELETE SET NULL
      );
    • table에 Constraint를 추가해서 넣는 방법

      1
      2
      3
      4
      ALTER TABLE MEMBER
      ADD CONSTRAINT c_member_fk
      FOREIGN KEY (job_id) REFERENCES job(id);

    • Constraint를 삭제하는 방법

    1
    ALTER TABLE MEMBER DROP CONSTRAINT c_member_fk;

    DML

    Insert 테이블 Data 추가

    1
    INSERT INTO 테이블이름 (col1, col2) VALUES(“val1”, “val2”); 

    Update 테이블 Data 수정

    1
    UPDATE 테이블이름 SET name="Kim" Where id = 1;  

    Delete 테이블 Data 삭제

    1
    DELETE FROM 테이블이름 Where id = 1;

    Aggregate Function

    AVG

    AVG (평균 구하기)

    1
    SELECT AVG(salary) FROM Student;
    • Group By
    1
    2
    SELECT 부서명, AVG(salary) FROM 직장; => 오류 발생
    SELECT 부서명, AVG(salary) FROM 직장 GROUP BY 부서명;
    • Having => Group By를 한 결과에 대해서 조건을 걸어주는 역할을 한다.

    COUNT

    • 해당 col의 수를 센다.
      1
      2
      3
      SELECT COUNT(column_name)
      FROM table_name
      WHERE condition;

    MAX

    • 해당 col의 최대값을 보여준다.
      1
      2
      3
      4
      SELECT MAX(column_name)
      FROM table_name
      WHERE condition;

    MIN

    • 해당 col의 최소값을 보여준다.
      1
      2
      3
      SELECT MIN(column_name)
      FROM table_name
      WHERE condition;

    SUM

    • 해당 col의 합을 보여준다.
      1
      2
      SELECT SUM(col_name) FROM table_name;
      SELECT SUM(salary) FROM Student;

    SQL (structured Query Language)

    구조화된 질의 언어

    기본적인 문법 구조

    • SELECT : Table의 원하는 col을 선택한다.
    • FROM : 특정 Table로 부터
    • WHERE : 특정 조건

    SQL 기본 Example

    Student 테이블을 전부다 가져오고싶다.

    1
    SELECT*FROM Student; => *는 전부를 나타낸다.

    Student 테이블중에서 name(col)을 가져오고싶다.

    1
    SELECT name FROM Student;

    Student 테이블중에서 name(col)이 kimsejune을 가져오고싶다.

    1
    SELECT name FROM Student WHERE name=“kimsejune”;

    JOIN

    2개 이상의 테이블을 합쳐서 하나의 테이블로 만든다.

    Cross Join : (Cartasian Product) 모든 가능한 쌍이 나타난다.

    Inner Join : 조건을 만족하는 tuple만 나타난다.

    1
    2
    SELECT name, jobname FROM Student Inner Join Job
    ON Student.id = Job.student_id;

    Outer Join : 조건을 만족하지 않는 tuple도 나타난다. => null로 표기

    • Left Outer Join => join table의 왼쪽 table 값중 null인 것도 가져온다.
      1
      2
      SELECT name, jobname FROM Student Left Outer Join Job
      ON Student.id = Job.student_id;
    • Right Outer Join => join table의 오른쪽 table 값중 null인 것도 가져온다.
      1
      2
      SELECT name, jobname FROM Student Right Outer Join Job
      ON Student.id = Job.student_id;
    • Full Outer Join => 양쪽 table 값중 null인 것도 가져온다.
      1
      2
      SELECT name, jobname FROM Student Full Outer Join Job
      ON Student.id = Job.student_id;
      Natural Join : 조건을 만족하는 tuple들의 동일한 col이 합쳐져서 나타난다.

    Self Join : 자기 자신과 Join

    • 상사를 찾을 때 많이 이용된다.

    ERD

    Entity-Relationship Diagram

    테이블의 관계

    • 1:1
      • 한 사람은 한개의 학번을 가진다.
    • 1:M
      • 교수님은 여러명의 제자를 가지지만 제자는 한명의 담당교수만이 존재한다.
    • N:M
      • 한 사람은 여러개의 취미를 가질 수 있고 하나의 취미도 여러명의 사람이 가지고 있다.

    DADA-ERD

    Table 생성

    방법 1. 직접 SQL (Create) 를 사용하여서 만들기

    방법 2. ERD를 그린후 적용하기

    방법 3. Library 이용하기

    • sequelize, knex … etc
Share