네가 데이터베이스 관리자라고 상상해봐. 뭔가 레코드를 수정하거나 삭제해야 해. 근데 실수로 전부를 업데이트하거나 삭제하면 어떡하지? 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를 써서 안전하고 확실하게 데이터 업데이트/삭제하는 법을 알게 됐어. 이 도구는 데이터베이스 작업할 때 최고의 친구야. 그리고 항상! 조건을 두 번 확인하는 게, 나중에 데이터 복구하는 것보다 훨씬 낫다는 거 잊지 마!
GO TO FULL VERSION