데이터 추가,수정,삭제

Organ·2023년 10월 23일

데이터베이스

목록 보기
4/5

추가

EMPLOYEE 테이블


값을 추가할 때는 VALUES안의 순서가 중요한데, 처음에 테이블을 만들 때 ATTRIBUTE 순서대로 입력해주면 된다.

이 경우에는 1이라는 값이 PRIMARY KET와 중복이기 때문에 오류가 난다. 앞에서 1을 넣어주었기 때문에 그렇다. 문제되는 부분을 바꿔 주면
이번에도 에러가 뜨는데 그 이유는 테이블을 생성할 때 SALARY 가 최소한 50000000이상이어야 한다는 CONSTRAINTS를 걸어놓았는데 그것을 위반해서 그렇다.
SALARY도 수정해주고 다시 추가해주면
FOREIGN KEY CONSTRAINT 위반이라고 나오는데 사실 FOREIGN KEY에 해당하는 DEPT_ID(111)이 NULL이어야 하는데 NULL이 아니라서 그렇다. 현재 EMPLOYEE 테이블에 데이터를 추가할 이 순간에는 DEPARTMENT 테이블에 에는 아무런 값이 없기 때문에 오류가 나는 것. FOREIGN KEY CONSTRAINT는 참조하는 값이 실제로 그 테이블에 있을 때만 그 값을 지정해 줄 수 있다.

모두 수정하여 다시 추가해보면정상적으로 추가됨.
이렇게 EMPLOYEE 이름 뒤에 ATTRIBUTE 이름들을 나열 해 놓았는데, 나열함으로써 생기는 장점은 값을 넣는 순서의 자유도가 생긴다는 것이다. 또 다른 장점으로는 실제로 내가 넣고 싶은 ATTRIBUTE에 대해서만 넣을 수 있다는 것이다.
그동안 넣은 데이터 확인 SELECT * FROM EMPLOYEE;
여기서 주목해 볼 점은 우리가 JENNY의 데이터를 넣을 때는 SALARY 나 DEPT_ID에 대해서는 값을 넣지 않았는데 DEPT_ID에는 값을 지정해주지 않아서 NULL이 들어가 있는데 SALARY에는 왜 5000이 들어가 있을까? 그 이유는 처음에 EMPLOYEE TABLE을 CREATE 할 때 SALARY 에 대해서는 DEFAULT 값으로 5000 을 지정했기 때문이다.

정리


1. 데이터를 하나만 추가하는 경우는 처음 CREATE할 때 ATTRIBUTE 순서대로 모든 ATTRIBUTE에 대응하는 값을 넣어주는 쿼리
2. 내가 원하는 값들만 원하는 순서로 넣는 경우
1과 2는 TABLE에 하나의 데이터만 넣는 것이라면 3번의 경우에는
3. 한 번에 한 테이블에 여러 개의 데이터를 넣을 때 사용하는 것. 아래 참고

DEPARTMENT TABLE

5개의 부서 정보를 추가해 주었다.

PROJECT TABLE

WORKS_ON TABLE

수정

EMPLOYEE TABLE을 보면 TABLE을 만들 당시에는 DEPARTMENT TABLE 생성 전이었기 때문에 DEPT_ID의 값들은 모두 NULL로 처리가 됐었는데, 이제는 DEPARTMENT TABLE에 데이터가 있기 때문에 각 임직원들이 속하는 DEPT_ID들을 업데이트 해주고자 한다.

UPDATE STATEMENT - 1

EMPLOYEE ID가 1인 NESSI는 개발(DEVEOPMENT)팀 소속이고 개발팀 ID는 1003이다. MESSI의 소속팀 정보를 업데이트 해주자.
UPDATE라는 키워드를 작성해준 후 그 뒤에 테이블이름을 적어준다. 그 후 SET이란 키워드를 적어주고 업데이트 해주려는 ATTRIBUTE이름을 적어준 뒤에 업데이트 해줄 값을 적어준다. 우리는 MESSI의 정보를 업데이트 하는 것이기 때문에 조건을 명시해 주어야 하는데 그 조건을 명시하기 위해서 WHERE라는 키워드를 적어주고 메시의 ID가 1이기 때문에 ID = 1을 적어준다.
결과를 조회해주면
업데이트 된 모습을 볼 수 있다.
다른 직원들도 업데이트 한 모습

UPDATE STATEMENT - 2

개발팀 연봉을 두배로 인상하고 싶고 개발팀 ID는 1003이다.

UPDATE STATEMENT - 3

프로젝트 ID 2003에 참여한 임직원의 연봉을 두 배로 인상하고 싶다. 여기서는 어떤 TABLE이 연관되어 있을까? 일단 연봉정보와 관련이 있기 때문에 EMPLOYEE테이블은 있어야 하고 업데이트 해주려고 하는 곳이 ID가 2003인 프로젝트에 참여한 임직원들에 대해서만 연봉을 인상시킬 것이기 때문에 WORKS_ON이란 테이블도 참조해야한다. 두가지의 테이블을 참조하는 방법은 WORKS_ON테이블에서 아이디가 2003인 직원들의 ID만 참조해서 그들의 연봉만 업데이트 해주면 된다. 업데이트 키워드 작성후 연관되어 있는 테이블이 두개이기 때문에 두개 다 적어주고 SET SALARY를 해준 후 조건절이 중요한데 ID 가 EMPL_ID(WORKS_ON에 있음) 와 동일하고 그 직원의 PROJ_ID가 2003인 조건을 만들어 준 것. ATTRIBUTE의 소속을 직관적으로 보고싶다면 TABLE.ATTRIBUTE 형식으로 적어주면 된다.

UPDATE STATEMENT - 4

회사의 모든 구성원의 연봉을 두 배로 올리자
모든 임직원의 연봉을 올리는 것이기 때문에 WHERE로 조건을 걸어줄 필요가 없다.

정리

삭제

DELETE STATEMENT - 1

JOHN이 퇴사를 하게 되면서 EMPLOYEE 테이블에서 JOHN 정보를 삭제해야 한다. JOHN의 EMPLOYEE ID는 8이고 JOHN은 PROJECT 2001에 참여하고 있었다.
JOHN 과 관련된 정보는 두 개의 테이블에 나누어서 저장되고 있는데 삭제하는 쿼리문은
이렇게 하면 EMPLOYEE테이블에서 삭제가 되겠지만 WORKS_ON에서도 삭제를 해줘야 할까? 사실 할 필요가 없다. 할 필요가 없는 이유는 WORKS_ON테이블을 처음에 만들 때 EMPL_ID와 PROJ_ID를 FOREIGN KEY로 지정을 해줬고 특히 EMPL_ID를 보면 EMPLOYEE(ID)를 레퍼런스하도록 지정했고 만약 EMPLOYEE 테이블에서 참조하고 있던 ID가 삭제가 될 때 그 삭제가 CASCADE돼서 WORKS_ON에서 삭제되는 아이디를 참조하던 EMPL_ID에 대응하는 TUPLE들도 삭제가 되도록 설정을 해놓았다. 그렇기 때문에 쿼리문을 실행을 하게되면 EMPLOYEE 테이블에서 삭제되면서 자연스럽게 WORKS_ON 테이블에서도 삭제가 된다는 것이다.

DELETE STAEMENT - 2

JANE이 휴직을 떠나게 되면서 현재 진행 중인 프로젝트에서 중도하차하게 되었고, ID는 2이다.

이 경우에는 EMPLOYEE 테이블말고 WORKS_ON에서만 삭제해야 하기 때문에 DELETE FROM WORKS_ON이라고 적어 주었다.

DELETE STATEMENT - 3

현재 DINGYO가 두 개의 프로젝트에 참여하고 있었는데 프로젝트 2001에 선택과 집중을 하기로 하고 프로젝트 2002에서는 빠지게 됐다. DINGYO의 ID는 5다.
WHERE절의 조건을 ID인 5와 프로젝트 2002에서만 빠지는 것이기 때문에 AND로 조건을 같이 걸어주었다. 만약에 DINGYO가 참여하고 있던 프로젝트가 두 개가 아니라 여러개였다면 어떻게 할까?! 뒷부분을 바꿔주면 된다

DELETE STATEMENT - 4

회사에 큰 문제가 생겨서 진행중인 모든 프로젝트들이 중단됐다. 여기서의 특징은 WHERE 절이 없다라는 것이다. 따라서 PROJECT에 있는 모든 TUPLE들이 다 삭제가 된다.

정리

출처

https://www.youtube.com/watch?v=mgnd5JWeCK4&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=5

0개의 댓글