티스토리 뷰
쿼리를 사용하다 보면 WHERE 1=1을 종종 사용할 때가 있다. 처음 접하시는 분들은 정확한 의미를 모르고 사용하기도 한다. 근데 사용하다 보면 의문이 든다. 왜 써야 하는가?
1=1의 의미는 단순히 항상 참이다.
보통은 SQL Client에서 데이터를 뽑기 위해 쿼리 문을 작성할 때 WHERE 절에 1=1로 조건을 걸고 이후 AND 조건을 자유자재로 넣고 빼기 위해서 사용한다.
SELECT *
FROM USER_BAS
WHERE 1=1
AND DEL_YN = 'N'
-- AND USE_YN = 'Y'
AND USER_ID = 'U000000001';
쿼리문 작성 이후 Mybatis로 옮길 때는 WHERE 1=1은 의미가 없기 때문에 빼고 작성해야 한다. 고정적인 필수 선행 조건이 있다면 WHERE 절에 우선 조건을 걸면 되기 때문이다. (예시 DEL_YN, USE_YN)
불필요한 구문 작성을 지양해야 한다.
SELECT *
FROM USER_BAS
WHERE DEL_YN = 'N'
AND USE_YN = 'Y'
AND USER_ID = 'U000000001';
그럼에도 불구하고 꼭 사용해야 할 때가 있다. 쿼리의 조건문이 Mybatis 조건문에 모두 걸렸을 때이다.
SELECT *
FROM USER_BAS
WHERE 1=1
<if test="userId != null and userId != ''">
AND USER_ID = #{userId}
</if>
<if test="keyword != null and keyword != ''">
AND (USER_NM LIKE CONCAT('%', #{keyword}, '%'))
</if>
부득이하게 필수 선행 조건이 없고 모든 조건이 Mybatis 조건문에 걸릴 때에 유용하게 사용된다. 하지만 이런 경우가 아니라면 위에서 언급했듯이 WHERE 1=1을 되도록이면 지양해야 한다.
'데이터베이스 > SQL' 카테고리의 다른 글
[SQL] MySQL 엔진, 데이터베이스, 테이블 용량 확인 (0) | 2021.01.26 |
---|---|
[SQL] Mybatis를 활용한 페이징 (0) | 2021.01.22 |
[SQL] MySQL SYSDATE() NOW() 차이 (0) | 2021.01.20 |
[SQL] MySQL 하위에서 상위 찾기 (WITH RECURSIVE) (0) | 2021.01.15 |
[SQL] MySQL 주차 구하기 WEEK (0) | 2020.09.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
TAG
- SQL
- 자바
- 리액트 16
- 오라클
- 프로그래머스
- sort algorithm
- Tomcat
- effective java
- React
- 제주도 3박4일 일정
- Linux 명령어
- 경력관리
- 개발환경
- Collection
- 회고
- 제주도 여행
- Eclipse
- Maven
- 이직
- 자바스크립트
- 리눅스 명령어
- javascript
- Java
- 오라클 내장 함수
- 소프트웨어공학
- 정렬 알고리즘
- 프로그래머
- 성능분석
- 리액트
- spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함