조건절에 1=1 쓰는 이유가 뭔가요?? 0 2 1,986

by 잠옴 [SQL Query] where [2017.04.28 18:07:51]


이제 입사한지 두달을 맞이하고 있습니다.

 

가끔씩 쿼리문에서 1=1을 쓰던데 값이 무조건 true기때문에 왜 쓰는지 잘 모르겠습니다..

 

살얼음 껴있는 맑은 호수처럼 시원하게 알려 주시면 감사하겠습니다.

by jkson [2017.04.28 18:12:48]

동적 쿼리라고

where 절 조건이 붙었다 안 붙었다 하는 경우가 있어요.

StringBuilder sb = new StringBuilder();

sb.Append(" select co11, col2                                   \r\n");
sb.Append(" from                                                \r\n");
sb.Append(" where 1 = 1                                         \r\n");

if (조건) sb.Append(" and col1 = '1'                            \r\n");
~
if (조건) sb.Append(" and col2 = '2'                            \r\n");
~
if (조건) sb.Append(" and col3 = '3'                            \r\n");
~
if (조건) sb.Append(" and col4 = '4'                            \r\n");

위와 같이 조건에 따라 쿼리가 변동되는 경우죠.

이 상황에서 where 1 = 1

이 없다고 가정해보시면

조건에 따라 where 구문을 어디에 넣어야될지 난감해지는 경우가 있습니다.

그게 아니더라도

where 절 바로 뒤에 있는 조건을 지워야할 경우에도 주석처리하기가 어렵죠.

편의상 쓰는 것일 뿐 성능이나 기능상 아무런 차이도 없습니다.


by 개발고수가되기를 [2017.04.29 21:47:55]

저도 초보에요 이곳에서 도움 많이 받았구요 혹여나 도움이 될까해서 제 기준으로 설명 드릴게요~

 

화면단에 툴을 사용 하고

 

조건이 있을때가 잇고 없을때는 그냥 조회 할때가 있거든요~?

사용자가 조건을 선택하고 조회할때가 잇고 조건 없이 조회할때가 잇는데 이때

where 1=1 써 놓으면 하단에 바로

and 절로 붙어서 데이터가 나오는거에요

즉 조건이 where 1=1 밑에 AND 절로 계속 추가가 되는것이지요(문재인 후보님 말투...ㅋㅋ)

 

   WHERE 1=1
     AND O.CD_VENR=Z.CD_VENR(+)
     #{where}
   GROUP BY O.NO_SEQ
         , O.DT_RECV
         , O.CD_VENR
         , O.FLOOR
                  , O.ROOM_NO
         ORDER BY O.DT_RECV, O.CD_VENR
             
   ]]>                                                               
  </sql>                                                                        
  <fragment id="where">
         <if test="${not empty sFrDt}">   
                <![CDATA[                                                                                      
                AND O.DT_RECV >= ${sFrDt}
                ]]>                                                                        
            </if>    
            <if test="${not empty sToDt}">   
                <![CDATA[                                                                                      
                AND O.DT_RECV <= ${sToDt} 
                ]]>                                                                        
            </if>                                                              
   <if test="${not empty sShopCd}"> 
    <![CDATA[                                                     
    AND O.CD_VENR = ${sShopCd}                      
    ]]>                                                   
   </if>                                                                
   <if test="${not empty sFloor}"> 
    <![CDATA[                                                     
    AND O.FLOOR = ${sFloor}                      
    ]]>                                                   
   </if>                                                                
  </fragment>                                     

 

위 소스를 보시면 알겟지만 값이 있으면 들어가는 거고 없으면 들어 가지 않는 것 이랍니다~

 

도움이 되었으면 합니다^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입