노드숙련강의 4-2

·2022년 12월 20일
0

study

목록 보기
19/81
post-thumbnail

SQL

SQL?

생성, 삽입, 조회 명령문을 SQL(Structured Query Language)이라고 합니다.

데이터를 아무리 많이 모아놓더라도 활용하지 않으면 가치가 없습니다. 조건에 맞는 데이터를 활용할 수 있어야 하고, 끊임없이 변하는 내용을 지속적으로 삽입, 수정, 삭제, 조회가 가능해야합니다.

그런상황에서 데이터를 어떻게 관리해야할 지 고민한 결과 모든 데이터들을 공통적으로 관리할 수 있는 표준 언어인 SQL이 탄생하게 되었습니다.

SQL의 종류들

  • DDL (Data Definition Language)
  • DML (Data Manopulation Language)
  • DCL (Data Control Language)

DDL (Data Definition Language)

DDL은 데이터를 정의할 때 사용하는 언어로 테이블이나 데이터베이스를 생성, 수정, 삭제와 같은 행위를 할 때 사용합니다.

  • CREATE
    • DATABASE, TABLE, VIEW, INDEX 등을 생성할 때 사용합니다.
  • DROP
    • DATABASE, TABLE, VIEW, INDEX 등을 삭제할 때 사용합니다.
  • ALTER
    • TABLE의 속성변경할 때 사용합니다.

DML (Data Manopulation Language)

DML은 데이터베이스에 데이터를 조작할 때 사용하는 언어로 데이터의 저장, 삭제, 수정, 조회와 같은 행위를 합니다.

  • SELECT
    • 일반적으로 TABLE에서 원하는 데이터들을 조회할 때 사용합니다.
    • 🔥 DB를 관리하면서 가장 많이 사용하는 명령어 이기도 합니다!
  • INSERT
    • 테이블에 새로운 데이터들을 삽입할 때 사용합니다.
  • DELETE
    • 테이블에서 특정한 조건에 맞는 데이터들을 삭제할 때 사용합니다.
  • UPDATE
    • 테이블에서 특정한 조건에 맞는 데이터들을 수정할 때 사용합니다.

DCL (Data Control Language)

DCL은 데이터베이스에 대한 권한과 관련된 문법으로 특정 유저가 DB에 접근할 수 있는 권한을 설정할 때 사용합니다.

  • COMMIT
    • 데이터베이스의 작업이 정상적으로 완료되었음을 관리자에게 알려줄 때 사용합니다.
    • 💡 트랜잭션에 대한 개념을 알고 있다면 더욱 확실한 이해가 가능할거에요! 참고 자료
  • ROLLBACK
    • 데이터베이스의 작업이 비정상적으로 완료되었음을 관리자에게 알려줄 때 사용합니다.
    • 💡 트랜잭션에 대한 개념을 알고 있다면 더욱 확실한 이해가 가능할거에요! 참고 자료
  • GRANT
    • 데이터베이스의 특정한 유저에게 사용 권한을 부여할 때 사용합니다.
  • REVOKE
    • 데이터베이스의 특정한 유저에게 사용 권한을 취소할 때 사용합니다.

VSCode MySQL 플러그인으로 SQL 사용하기

데이터베이스는 매우 고도화된 엑셀입니다.

엑셀 파일 하나가 "데이터베이스"라면,
엑셀 시트 하나는 "테이블"이라고 부르고,
엑셀 행 하나는 "데이터"라고 부릅니다.

데이터 베이스 생성

CREATE DATABASE NodeJS;

테이블 생성

CREATE TABLE IF NOT EXISTS courses (
    id bigint(5) NOT NULL AUTO_INCREMENT, 
    title varchar(255) NOT NULL,
    tutor varchar(255) NOT NULL,
    PRIMARY KEY (id)
);

데이터 삽입

INSERT INTO courses (title, tutor) VALUES
    ('Node.js 숙련반', '이용우'), ('웹개발 종합반', '이범규');

데이터 조회

SELECT * FROM courses;

음식 주문앱 DB 설계 예제

예를 들어, 우리가 음식 주문앱 DB를 설계한다고 가정해볼게요! 일단 "고객이 1개의 음식을 주문할 수 있다"라는 요구사항을 받았다고 해봅시다.

  1. 일단 각 주체의 테이블 설계가 필요
  • 고객 (User) 테이블
  • 음식 (Food) 테이블
  1. 연관 관계 고민
  • 고객이 음식 주문 시, 주문 정보는 어느 테이블에 들어가야 할까?
  • 고객 테이블? 음식 테이블??
  • 시도1) "고객 테이블" 에 주문 정보를 넣어보자
    • 문제점: 회원 중복
  • 시도2) "음식 테이블" 에 주문 정보를 넣어보자
    • 문제점: 음식 중복
  1. 주문'을 위한 테이블이 필요 → Order 테이블 추가
  • 회원 1명은 주문 N개를 할 수 있다.
    • 회원 : 주문 = 1 : N 관계
  • 음식 1개는 주문 N개에 포함될 수 있다.
    • 음식 : 주문 = 1 : N 관계
  • 결론적으로
    • 회원 : 음식 = N : N 관계
  1. ERD
    ERD
CREATE TABLE User(
    userId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name varchar(255) NOT NULL UNIQUE
);

CREATE TABLE Food(
    foodId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name varchar(255),
    price int(11)
);

CREATE TABLE Order(
    orderId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userId int(11) NOT NULL, 
    foodId int(11) NOT NULL, 
    createdAt datetime NOT NULL DEFAULT NOW(),
    FOREIGN KEY (foodId) REFERENCES Food(foodId) ON DELETE CASCADE,
    FOREIGN KEY (userId) REFERENCES User(userId) ON DELETE CASCADE
);

연습퀴즈 - SQL

name, age 라는 열을 가진 users 라는 테이블을 만들고,
나의 이름과 나이 데이터를 삽입해보세요.
그 다음에 users 테이블을 조회해보세요.

profile
개발자 꿈나무

0개의 댓글