데이터베이스(쉬운코드)

4. SQL로 데이터 추가/수정/삭제하기

youbing 2024. 11. 27. 15:16
본 내용은 유튜버 쉬운코드의 강의 "데이터베이스"를 참고하여 작성하였습니다.

 

SQL로 데이터 추가하기 (feat. constraints)

INSERT INTO table_name

INSERT INTO employee VALUES (1, 'MESSI', '1987-02-01', 'M', 'DEV_BACK', 10000000, null);
  • 이때 attribute 순서는 create table 할 때 입력한 순서대로+모든 attribute에 해당하는 값들을 넣어야 함.
  • dept_id 값이 현재 null인 이유는 DEPARTMENT 테이블에 값이 없어서 참조할 수 있는 값이 없음.

id 값이 PK라서 중복이 허용되지 않음.
salary가 50,000,000원 이상이어야 해서 허용되지 않음.

 

Department 테이블의 id에 111이라는 값이 없어서 dept_id가 111이라는 값을 가질 수 없음.

 

위와 같이 attribute 값을 나열해두면

  1. create table 할 때 정해둔 순서에 상관없이 넣을 수 있음.
  2. 실제로 내가 넣고 싶은 attribute에 대한 값만 넣을 수 있음.

 

SELECT * FROM table_name; : 테이블에 들어간 데이터 조회

현재까지 employee에 저장되어 있는 데이터

 

INSERT statement

  • INSERT INTO table_name VALUES (comma-separated all values);
  • INSERT INTO table_name (attributes list) VALUES (attributes list 순서와 동일하게 comma-separated values);
  • INSERT INTO table_name VALUES (~, ~), (~, ~), ... ; -> 여러 개의 data를 넣을 때 사용

employee 테이블에 데이터 추가
다른 테이블에도 데이터 넣기


SQL로 데이터 수정하기

현재 employee 테이블

  • employee 테이블을 department 테이블보다 먼저 생성해서 FK인 dept_id가 null 값임. -> 수정 필요

 

바꾸고자 하는 것 1

  • employee ID가 1인 Messi는 개발(development)팀 소속이다.
  • 개발팀 ID : 1003
UPDATE employee SET dept_id  = 1003 WHERE id = 1;
  • 수정이 잘 되었는지 확인하고 싶으면 : SELECT * FROM employee WHERE id = 1;

 

바꾸고자 하는 것 2

  • 개발팀 연봉을 두 배로 인상하고 싶다.
  • 개발팀 ID : 1003
UPDATE employee SET salary = salary * 2 WHERE dept_id = 1003;

 

바꾸고자 하는 것 3

  • 프로젝트 ID 2003에 참여한 임직원의 연봉을 두 배로 인상하고 싶다.
UPDATE employee, works_on SET salary = salary * 2 WHERE id = empl_id and proj_id = 2003;
  • 그런데 각각의 속성이 어디 테이블에서 온 건지 헷갈릴 수 있어서 아래와 같이 쓰기도 함.
UPDATE employee, works_on SET salary = salary * 2 WHERE employee.id = works_on.empl_id and proj_id = 2003;

 

바꾸고자 하는 것 4

  • 회사의 모든 구성원의 연봉을 두 배로 인상하고 싶다.
UPDATE employee SET salary = salary * 2;

 

UPDATE statement

UPDATE table_name(s) SET attribute = value[, attribute = value] [WHERE condition(s)];

SQL로 데이터 삭제하기

바꾸고자 하는 것 1

  • John이 퇴사하게 되면서 employee 테이블에서 John의 정보를 삭제해야 한다.
  • John의 employee ID = 8 / 현재 Jonn은 project 2001에 참여하고 있었다.
DELETE FROM employee WHERE id = 8;

 

Q. works_on 테이블에서는 정보를 안 지워도 되는지?

A. works_on 테이블을 처음 생성할 때 FK 설정을 한대로 실행됨.

on delete CASCADE

 

바꾸고자 하는 것 2

  • Jane이 휴직을 떠나게 되면서 현재 진행 중인 프로젝트에서 중도하차하게 됐다.
  • Jane의 ID = 2
DELETE FROM works_on WHERE impl_id = 2;

 

바꾸고자 하는 것 3

  • 현재 Dingyo가 두 개의 프로젝트에 참여하고 있었는데, 프로젝트 2001은 그대로 하고 2002에서는 빠지기로 했다.
  • Dingyo의 ID = 5
DELETE FROM works_on WHERE impl_id = 5 and proj_id = 2002;

 

만약 Dingyo가 여러 개의 프로젝트에 참여하고 있었는데, 2001만 하기로 했다면,

~~~ WHERE impl_id = 5 and proj_id <> 2001;

~~~ WHERE impl_id = 5 and proj_id != 2001;

 

바꾸고자 하는 것 4

  • 회사에 큰 문제가 생겨서 진행 중인 모든 프로젝트들이 중단됐다.
DELETE FROM project;

 

DELETE statement

DELETE FROM table_name [WHERE condition(s)];