데이터베이스와 테이블 구축 3

8990 단어 sqlsql

📌 테이블의 row 갱신

테이블에 있던 기존의 row를 갱신하는 방법을 알아보자. 수정 또는 갱신이라고 한다.

SELECT * FROM course_rating.student;


기존 row를 갱신하고 싶으면 UPDATE문을 사용하면 된다.

✅ 김소원이라는 학생이 화학과에서 멀티미디어 학과로 전과했다고 가정하자.

UPDATE student SET major = '멀티미디어학과' WHERE id = 2;
  • UPDATE 테이블 : 해당 테이블을 갱신하라.
  • SET 컬럼 = 새로운 값 : 컬럼을 새로운 값으로 설정한다.
  • WHERE 조건 : 조건에 해당하는 row를 갱신하라.

갱신할 때는 WHERE절이 중요하다.

UPDATE student SET major = '멀티미디어학과;

WHERE절 없이 위 처럼 사용하면 특정 row가 아닌 테이블에 있는 모든 row의 major 컬럼을 갱신하게 된다.

❗ 갱신할 때는 WHERE절에 조건을 달아서 어떤 row를 갱신할 건지 지정해야 한다.

✅ 김소원이라는 학생이 이름을 차소원이라고 개명했다고 가정하자.

UPDATE student
	SET major = '멀티미디어학과', name = '차소원'
    WHERE id = 2;

한 개 이상의 컬럼을 갱신할 때는 콤마(,)로 구분해주고 같은 형식으로 작성한다.


📌 컬럼의 기존 값을 기준으로 갱신

기말고사 성적을 나타내는 final_exam_result 테이블이 있다.

✅ 모든 학생의 점수에 +3점을 해준다고 가정하자.

UPDATE final_exam_result SET score = 100 WHERE id = 1;
UPDATE final_exam_result SET score = 63 WHERE id = 2;
UPDATE final_exam_result SET score = 18 WHERE id = 3;

위처럼 실행해도 되지만 번거로워진다.
UPDATE 문을 사용할 때는 기존 값을 그대로 활용하는 방법도 있다.

UPDATE final_exam_result SET score = score + 3;

모든 row의 score 컬럼의 값이 기존 값보다 3이 더 큰 값으로 갱신된다.

SELECT * FROM FOR_TEST.final_exam_result;

모든 학생들의 점수가 기존보다 3점 증가한 것을 확인할 수 있다.

UPDATE문으로 갱신할 때는 SET score = score + 3처럼 컬럼의 이름을 활용해서 기존 값을 기반으로 갱신하는 경우도 많다.


📌 테이블의 row 삭제

기존의 row를 삭제하는 방법에 대해 알아보자.

✅ 정유진 학생이 다른 학교로 편입하였다고 가정하자.

DELETE FROM student WHERE id = 4;
  • DELETE : 삭제하라
  • FROM 테이블 : 해당 테이블로부터
  • WHERE 조건 : 조건에 해당하는 row를 삭제하라

DELETE문도 반드시 WHERE절을 작성해줘야 한다.

WHERE절을 작성하지 않으면 테이블의 모든 row들이 삭제된다.


📌 물리 삭제 vs 논리 삭제

row를 삭제하는 방법에는 크게 2가지 방법이 있다.

  • 물리 삭제
  • 논리 삭제

앞서 배운 것처럼 데이터를 삭제해야 할 때 row를 바로 삭제해버리는 것을 물리 삭제라고 한다.

반면 논리 삭제는 삭제해야 할 row를 삭제하지 않고 삭제 여부를 나타내는 별도의 컬럼을 두고, 거기에 삭제 되었음을 나타내는 값을 넣는다.

예를 들어 주문 내역을 조정하는 order 테이블이 있다고 가정하자.

SELET * FROM FOR_TEST.order;

이 때 2번 주문을 한 고객이 주문을 취소하여 주문 내역을 삭제하려고 한다.

✅ 물리 삭제

DELETE FROM order WHERE id = 2;

✅ 논리 삭제

만약 논리 삭제를 한다면 is_cancelled 같은 컬럼을 추가하고 해당 컬럼에 주문이 취소되었음을 나타내는 값을 넣어주면 된다.

UPDATE order SET is_cancelled = 'Y';

✅ 과제 : 데이터 갱신과 삭제

중고 거래 사이트에서 회원들이 매물로 올려놓은 상품들을 관리하기 위해 아래 그림처럼 생긴 item이라는 테이블을 사용하고 있다.

  • id : PRIMARY KEY 컬럼
  • name : 중고 물품 이름
  • type : 중고 물품 카테고리
  • price : 판매자가 제시한 가격
  • description : 판매자의 중고 물품에 대한 설명
  • upload_date : 판매자가 중고 물품 판매 게시글을 업로드한 날짜
  • purchased : 판매 완료 여부, 판매가 완료되었으면 ‘Y’ / 아직 판매되지 않았으면 ‘N’ 을 값으로 가짐
  • is_deleted : 게시글 삭제 여부, 판매자가 게시글을 삭제했으면 ‘Y’ / 게시글을 업로드해둔 상태면 ‘N’을 값으로 가짐

논리 삭제 방식을 사용하고 있다.

  1. ‘남성정장 상하의 세트' 중고 물품이 너무 팔리지 않아서인지 판매자가 삭제해버렸다. 이 row의 is_deleted 컬럼의 값을 Y로 갱신하라.

  2. is_deleted 컬럼의 값이 Y이면서, 그 게시글 업로드일이 2020년 7월 5일 기준으로 365일보다 더 오래된 상품들의 row를 물리 삭제하라.

💻 풀이

UPDATE item
    SET is_deleted = 'Y'
    WHERE name = '남성정장 상하의 세트';

DELETE FROM item
    WHERE is_deleted = 'Y'
        AND DATEDIFF('2020-07-25', upload_date) > 365;

SELECT * FROM item;

좋은 웹페이지 즐겨찾기