오래 못 할 짓 하지 않기

[ 데이터베이스 ] 4. SQL 활용 ( 추가/수정/삭제 ) 본문

3학년 1학기/데이터베이스(DB)

[ 데이터베이스 ] 4. SQL 활용 ( 추가/수정/삭제 )

쫑알bot 2023. 12. 30. 16:35
728x90

Insert - 데이터 추가

  INSERT INTO (데이터를 추가할 table name)
-> VALUES (1,'Kim','2001-03-01' , 'M' );

 

Data를 Table에 넣을 때 사용한다.

 

※ 주의할 점

1) Primary Key를 입력해야한다면, 겹치지 않게 넣어주어야 한다.

2) Attribute를 생성한 순서대로 데이터 값도 순서대로 추가해주어야 한다.

3) Constraints 를 지켰는지 확인한다.

   -> 문제가 생겼을 때,

        SHOW CREATE TABLE (문제가 생기고 있는 table 이름); 

        하면 어떤 조건을 만족시키지 못했는지 알 수 있다.

 

위와 같이 Table 다음에 attribute 이름을 나열한 뒤에 VALUES를 추가한다면

 

1) 원하는 순서대로 값을 넣을 수 있고.

2) 해당 Attribute에만 값을 넣는다는 의미이다.

 

 

 

데이터 Insert 방식

1) Attribute를 추가한 순서대로 데이터를 넣어준다.

→ 한 set의 data가 추가됨

 

2) 원하는 Attribute list를 적은 뒤, 그 Attribute에만 값을 넣어준다.

→ 한 set안에서 list에 추가한 값들만 더해진다.

 

3) 여러 개의 데이터를 한 번에 넣는다.

 

 

 



Update - 데이터 수정

 

Update ( table 이름 ) set ( 바꿀 attribute = 바꿀 값 ) WHERE ( 바꾸려고 하는 것의 attribute 값 )  <<주로 id값이나 이름

 

ex)

Update table1 set attributeA = hello Where id=3;

 

id=1 인 데이터에서, dept_id만 1003으로 바꿨다.

 

 

 

문제 1)

개발 팀 직원들의 연봉을 2배 인상시키려고 한다.

개발 팀 부서 id는 1003이다.

 

update employee set salary = salary * 2 where dept_id =1003;

※ salary *= 2 이거 안 됨

 

 


 

문제 2)

 

 

project 2003에 참여한 사람들만 연봉을 2배 늘려주려고 한다.

 

update employee,works_on set salary = salary * 2 where id= empl_id and proj_id = 2003;

 

→ update 후에 관련된 table들을 적어준다. 

→ 연봉을 인상하는 것을 적어준다.

→ 조건 ) [ id와 empl_id가 동일 ] 하고, [ proj_id =2003 ] 인 곳

 

조건절에서 attribute가 어느 table의 attribute인지 직관적이지 않기 때문에 이를 위해 더 자세히 기술할 수 있다.

 

update employee,works_on

set salary = salary * 2

where employee.id= works_on.empl_id and works_on.proj_id = 2003;

 

 


문제 3) 모든 직원의 연봉을 올려주자

 

Update employee

set salary = salary *2 ;

 

※ Where을 할 필요도, *를 붙일 필요도 없다.

 

 

 

 



Delete - 데이터 삭제

 

Delete From (지울 데이터가 있는 table) Where (조건);

 

ex) Delete From table1 Where id=3;

 

 

 

문제1) Employee에서 id=8인 데이터를 지웠는데, WORKS_On에서 지울 필요가 없다고 한다.

그 이유는??

 

더보기

 

WORKS_ON을 만들 때, 값들을 FOREIGN KEY로 설정하면서 id값을 참조하도록 만들었는데

그 밑에 option에 참조하는 값이 사라지면 같이 삭제되도록 만들었기 때문!  



문제 2) 휴직을 떠난 A가 진행 중인 프로젝트에서 빠지게 되었다.

A의 id는 2이다.

 

Delete from works_on WHERE empl_id=2;

 

empl_id 가 2인 튜플들이 모두 삭제된다.

 



 

문제 3) B는 현재 2개의 프로젝트를 하고있다. B의 id는 5이다.

하지만 2001 프로젝트를 열심히 하고자 2002 프로젝트에서 빠지려고 한다.

 

Delete from works_on where empl_id=5 and proj_id=2002;

 

 

만약 프로젝트가 두 개가 아니라 훨씬 많다면

 

Delete from works_on where empl_id=5 and proj_id <> 2001;

Delete from works_on where empl_id=5 and proj_id != 2001;

 

 

회사에서 하고있는 모든 프로젝트를 다 삭제하려면?

DELETE FROM project;

 

모두 지우려면 where절이 필요없다.

반대로 생각하면 까먹고 where 안 적으면 다 날아감

 

(참고)

유튜브 쉬운코드