컴퓨터 과학/데이터 베이스

SQL 조건문에서 흔히 하는 실수 2가지

Data Jun 2025. 8. 17. 16:54

 SQL에서 WHERE 절에 조건을 걸 때 자주 발생하는 두 가지 실수를 정리해보겠습니다.

 

OR 사용 시의 주의사항

다음과 같은 SQL문이 있다고 해봅시다.

SELECT * 
FROM member
WHERE id = 1 OR id = 2;

이 쿼리는 id가 1이거나 2인 회원만 잘 조회됩니다.

하지만 간혹 이런 실수를 하기도 합니다.

SELECT * 
FROM member
WHERE id = 1 OR 2;

 

이렇게 작성하면 결과가 어떻게 될까요?
👉 테이블의 모든 row가 출력됩니다 

그 이유는, MySQL에서는 0은 FALSE, 0 이외의 숫자는 모두 TRUE로 인식하기 때문입니다.
즉, id = 1 OR 2는 곧

  • (1) id = 1
  • (2) 2 → TRUE

이렇게 해석되어 결국 WHERE id = 1 OR TRUE와 같아지고, 모든 row가 조건을 만족하게 됩니다.

✅ 정리: OR을 사용할 때는 반드시 컬럼명 = 값 형태를 정확히 써야 합니다.

 

AND와 OR의 우선순위

SQL에서는 AND가 OR보다 우선순위가 높습니다.
이 점을 모르고 작성하면 의도치 않은 결과가 나오기 쉽습니다.

예를 들어,

SELECT * 
FROM member
WHERE gender = 'F' OR age < 30 AND height >= 180;

원래 의도:

  • 성별이 여자이거나
  • 나이가 30세 미만이면서 키가 180 이상인 회원

하지만 실제 실행 결과는,

  • 성별이 여자이거나
  • (나이가 30세 미만 AND 키가 180 이상인 회원)

으로 해석됩니다.

👉 이유: AND가 OR보다 우선순위가 높기 때문입니다.

 

 

해결 방법: 괄호 사용

 

우선순위를 억지로 기억할 필요는 없습니다.
그 대신, 내가 원하는 조건을 먼저 실행되도록 괄호(())를 써주면 됩니다.

SELECT * 
FROM member
WHERE (gender = 'F' OR age < 30) AND height >= 180;

이렇게 작성하면 의도했던 대로 성별이 여자이거나 나이가 30세 미만인 회원 중 키가 180 이상인 경우만 조회됩니다.

 

정리

  • WHERE id = 1 OR 2 → ❌ 잘못된 문법 (항상 TRUE → 모든 row 조회됨)
  • AND는 OR보다 우선순위가 높음 → 괄호로 묶어서 원하는 조건을 명확히 해주기
  • 습관적으로 조건 단위로 괄호를 씌우면 실수를 방지할 수 있고, 나중에 SQL문을 읽을 때도 훨씬 직관적임