본문 바로가기

DB/DB 강의

DB 4강

테이블만 정의해놓은 상태, 현재는 각 테이블에 아무런 데이터 없음 

 

데이터 추가

  • EMPLOYEE table에 데이터 추가
    • INSERT INTO table_name VALUES (실제로 넣으려는 값)
    • (실제로 넣으려는 값): 순서 중요, 처음 EMPLOYEE table 정의할 때의 attribute 순서대로 값을 넣어줘야 함

dept_id가 왜 null?      현재 DEPARTMENT table에는 아무런 값 없기에, 즉 dept_id가 참조할 수 있는 값 아무것도 없기에 임시로 null 값을 넣어준 것

 

primary key 중복으로 인한 ERROR 발생

 

1. Check constraint 위반하여 ERROR 발생    2. 'employee_chk_2'가 의미하는 바가 무엇인지 알고싶으면, MySQL에서는 SHOW CREATE TABLE table_name

 

foreign key constraint는 참조하는 값이 실제로 그 테이블에 있을때만 값을 지정해줄 수 있음

 

성공적으로 Query문 실행됨


  • INSERT INTO table_name (attribute 이름 나열)
  • (attribute 이름 나열) 해놓으면 값을 넣는 순서에 자유가 생김, 또한 실제로 내가 넣고싶은 attribute만 넣을 수 있음

원래 employee table 만들 때의 attribute 순서와 다름, salary attribute와 dept_id attribute 빠져있음


  • 데이터가 제대로 추가되었는지 확인하고 싶을 때, SELECT * FROM (테이블 이름);

JENNY 데이터를 넣을 때, salary와 dept_id 값 지정X  /  dept_id는 값을 지정해주지 않았기에 NULL 맞음 /  salary는 왜 50000000 ? 처음 EMPLOYEE table 만들 때 salary에 대해서 DEFAULT 50000000으로 지정해줬기에


<정리> 테이블에 데이터를 추가하는 INSERT statement

 

   1. INSERT INTO table_name VALUES (comma-separated all values);

  • 테이블에 하나의 데이터만 넣는 경우
  • 데이터를 하나만 추가하는 경우
  • 처음 CREATE 할 때의 attribute 순서대로 모든 attribute에 대응하는 값을 넣어주는 Query

   2. INSERT INTO table_name (attributes list) VALUES (attributes list 순서와 동일하게 comma-separated values);

  • 테이블에 하나의 데이터만 넣는 경우
  • 내가 원하는 일부 attribute에 대해서만, 또는 내가 원하는 순서대로 넣고싶은 경우
  • (attributes list): 내가 넣으려는 attribute 이름들만 나열, 또는 내가 원하는 순서대로 나열
  • (attributes list 순서와 동일하게 comma-separated values): (attributes list)에 나열된 attribute에 대해서만 나열된 순서대로 값 넣어주면 됨

   3. INSERT INTO table_name VALUES (.., ..), (.., ..), (.., ..);

  • 한번에 한 테이블에 여러 개의 데이터를 넣는 경우
  • 넣으려는 여러 tuple들을 괄호와 콤마를 통해 구분

INSERT INTO table_name VALUES (.., ..), (.., ..), (.., ..);


 

department table에 대한 데이터 추가

 

project table에 대한 데이터 추가

 

works_on table에 대한 데이터 추가


데이터 수정

  • employee table에 데이터 추가할 당시, department table에 아무런 값이 없었기에 dept_id의 값 모두 NULL로 처리됨
  • 이제는 department table에 데이터 있기에, dept_id 업데이트 해줘야 함

employee table에서 데이터를 조회하는 query,&nbsp; SELECT * from employee;

 

 

UPDATE statement

  • employee ID가 1인 Messi는 개발(development)팀 소속임
  • 개발팀 ID는 1003임
  • Messi의 소속팀 정보를 업데이트 해주자

중요: Messi에 한정해서 업데이트를 해주는 것이기에 조건 명시! ( WHERE 키워드)

 

성공적으로 바뀌었는지 확인

 

employee table에 있는 모든 임직원의 dept_id 업데이트


  • 개발팀 연봉을 두 배로 인상하고 싶음
  • 개발팀 ID는 1003 

EMPLOYEE table

 

SQL문 작성


  • 프로젝트 ID 2003에 참여한 임직원의 연봉을 두 배로 인상하고 싶음

EMPLOYEE, WORKS_ON table이 연관되어 있음

 

id = empl_id // 두 개의 table을 연결시키는 연결고리 역할을 함

 

table_name.attribute


  • 회사의 모든 구성원의 연봉을 두 배로 올리자 

where절 없다는 것이 가장 큰 차이


<정리> UPDATE statement

 

UPDATE table_name(s)

SET attribute = value [, attribute = value, ..]

[WHERE condition(s)];

  • 하나 이상의 table 이름 적어주어야 하는 경우도 있음
  • where절 O: 업데이트 하는 tuple들이 만족해야 하는 조건 작성
  • where절 X: table에 있는 모든 tuple들이 업데이트

데이터 삭제

DELETE statement

  • John이 퇴사를 하게 되면서 employee 테이블에서 John 정보를 삭제해야 함
  • John의 employee ID는 8
  • 현재 John은 project 2001에 참여하고 있었음

EMPLOYEE, WORKS_ON table이 연관되어 있음

 

WORKS_ON table의 정보는 삭제할 필요 없음. 왜?&nbsp; WORKS_ON table 처음 만들 때 empl_id와 proj_id를 각각 foreign key로 지정했기에

 

위와 같이 설정했기에 EMPLOYEE data 삭제되면서 WORKS_ON data도 삭제됨

 


  • Jane이 휴직을 떠나게 되면서 현재 진행 중인 프로젝트에서 중도하차하게 됐다
  • Jane의 ID는 2

 


  • 현재 Dingyo가 두 개의 프로젝트에 참여하고 있었는데 프로젝트 2001에 선택과 집중을 하기로 하고 프로젝트 2002에서는 빠지기로 했음
  • Dingyo의 ID는 5

 

Dingyo가 참여하고 있던 프로젝트가 2개 이상인 경우, 간단하게 나타내는 방법

 


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

where절 없기에 project table에 있는 모든 tuple들 삭제됨


UPDATE, DELETE가 where절 없이도 동작할 수도 있기에 조심해야 함!

where절이 없다면 그 테이블의 모든 데이터를 바꾸거나 삭제하는 것이기에 조심스럽게 사용해야 함

  • 현업에서 개발할 때, 서비스 중인 DB에서 특정 tuple만 삭제하거나 업데이트 해야하는 상황이 생김
  • 실수로 where절 적지 않으면 굉장히 큰일남

<정리> DELETE statement

 

DELETE FROM table_name [WHERE condition(s)];

 


데이터 추가, 수정, 삭제하기

  • INSERT INTO
  • UPDATE
  • DELETE FROM

'DB > DB 강의' 카테고리의 다른 글

DB 6강  (1) 2023.09.19
DB 5강  (2) 2023.09.18
DB 3강  (0) 2023.09.12
DB 2강  (0) 2023.09.12
DB 1강  (1) 2023.09.10