SQL의 WHERE 절의 의미

📝 한줄 요약

Supabase에서 데이터를 수정하는 SQL 명령어를 실행했는데, 이런 경고가 떴어요:

WARNING: UPDATE without WHERE clause will update ALL ROWS!

“WHERE 절이 없으면 모든 행이 바뀐다”는 뜻이었어요. 이 경고를 통해 배웠어요: 데이터베이스는 실수를 막기 위해 설계되어 있다는 것.

Before: “WHERE”가 뭐고 왜 필요한지 몰랐음
After: 데이터를 다루는 기본 규칙 이해함

👥 이런 분께 추천

  • SQL을 처음 배우는 분

  • 데이터베이스에서 실수가 두려운 분

  • “하나만 수정하려고 했는데 전체가 바뀐” 경험이 있는 분

  • 엑셀에서 데이터를 다루다가 SQL로 넘어오는 분

🙋 내 스펙 & 환경

항목

내용

직업

초과근무관리 앱 제작

도구

Supabase SQL 에디터

상황

한 명의 초과근무 기록을 “승인됨”으로 수정하려고 함

실수

WHERE 절을 빼먹음


진행 방법

1. 왜 WHERE 절이 필요한가

상황을 예로 들겠습니다. 초과근무 데이터베이스가 있어요:

ID

이름

시간

상태

1

김철수

2

대기중

2

이영희

3

대기중

3

박민준

1.5

대기중

“ID 1번 (김철수)의 상태를 ‘승인됨’으로 바꾸고 싶다”고 해봅시다.

틀린 방법 (WHERE 절 없음):

UPDATE overtimes
SET status = 'approved';

이 명령어를 실행하면? 모든 사람의 상태가 ‘승인됨’으로 바뀝니다!

ID

이름

시간

상태

1

김철수

2

승인됨

2

이영희

3

승인됨

3

박민준

1.5

승인됨

이영희와 박민준은 아직 대기 중인데 모두 승인된 것처럼 되었어요. 큰 문제입니다.

바른 방법 (WHERE 절 포함):

UPDATE overtimes
SET status = 'approved'
WHERE id = 1;

이 명령어는 “ID 1번인 행에서만 status를 바꿔”라는 뜻이에요.

ID

이름

시간

상태

1

김철수

2

승인됨

2

이영희

3

대기중

3

박민준

1.5

대기중

정확하게 1번만 바뀌었어요.

2. WHERE 절이란 뭔가

WHERE 절은 데이터베이스에 주는 “조건”이에요.

UPDATE 테이블명
SET 변경할내용
WHERE 조건;

WHERE 뒤에 오는 조건들:

  • WHERE id = 1 : ID가 1인 행만

  • WHERE name = '김철수' : 이름이 ‘김철수’인 행만

  • WHERE status = 'pending' : 상태가 ‘pending’인 행들

  • WHERE hours > 5 : 근무시간이 5시간을 넘는 행들

  • WHERE department = '생산' AND status = 'pending' : 생산부 AND 대기 중인 행들

3. 데이터베이스의 경고 메시지

Supabase에서 WHERE 절 없는 UPDATE를 시도했을 때 경고가 뜬 이유:

WARNING: UPDATE without WHERE clause will update ALL ROWS!

이건 데이터베이스가 저를 보호하려고 준 거예요. “지금 명령어가 위험해!”라고 알려준 거죠.

만약 경고가 없었다면?

  • 클릭 → 모든 데이터 망가짐 → 복구 어려움

  • 데이터가 수십만 개면? 돌이킬 수 없는 손실

4. WHERE 절 없이 UPDATE하는 경우

그런데 WHERE 절 없이 UPDATE를 하고 싶을 수도 있어요.

UPDATE overtimes
SET updated_at = NOW();

“모든 행의 ‘updated_at’ 시간을 지금으로 바꿔”라는 의도예요.

이 경우:

  • 의도가 명확하면 OK

  • 하지만 실수할 가능성이 높으니 항상 확인해야 함

5. 복잡한 WHERE 절 예시

실제로는 더 복잡한 조건을 쓸 수 있어요:

예 1: 특정 부서의 승인 대기 중인 것들만 승인하기

UPDATE overtimes
SET status = 'approved'
WHERE department = '생산' 
  AND status = 'pending'
  AND hours > 2;

예 2: 7월의 데이터 모두 지우기

DELETE FROM overtimes
WHERE month = 7
  AND year = 2026;

🛠 사용한 도구

도구

역할

Supabase SQL 에디터

SQL 명령어 실행

경고 메시지

실수 방지

테이블 미리보기

결과 확인


배운 점

💡 핵심 1: WHERE 절은 “범위”를 정하는 것

엑셀로 생각하면 이해하기 쉬워요:

엑셀에서:

  • 셀을 클릭 → 그 셀만 수정 → 저장

SQL에서:

  • WHERE 절로 범위를 정함 → 그 범위만 수정 → 저장

WHERE 절이 없으면 엑셀에서 “전체 선택 후 수정”하는 것과 같아요.

💡 핵심 2: 데이터베이스는 실수를 막도록 설계됨

Supabase의 경고는 무섭게 들리지만, 사실은 좋은 설계예요.

WARNING: ...

이 메시지가 없었다면 실수로 모든 데이터를 손상시킬 수 있었어요. 경고 덕분에 잡을 수 있었습니다.

💡 핵심 3: SELECT로 먼저 확인하기

UPDATE나 DELETE 전에 SELECT로 먼저 “어떤 데이터가 변할 건지” 확인하는 습관이 중요해요.

-- 먼저 이걸로 확인
SELECT * FROM overtimes
WHERE id = 1;

-- 그 다음에 UPDATE 실행
UPDATE overtimes
SET status = 'approved'
WHERE id = 1;

이렇게 하면 실수가 줄어들어요.

💡 핵심 4: UPDATE와 DELETE는 신중하게

SELECT는 “읽기만” 하니까 괜찮아요. 하지만:

  • UPDATE: 데이터를 바꿈

  • DELETE: 데이터를 지움

이 둘은 되돌리기 어려워요 (백업이 있으면 가능하지만). 그래서 WHERE 절을 더 신중하게 써야 합니다.


적용할 점

🎯 안전한 SQL 사용 원칙

  1. UPDATE/DELETE 전에 SELECT로 먼저 확인

    -- 1단계: 확인
    SELECT * FROM table WHERE condition;
    
    -- 2단계: 실행
    UPDATE table SET ... WHERE condition;
  2. WHERE 절은 항상 있어야 한다 (의도하지 않은 경우 제외)

    • UPDATE할 때 WHERE 없으면 빨간 불

    • DELETE할 때 WHERE 없으면 정말 빨간 불

  3. 복잡한 조건은 천천히

    -- 먼저 조건만으로 확인
    SELECT * FROM overtimes
    WHERE department = '생산'
      AND status = 'pending'
      AND hours > 2;
    
    -- 결과가 맞으면 UPDATE 실행
  4. 실수할 것 같으면 개발자에게 물어보기

    • “이 WHERE 절이 맞나요?”

    • 확인하는 1분이 복구하는 1시간보다 낫습니다

📋 SQL 실행 체크리스트

[ ] SELECT로 먼저 어떤 데이터가 영향받을지 확인했나?
[ ] WHERE 절을 빼먹지 않았나? (의도한 경우 제외)
[ ] 조건이 복잡하면 하나씩 나눠서 확인했나?
[ ] 다른 사람의 데이터는 건드리지 않나?
[ ] 지워야 하는 게 맞나? (DELETE의 경우)

🔜 다음 단계

  1. 현재: WHERE 절의 중요성 이해 ✓

  2. 다음: JOIN을 사용해 여러 테이블의 데이터 수정하기

  3. 그다음: 트랜잭션(Transaction) 배우기 (여러 명령어를 한 번에 처리)


솔직한 소감

처음에 경고 메시지를 봤을 때 “뭐가 문제라는 거야?” 했거든요.

하지만 알고 보니, 그 경고가 제 데이터를 지켜준 거였어요. 만약 경고가 없었다면, 클릭 한 번으로 모든 데이터가 망가졌을 수도 있어요.

이제 알겠어요. SQL에서 WHERE 절은 선택이 아니라 필수라는 것. 그리고 데이터베이스의 안전장치들은 “복잡한 것”이 아니라 “나를 보호하는 것”이라는 걸.

비개발자도 충분히 SQL의 기본을 배우고 안전하게 사용할 수 있겠구나 생각했습니다.

2
2개의 답글
지피터스 뉴스레터

이번 주 AI, 딱 쓸 것만

매주 월요일 아침,
읽고 바로 써먹을 AI 소식만