티끌모아 태산

⭐️SQL을 통한 데이터 추가, 수정, 삭제 본문

CS 지식/데이터베이스

⭐️SQL을 통한 데이터 추가, 수정, 삭제

goldpig 2023. 9. 8. 12:09
728x90

  이번 시간에도 '쉬운 코드' 님의 강의를 듣고 정리한 내용입니다. 저번시간에 IT회사 RDB 만들기 예시로 SQL을 활용하여 부서, 사원, 프로젝트 관련 정보들을 저장할 수 있는 테이블을 만들고 각각의 스키마를 정의하였습니다. 

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

이렇게 테이블을 수정해 주는 이유는 department 테이블을 만들 당시에 employee 테이블이 없었기 때문입니다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

4개의 테이블을 만들었으니 이제 이 테이블에 데이터를 추가해 보도록 하겠습니다. 우선 EMPLOYEE의 데이블 구조를 살펴보면 다음과 같습니다. ❗️저번시간에도 배웠지만 테이블을 만들 때 constraints를 주의해야합니다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  • 데이터 추가하기: attributes 순서대로 데이터 추가하기
INSERT INTO table_name VALUES();

employee 테이블에 데이터를 추가하기. 출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  위 사진에서 마지막 속성값인 dept_id 를 null로 준 이유는 현재 DEPARTMENT에 값이 없기 때문입니다. 그러므로 DEPARTMENT 테이블에 데이터를 추가하고 나서 다시 업데이트 해주는 방식으로 진행하면 됩니다. 저렇게 데이터를 추가하면 성공적으로 쿼리가 동작을 했다는 실행문을 볼 수 있다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  • 에러가 발생하는 경우: 중복, constraints 위반

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  위 사진은 default 값을 위반했기 때문에 발생하는 에러이다. 하지만 employee_chk_2 라는 메시지만 보고서는 정확인 어떤 부분에서 에러가 발생했는지 파악할 수 없기 때문에 다음과 같은 명령어를 통해 좀 더 구체적으로 에러를 확인할 수 있다.

show create table employee;

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  사진을 보면 알 수 있듯이 salary 부분에서 에러가 발생했음을 확인할 수 있다. 따라서 "SHOW CREATE TABLE 테이블 이름;" 을 통해 구체적으로 어떤 에러인지 확인할 수 있다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  이제는 쿼리가 성공적으로 실행됐음을 확인할 수 있다. 다음으로는 데이터를 추가할 때 필드 값들을 함께 작성하면 내가 원하는 데이터만을 추가 할 수 있고, 만약 기본값이 존재한다면 내가 넣지 않은 필드의 값이 기본값으로 추가가 됩니다. 그리고 이렇게 필드와 함께 작성하면 데이터를 추가할 때 순서를 기존과 다르게 해서 넣을 수 있습니다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  • 데이터 조회하기: 데이터를 테이블에 추가를 했으면, 제대로 데이터가 들어갔는지 확인하기 위해 다음과 같은 명령어를 실행해볼 수 있다.
SELECT * FROM employee;

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

*이처럼 JENNY의 셀러리는 기본값이(JENNY는 id, name, birth_data, sex, position에 대해서만 데이터를 추가했기 때문) 그리고 dept_id는 아직 데이터가 없기 때문에 NULL값이 들어갔음을 확인할 수 있다.

 

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

하나 또는 두 개 이상의 데이터를 넣기 위해서는 위와 같은 명령어 문법을 따르면 됩니다. 다음과 같이 INSERT INTO table_name VALUES (), (), (), ...(); 을 활용해서 데이터를 삽입한 것을 확인할 수 있다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

그리고 employee부분을 제외한 나머지 부분도 위와 가은 방식으로 데이터를 추가하면 됩니다.

  • 데이터 수정하기

UPDATE statement

employee id가 1인 Messi는 개발팀 소속이다. 개발팀 ID는 1003이다. 아까는 부서 테이블이 없어서 employee의 dept_id가 모두 NULL 이었는데, 이제 업데이트를 해주자. -> 한 명의 데이터 값을 업데이트 해주기.

UPDATE employee SET dept_id = 1003 WHERE id = 1

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

SELECT * FROM employee WHERE id=1;

위와 같이 명령어를 통해 해당 데이터가 올바르게 업데이트가 됐지는지 확인하기 위해 사용할 수 있다. 그 후에는 이제 모든 임직원에 대한 부서 값을 업데이트 해주면 됩니다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드
출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

또 다른 예시로 개발팀 연봉을 두 배로 인상하고 싶다. 개발팀 ID는 1003이다. ❗️WHERE는 조건절.

UPDATE employee SET salary = salary * 2 WHERE dept_id = 1003;

다른 예시로, 프로젝트 ID 2003에 참여한 임직원의 연봉을 두 배로 인상하고 싶다. 이 때는 두 개의 테이블을 참조해야한다. 즉 두개의 테이블을 연결 시켜줘야한다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

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;

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

이제 마지막으로 회사의 모든 구성원의 연봉을 두배로 올려주는 코드를 만들어보자! 이때 차이점은 WHERE 절이 없다는 것이다.

UPDATE employee SET salary = salary * 2

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

  • 데이터 삭제하기: DELETE statement

예를들어, John이 퇴사를 하게 되면서 employee 테이블에서 john 정보를 삭제해야한다. john의 employee id는 8이다. 현재 john은 project 2001에 참여하고 있었다. 이때, 존과 관련된 테이블은 두 개에 테이블에 나누어서 저장되어있다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

DELETE FROM employee WHERE id = 8;

❗️이렇게 작성하면 employee에서 존의 정보를 삭제가 된다. 이때 works_on에 대한 정보도 함께 지워줘야할까?! 정답은 NO, 왜냐하면 WORKS_ON의 테이블을 작성할 때 foreign 키를 작성해뒀기 때문이다. 즉, 참조값이 변경/삭제 되면 그대로 반영되도록 설정해 뒀다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

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

DELETE FROM works_on WHERE empl_id = 2

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

또 다른 예시로 현재 Dingyo가 두 개의 프로젝트에 참여하고 있었는데 프로젝트 2001에 선택과 집중을 하기로 하고 프로젝트 2002에서는 빠지기로 했다. Dingyod의 ID는 5다

DELETE FROM works_on WHERE empl_id = 5 and proj_id = 2002;

❗️그런데 만약 딩요가 참여하고 있던 프로젝트의 수가 2개가 아니라 여러개 참여하고 있었다면 2001을 제외환 모든 프로젝트에서 삭제를 해주어하기 때문에 다음과 같이 작성해주어야한다.

DELETE FROM works_on WHERE empl_id = 5 and proj_id != 2001

 

마지막으로 회사에 큰 문제가 생겨서 진행중인 모든 프로젝트들이 중단 됐다 -> 모든 프로젝트 삭제! WHERE 절이 없다!

DELETE FROM project;

사실 현업에서는 DELETE FROM 테이블_이름; 이렇게 작성하는 것이 굉장히 조심스러운 일이다. 자칫 잘못하면 정말 큰일이 나오기 때문에 WHERE절을 까먹지 않을것을 반드시 기억하길 바란다.

출처:https://www.youtube.com/watch?v=mgnd5JWeCK4&list=RDCMUCReNwSTQ1RqDZDnG9Qz_gyg&index=6, 쉬운코드

728x90

'CS 지식 > 데이터베이스' 카테고리의 다른 글

SQL 데이터 조회  (0) 2023.09.10
SQL의 기본 개념과 문법  (0) 2023.09.07
관계형 데이터베이스(relational database)  (0) 2023.09.06