안녕하세요.
기존 프로그램의 쿼리를 수정하려 살펴보다 조건절에 아래와 같이 생소한 문법이 보여서 문의 드립니다.
where 1=1
[ AND a.outdt like @dt + '%' ]
[ AND a.outty = @ty ]
이런식으로 조건절에 대괄호가 씌워져 있는데 어떠한 용도인가요~?
파라메터 값 유무에 따라 조건을 적용하는 그런건가요~~?? 궁금합니다~!
안녕하세요.
기존 프로그램의 쿼리를 수정하려 살펴보다 조건절에 아래와 같이 생소한 문법이 보여서 문의 드립니다.
where 1=1
[ AND a.outdt like @dt + '%' ]
[ AND a.outty = @ty ]
이런식으로 조건절에 대괄호가 씌워져 있는데 어떠한 용도인가요~?
파라메터 값 유무에 따라 조건을 적용하는 그런건가요~~?? 궁금합니다~!
3개의 답변이 있습니다.
[ ] 의 용도는 sql 자체에서는 잘 모르겠습니다. 사용한 경험이 없네요...
[ ] 는 sql 자체에서 필요한 게 아니고 다른 sql을 사용하는 다른 프로그램에 해당 조건을 넣어다 뺐다 제어하려고 넣은 거 같습니다.
그래서 필요없는 "where 1=1" 문장이 들어가 있는 것으로 보여지네요..
정상적인 문법은
where a.outdt like @dt + '%'
AND a.outty = @ty
이렇게 하는 게 맞는 것으로 보이는데
outdt에 대한 조건과 outty에 대한 조건을 둘다 포함하는 경우도 있고 하나만 포함하거나 둘다 빠지는 경우도 있을 수 있어서...
둘 다 빠지는 경우를 대비해서 "1=1" 구문을 넣은 것으로 보이네요...
댓글 남기기
답변을 작성 하시려면 로그인이 필요합니다.
로그인 회원가입개발 언어가 무엇인지는 잘 모르겠고,
[ ] 가 프로그램 안에서 어떤 의미로 사용되고 있는지 잘 모르겠는데요.
아마도 프로그램이 SQL에 쿼리를 보내기 전에 다른 가공 처리를 해서 완성된 쿼리를 만드는게 아닌가 싶어 보이기도 한데요...
일반적으로 where 절에 1=1 을 사용하고 and로 묶어 버린다면 논리 결과 true와 and가 만나게 되어 where 절 문법에서 논리적으로 아무런 효과도 없는 결과를 주게 되겠는데요.
오히려 미세하지만 아무 의미 없는 결과를 위해서 처리를 해야 해서 연산 성능을 낮출수 있고, 보안적인 관점에서도 SQL Injection과 같은 취약점을 남길 수 있는 문제를 유발 할 수 있게 만드는 부작용이 있겠는데요.
다만...
프로그램 안에서 동적 쿼리를 만들어야 할때 where 와 and 키워드를 넣고 빼고 하는 판단을 복잡하게 처리할 필요없어서 편리하게 사용할 수 있게 해 주고요.
예를 들어...
whrere 1=1
and a.outdt like @dt + '%'
and a.outty = @ty
를
whrere a.outdt like @dt + '%'
and a.outty = @ty
나
whrere a.outty = @ty
and a.outdt like @dt + '%'
와 같이 사용할 경우에
a.outdt like @dt + '%' 에 해당하는 조건을 넣지 않는다거나 a.outdt like @dt + '%' 에 대한 조건을 넣지 않을 경우에 단순히 where 다음에 조건을 없애 버린다면 쿼리문에 오류가 발생되어 다음에 오는 and 까지 함께 제거해 줘야 해서 쿼리문 사전 처리 ( Preprocessing ) 하는데 문제가 생기게 되겠고요~
길게 적었는데...
간단하게 말해~
"동적 쿼리를 작성하기 위한 목적" 이라고 보시면 될 것 같네요.
댓글 남기기
답변을 작성 하시려면 로그인이 필요합니다.
로그인 회원가입프로그램내에서는 append 로 처리하려고 한것 같은데
사실 습관적인 1=1 이 더 문제가 될 소지가 큽니다.
이게 값 없이 null 이 갈 경우 전체에 영향을 주거든요..
그래서 최악의 delete ...where 1=1 에 and~ 변수가 들어가게 될 경우에 null 이 들어가면
에러가 리턴되야 하는데 전부 다 날리는...최악의 경우도 발생할 수 있죠
댓글 남기기
답변을 작성 하시려면 로그인이 필요합니다.
로그인 회원가입