Tech

Diary

Lecture

About Me

개발중

SQL 데이터 추가, 수정, 삭제

JeongSeulho

2025년 01월 04일

준비중...
클립보드로 복사

데이터 추가

  • 다음과 같은 테이블의 tuple을 추가하는 방법
copy
CREATE TABLE employee (
    id INT PRIMARY KEY,
    name VARCHAR(20) NOT NULL,
    birth_date DATE,
    sex CHAR(1) CHECK (sex IN ('M', 'F')),
    position VARCHAR(10),
    salary INT DEFAULT 50000000,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES department(id) ON DELETE SET NULL ON UPDATE CASCADE,
    CHECK (salary >= 50000000)
);

기존 attribute 값 생략

copy
INSERT INTO employee
VALUES (1, 'John Doe', '1990-01-01', 'M', 'Engineer', 60000000, NULL);
  • dept_id의 왜래키는 아직 부서 테이블에 데이터가 없으므로 NULL로 임시 추가(항상 빈곳 없이 모든 컬럼에 대하여 값 명시)
  • 컬럼 순서는 테이블 정의 순서와 동일하게 명시

기존 attribute 값 명시

copy
INSERT INTO employee (name, birth_date, sex, position, id)
VALUES ('John Doe', '1990-01-01', 'M', 'Engineer', 1);
  • 컬럼 순서를 직접 명시하여 데이터 추가
  • dept_id는 명시하지 않았으므로 NULL로 추가
  • salary는 명시하지 않았으므로 기본값 50000000으로 추가

복수의 튜플 동시에 추가

copy
INSERT INTO employee
VALUES (1, 'John Doe', '1990-01-01', 'M', 'Engineer', 60000000, NULL),
        (2, 'Jane Smith', '1991-02-15', 'F', 'Manager', 70000000, NULL);
  • 복수의 튜플 동시에 추가

데이터 수정

단순 tuple 수정

copy
UPDATE employee
SET dept_id = 1003 -- 수정할 attribute와 수정할 값 명시
WHERE id = 1; -- 수정할 tuple을 선택하기 위한 조건

WHERE 조건에 다른 테이블도 연관되어 있는 경우

copy
CREATE TABLE WORKS_ON (
    employee_id INT,
    project_id INT,
    FOREIGN KEY (employee_id) REFERENCES employee(id) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY (project_id) REFERENCES project(id) ON DELETE CASCADE ON UPDATE CASCADE,
    PRIMARY KEY (employee_id, project_id)
);
  • WORKS_ON과 같은 중계 테이블 존재하고 프로젝트 2003에 참여한 직원의 연봉을 2배로 수정
copy
UPDATE employee, works_on
SET employee.salary = employee.salary * 2
WHERE employee.id = works_on.employee_id AND works_on.project_id = 2003;

데이터 삭제

  • John Doe은 프로젝트 2001을 비롯해 여러 프로젝트에 참여 중, 2001에만 집중하기 위해 나머지 프로젝트 하차
copy
DELETE FROM works_on
WHERE employee_id = 1 AND project_id != 2001;