CodeGym /행동 /SQL SELF /WHERE 사용해서 데이터 업데이트 및 삭제하기

WHERE 사용해서 데이터 업데이트 및 삭제하기

SQL SELF
레벨 21, 레슨 4
사용 가능

네가 데이터베이스 관리자라고 상상해봐. 뭔가 레코드를 수정하거나 삭제해야 해. 근데 실수로 전부를 업데이트하거나 삭제하면 어떡하지? WHERE 연산자는 그런 대참사를 막아주는 "보험" 같은 거야. 쿼리 실행할 때 정확히 어떤 행을 건드릴지 지정할 수 있게 해주거든.

예를 들어:

UPDATE students
SET status = 'Graduated';
이 쿼리는 진짜 모든 행을 students 테이블에서 업데이트해. 만약 졸업 축하하려다가 실수로 모두에게 status = 'Expelled'를 줬다고 생각해봐. 완전 위험하지? 이런 걸 막으려면 항상 WHERE로 조건을 지정해서 어떤 행을 업데이트/삭제할지 정해야 해.

WHERE 조건문 문법

WHERE는 연산자가 적용될 행을 필터링하는 데 써. UPDATE나 DELETE에서 쓸 수 있고, 문법은 이렇게 돼:

UPDATE의 경우:

UPDATE 테이블
SET column1 = value1, column2 = value2
WHERE 조건;

DELETE의 경우:

DELETE FROM 테이블
WHERE 조건;

WHERE 없이 쓰면 테이블의 모든 행이 바뀌니까, 원치 않는 데이터까지 건드리지 않으려면 꼭 조건을 써줘야 해.

비교 연산자 사용하기

WHERE에서 조건을 만들 때 비교 연산자를 써. 대표적인 것들 살펴보자:

연산자 설명 예시
= 같다 age = 18
<> 같지 않다 age <> 18
> 크다 age > 18
< 작다 age < 18
>= 크거나 같다 age >= 18
<= 작거나 같다 age <= 18

예시: 학생 상태 업데이트하기

만약 21살 넘은 학생들을 "졸업생"으로 표시하고 싶으면 이렇게 해:

UPDATE students
SET status = 'Graduated'
WHERE age > 21;

예시: 18살 미만 학생 삭제하기

만약 누가 실수로 미성년자 학생을 등록했다면, 이렇게 삭제할 수 있어:

DELETE FROM students
WHERE age < 18;

논리 연산자로 복잡한 조건 만들기

여러 조건을 동시에 걸고 싶을 때가 많아. 예를 들어, 18살 넘고 "Programming" 코스 듣는 학생만 업데이트하려면 논리 연산자 AND, OR, NOT를 써야 해.

논리 연산자:

연산자 설명 예시
AND 모든 조건이 참일 때 실행 age > 18 AND course = 'Programming'
OR 하나라도 조건이 참이면 실행 age > 18 OR course = 'Programming'
NOT 반대 (조건 결과를 뒤집음) NOT (age < 18)

예시: 18살 넘는 프로그래밍 학생만 업데이트

UPDATE students
SET status = 'Advanced'
WHERE age > 18 AND course = 'Programming';

예시: 18살 미만이거나 "Singing" 코스 학생 삭제

DELETE FROM students
WHERE age < 18 OR course = 'Singing';

대참사 방지 꿀팁

항상 실행 전에 조건을 꼭 확인하자!

WHERE 없이 쿼리 쓰면 PostgreSQL은 테이블의 모든 행에 적용해버려. 이런 일이 벌어져:

DELETE FROM students;
-- 헉! students 테이블의 모든 레코드가 삭제됨!

이런 상황을 막으려면 WHERE를 꼭 추가해:

DELETE FROM students
WHERE student_id = 123;

팁: 조건이 제대로 동작하는지 확신이 안 들면 먼저 SELECT로 확인해봐. 예를 들어:

SELECT * FROM students
WHERE student_id = 123;

결과가 원하는 대로 나오면 그때 UPDATE나 DELETE를 실행하면 돼.

실전 예제

예제 1: 학생 상태 업데이트

예를 들어 students 테이블이 있다고 해보자:

student_id name age course status
1 Otto Lin 20 Programming Beginner
2 Maria Chi 22 Mathematics Graduated
3 Eva Gram 19 Programming Beginner

여기서 18살 넘는 프로그래밍 학생을 모두 "Intermediate"로 바꿔보자:

UPDATE students
SET status = 'Intermediate'
WHERE age > 18 AND course = 'Programming';

결과:

student_id name age course status
1 Otto Lin 20 Programming Intermediate
2 Maria Chi 22 Mathematics Graduated
3 Eva Gram 19 Programming Beginner

예제 2: 퇴출된 학생 삭제

이번엔 "History of Arts" 코스 학생을 삭제해야 한다고 해보자. 테이블은 이래:

student_id name age course status
1 Otto Lin 20 Programming Intermediate
4 Alex Ming 21 History of Arts Expelled

"History of Arts" 코스 학생을 삭제해보자:

DELETE FROM students
WHERE course = 'History of Arts';
student_id name age course status
1 Otto Lin 20 Programming Intermediate

예제 3: 조건 없이 업데이트 (이러면 안 됨!)

만약 이렇게 쓴다면:

UPDATE students
SET status = '졸업생';

모든 학생이 졸업생이 돼버려. 그래서 WHERE는 꼭 써야 해!

원래 테이블이 이랬다고 치자:

student_id name age course status
1 Otto Lin 20 Programming Intermediate
2 Maria Chi 22 Mathematics Graduated
3 Eva Gram 19 Programming Beginner

UPDATE를 WHERE 없이 실행하면:

student_id name age course status
1 Otto Lin 20 Programming 졸업생
2 Maria Chi 22 Mathematics 졸업생
3 Eva Gram 19 Programming 졸업생

😬 봤지? 모든 status가 바뀌었어. 백업 없으면 복구도 힘들어. 그러니까 WHERE는 꼭 챙기자!

주의할 점 & 함정

WHERE는 진짜 유용하지만, 초보자들이 자주 실수하는 부분이 있어:

  • 조건 누락: WHERE를 빼먹으면 모든 행이 바뀜.
  • 잘못된 조건: 예를 들어 age = 19 대신 age < 19를 써야 하는데 실수하면 엉뚱한 데이터가 바뀜.
  • 복잡한 조건: AND와 OR 우선순위 잘못 쓰면 예상치 못한 결과가 나와. 괄호로 명확하게 써줘:
    DELETE FROM students
    WHERE (age > 18 AND course = 'Programming') OR course = 'Mathematics';
    

쿼리는 네가 봐도, 동료가 봐도 한눈에 이해가 가게 쓰는 게 좋아.

이제 WHERE를 써서 안전하고 확실하게 데이터 업데이트/삭제하는 법을 알게 됐어. 이 도구는 데이터베이스 작업할 때 최고의 친구야. 그리고 항상! 조건을 두 번 확인하는 게, 나중에 데이터 복구하는 것보다 훨씬 낫다는 거 잊지 마!

2
과제
SQL SELF, 레벨 21, 레슨 4
잠금
여러 조건으로 업데이트하기
여러 조건으로 업데이트하기
1
설문조사/퀴즈
데이터 삽입과 업데이트, 레벨 21, 레슨 4
사용 불가능
데이터 삽입과 업데이트
데이터 삽입과 업데이트
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION