데이터베이스 SQL

쓰옹·2022년 12월 5일
0

Database

  • DBMS (Database Management System)
    • 데이터베이스 관리 운영 소프트웨어
  • RDBMS (Relational DBMS)
    • 관계형 데이터베이스
    • 테이블형식(최소단위)
      • 열(column), 행(row)
    • 종류
      • H2
        • In-memory DB
          서버가 작동하는 동안만 내용을 저장함. 서버가 멈추면 더이터가 모두 삭제됨
      • MySQL
      • PostgreSQL
      • Oracle Database

SQL (Structured Query Language)

RDBMS에서 사용하는 언어. DB조작, 관리에 사용

  • statements는 대소문자를 구분하지 않음
  • 문자데이터는 대소문자 구분

DDL (Data Definition Language)

데이터 정의어

  • 테이블 관계 구조 생성

CREATE

  • 새로운 데이터베이스, 테이블 생성
CREATE DATABASE 데이터베이스이름;
CREATE TABLE 테이블이름;
(
	필드이름1 필드타입1,
	필드이륾2 필드타입2,
	...
);
  • 제약조건
    • AUTO_INCREMENT 칼럼 값이 중복되지 않게 1씩 자동증가 고유번호 생성
      필드이름 필드타입 AUTO_INCREMENT,
      // id    bigint  AUTO_INCREMENT,   
    • NOT NULL 해당 필드는 NULL값 저장 불가
      필드이름 필드타입 not null,
    • UNIQUE 중복되는 값 차단. 해당 필드는 서로 다른 값을 가져야함
      필드이름 필드타입 UNIQUE,
    • PRIMARY KEY 기본키. 유일하게 존재하는 값의 조합 해당 필드가 NOT NULLUNIQUE의 특징을 모두 가지게 됨
      필드이름 필드타입 PRIMARY KEY,
      • 데이터 중복 방지
        • 데이터의 무결성
      • 빠르게 데이터 검색 가능
        • 인덱스를 가짐
    • **FOREIGN KEY** 외래키. 두 개의 테이블을 연결 다른 테이블에 의존하게 만들어 데이터 무결성 보장
      ...
      필드이름1 필드타입1,
      필드이름2 필드타입2,
      ...
      FOREIGN KEY(필드이름) REFERENCES 테이블이름(필드이름)
      • 중복 데이터 삽입 방지
      • 데이터가 새롭게 추가될 때 외래키에 해당하는 값이 외래키가 참조하는 테이블에 존재하는지 확인
    • **CASCADE** FOREIGN KEY로 연관된 데이터 삭제, 변경
      CREATE TABLE 테이블이름
      (
      필드이름 필드타입,
      ...
      FOREIGN KEY(필드이름)
      REFERENCES 테이블이름(필드이름) ON DELETE CASCADE
                                  // ON UPDATE CASCADE
      );

ALTER

  • 데이터베이스와 테이블의 내용 수정
    ALTER TABLE 테이블이름 ADD 필드이름 필드타입;
    ALTER TABLE 테이블이름 DROP 필드이름;
    ALTER TABLE 테이블이름 MODIFY COLUMN 필드이름 필드타입; // 컬럼 변경

DROP

  • 데이터베이스와 테이블 삭제 (전체)
DROP DATABASE 데이터베이스이름;
DROP TABLE 테이블이름;

TRUNCATE

  • 데이터베이스와 테이블 삭제. (column 값만 남김 == 최초 테이블 만들어졌던 상태)
TRUNCATE DATABASE 데이터베이스이름;
TRUNCATE TABLE 테이블이름;

DCL(Data Control Language)

데이터 사용 권한 관리

  • GRANT

사용자 or ROLE에 대한 권한 부여

GRANT [객체권한명] (컬럼)
ON [객체명]
TO { 유저명 | 롤명 | PUBLC} [WITH GRANT OPTION];

//ex
GRANT SELECT ,INSERT 
ON mp
TO scott WITH GRANT OPTION;
  • REVOKE

사용자 or ROLE에 대한 권한 회수

REVOKE { 권한명 [, 권한명...] ALL}
ON 객체명
FROM {유저명 [, 유저명...] | 롤명(ROLE) | PUBLIC} 
[CASCADE CONSTRAINTS];

//ex
REVOKE SELECT , INSERT
ON emp
FROM scott
[CASCADE CONSTRAINTS];

DML(Data Manipulation Language)

  • INSERT 테이블에 새로운 row 추가
    INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES(데이터값1, 데이터값2, 데이터값3, ...);
    INSERT INTO 테이블이름 VALUES(데이터값1, 데이터값2, 데이터값3, ...);
  • SELECT 테이블의 row 선택
    SELECT 필드이름 FROM 테이블이름 [WHERE 조건];
    
    //=============================================================
    
    SELECT * FROM STUDENT; //테이블 전체 선택
    SELECT * FROM STUDENT WHERE STUDENT_CODE = 's1';   // 테이블 전체에서 조건
    SELECT name, major_code FROM STUDENT WHERE student_code = 's1';
  • UPDATE 테이블의 row 내용 수정
    UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값;
  • DELETE 테이블의 row 삭제
    DELETE FROM 테이블이름 WHERE 필드이름=데이터값;
  • JOIN 나누어진 테이블 하나로 합치기
    • 키워드 ON 사용

    • 적어도 하나의 컬럼을 고유하고 있어야 하기 때문에 외래키가 설정되어 있어야 함

      SELECT s.name, s.major_code, m.major_name FROM STUDENT s JOIN MAJOR m ON s.major_code = m.major_code;
      
      //위에라 같은 결과를 내는 다른 코드
      SELECT s.name, s.major_code, m.major_name FROM STUDENT s, MAJOR m WHERE s.major_code = m.major_code;
profile
기록하자기록해!

0개의 댓글