SQL에서 and/or 처리

Photo by TJ Arnold on Unsplash

SQL에서 and/or 처리

querydsl ver.

·

1 min read

querydsl을 사용해서 ((A and B) or (C and D))를 표현하려고 했지만 쿼리 결과가 (A and B or C and D) 로 나와 문제 삼는 글들을 본 적이 있습니다. (몇 주 전의 저와, 같은 상태인 분들의 글이지요)

결론부터 말씀 드리자면, 상관없습니다. SQL 처리에서 and가 or보다 우선순위가 높기 때문에 ((A and B) or (C and D)) 로 처리됩니다. > 참고글

e1.and(e2).or(e3.and(e4))//.or(e5.and(e6)) ....

식을 계속 chaning하여 더 복잡한 구조를 만들 수가 있는데, 어떤 식을 subexpression으로 처리하고 싶다면 괄호 안에 넣어야 합니다. 글에 있는 한 예시입니다.(결과는 주석 참고)

e1.or(e2).and(e3.or(e4)) // (e1 or e2) and (e3 or e4)

WRAPPED operator를 사용하여 괄호를 명시적으로 추가할 수 있지만, 코드가 덜 직관적입니다.

Expressions.predicate(Ops.WRAPPED, e1.and(e2))
.or(Expressions.predicate(Ops.WRAPPED, e3.and(e4))) // (e1 and e2) or (e3 and e4)

References