본문 바로가기

DB/MY-SQL

[MY-SQL] where 1=1?

a. sql = select * from table;
b. sql = select * from table where name = 'gg';

이런 경우에 조건을 붙인다고 할 때

sql = sql + "and age = '21'";

a의 경우를 보면 오류가 발생한다. 이럴 경우 if문을 이용해서 where문이 사용되었는지 아닌지를 판별하는
조건을 사용하여야 하는데, 이럴경우 내용이 길어지고 가독성이 떨어지며 '귀찮기'때문에 where 1=1을 사용한다.

1=1은 항상 참이기 때문에 쿼리문에 영향을 주지 않는다. 1=1을 사용함으로써

아무 생각없이 조건을 붙여 사용할 수 있다.

sql = select * from table where 1=1 and age = '21';

같은 내용으로 1=2도(항상 거짓) 사용할 수 있다. (ex : 임시적으로 조회가 불가능하도록 할 때)

아래는 http://www.devpia.com에 올라온 질문글에 이영민(andy5)님이 올린 답변이다.


저는 이 조건을 Delphi, Java Swing, C# WinForm 등의 App를 개발할때 Query 문장을 특정 조건에 맞게 조합하고자 할때 사용했습니다.

 

예를 들어서, 고객등급 조건을 사용자가 선택한 경우에는 고객 등급 조건을 where절에 추가하고,

가입일자 조건을 선택하면 가입일자 조건을 추가하려고 할때,

이미 조건이 추가 되어 있는지를 검사해서 'and' 를 앞에 붙일지 말지를 결정해야 합니다.

 

이런 조건들이 상당수 있을 경우 if 문이 상당히 지저분하고 가독성이 떨어집니다.

그래서 아예 where 1=1 처럼 항상 참인 조건으로 초기화합니다.

그러면, 그 다음에 오는 조건들은 그냥 and를 앞에 붙여주기만 하면 되니까요~

 

T-SQL에서 동적쿼리를 사용하는 경우도 마찬가지입니다.

where 절 구성하기에 좀 더 편리한 방법이라고 생각합니다.

 

별로 필요 없어 보이지만, 나름대로 이유가 있습니다

 

ps.

where 1=1 은 where 2=2 와 동일합니다. ^^

일종의 관습처럼 굳어진 버릇인것 같아요~