본문 바로가기
공부

SQL 조건 걸 때 주의 사항

by 파이드파이퍼 2024. 5. 21.
728x90
반응형

1. OR 사용시 주의사항

 

SELECT * FROM KYEN_MAIN.member WHERE id = 1 or id = 2;

 

 ㄴ SELECT * FROM KYEN_MAIN.member WHERE id = 1 OR 2;

 

해석 : WHERE id =1 OR id = 2 라고 적어야할 내용을

          WHERE id 1 = OR 2라고 적음

풀이 : 이렇게 되면 테이블에 모든 row가 출력됨

 

WHERE id = 1 OR 2

(1) id = 1이 TRUE , (2) 2

 

문제는 (2) MySQL은 0을 FALSE, 0이외의 숫자는 모두 TRUE로 간주

따라서 (2) 부분은 항상 TRUE가 됨

 

ㄴ 즉 , WHERE id = 1 OR 2 는 ->> WHERE =1 OR TRUE

 

결국 어떤 row든 모든 조건을 만족하게 되어 모든 row가 출력 됨

 

OR 사용시, 이런 실수를 하지 말아야함.

 

 

2. AND 와 OR 간의 우선순위 

 

AND 와 OR을 함께 사용할 때 흔히 하기 쉬운 실수

 

SELECT * FROM KYEN_MAIN.member

WHERE gender = 'f' OR age < 30 AND height > 180;

 

*조건*

1. 성별이 여자이거나(OR) 나이거 30세 미만 '이면서' (AND)

2. 키는 180이상인 회원들을 조회 하려 함

 

그러나 실행 결과는 height 컬럼의 값이 180이하인 회원들도 대거 보임

(2) 키는 180이상이라는 조건을 만족하는 row들이 조회 되야 하는데 뭐가 문제일까?

 

이런 결과가 출력된 이유는, SQL문이 실행될 떄, AND가 OR 보다 우선순위가 더 높기 때문임.

AND가 OR보다 먼저 실행 됨

 

수정 타입

 

SELECT * FROM kyen_main.member

WHERE (gender = 'f' OR age < 30) AND height > 180;

 

우선순위를 신경쓰는 것 보다는 사용자가 그냥 ' 먼저 실행되기를 원하는 조건' 을 괄호로 씌워주는 게 좋다.

 

조건에 괄호를 씌어주면 AND 와 OR 사이의 우선순위를 신경쓰지 않아도 되고, 나중에 SQL 문을 다시 읽었을 때도 이해하기 편하다는 장점이 있음.

여러 조건을 걸 떄는 이렇게 조건 단위로 괄호를 씌워주는 습관을 들이면 좋음.

728x90
반응형

'공부' 카테고리의 다른 글

SQL- 비정규화  (0) 2024.05.17
구구절절  (0) 2024.03.10
약수, 정수  (0) 2024.01.16
글쓰기 따옴표, 띄어쓰기, 문장부호, 문법에 관하여..  (2) 2024.01.13
글쓰기 '수'와 '것'에 관하여  (0) 2024.01.13

댓글