MySQL에서 'WHERE 1=1'의 의미
MySQL에서 'WHERE 1=1' 조건은 항상 참(True)으로 평가되기 때문에, 테이블의 모든 행(row)을 결과로 반환합니다. 즉, 이 조건은 실질적으로 아무런 필터링 없이 전체 데이터를 조회하는 것과 같습니다.
그렇다면 이러한 조건을 굳이 사용하는 이유는 무엇일까요? 주로 동적 쿼리를 작성할 때 여러 개의 AND 조건을 손쉽게 연결하기 위해 사용됩니다. 첫 번째 조건 앞에 'AND'를 붙일지 말지 고민할 필요 없이, 기본 조건 '1=1'을 두고 그 뒤에 조건들을 계속 추가하면 되기 때문입니다.
아래 예제를 통해 'WHERE 1=1'의 동작 방식을 자세히 살펴보겠습니다.
1. 테이블 생성하기
먼저 CREATE 명령어를 사용하여 테이블을 생성합니다.
mysql> CREATE table WhereConditon
-> (
-> id int,
-> name varchar(100)
-> );
Query OK, 0 rows affected (0.43 sec)
2. 레코드 삽입하기
테이블 생성이 완료되면 INSERT 명령어를 통해 샘플 데이터를 입력합니다.
mysql> INSERT into WhereConditon values(1,'John');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT into WhereConditon values(2,'Smith');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT into WhereConditon values(3,'Bob');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT into WhereConditon values(4,'David');
Query OK, 1 row affected (0.13 sec)
3. 저장된 데이터 확인하기
데이터가 정상적으로 삽입되었는지 SELECT 문으로 확인해 보겠습니다.
mysql> SELECT * from WhereConditon;
위 쿼리를 실행하면 테이블에 저장된 모든 레코드를 확인할 수 있습니다.
+------+-------+
| id | name |
+------+-------+
| 1 | John |
| 2 | Smith |
| 3 | Bob |
| 4 | David |
+------+-------+
4 rows in set (0.00 sec)
4. 'WHERE 1=1' 조건 적용하기
이제 SELECT 문에 'WHERE 1=1' 조건을 추가하여 이름(name) 목록을 조회해 보겠습니다. '1=1'은 항상 참이므로, 테이블의 모든 이름이 그대로 출력됩니다.
mysql> select name from WhereConditon where 1=1;
실행 결과는 다음과 같습니다.
+-------+
| name |
+-------+
| John |
| Smith |
| Bob |
| David |
+-------+
4 rows in set (0.00 sec)
정리
'WHERE 1=1'은 항상 참이 되는 조건으로, 단독으로 사용하면 전체 행을 조회하는 결과를 가져옵니다. 실무에서는 주로 동적 SQL을 작성할 때 조건문을 유연하게 추가하기 위한 편의 장치로 활용되며, 코드 가독성과 유지보수성을 높이는 데 도움이 됩니다.