홈 › SQL 실무 › 02 / 9

동적 검색 조건

선택 조건, 바인드 변수, IN 목록, 정렬 선택
섹션 6진행 0 / 9

동적 검색 조건: 선택 조건, 바인드 변수, IN 목록, 정렬 선택

검색 화면은 이름·부서·입사일 구간·상태를 넣을 수도 있고 안 넣을 수도 있습니다. 넣은 조건만 걸리게 하는 (:p IS NULL OR col = :p) 패턴, 값을 문장에 붙이지 않는 바인드 변수, 개수가 변하는 IN 목록, 정렬 컬럼 선택까지 한 번에 봅니다. NVL(:p, col) 로 줄여 쓰면 col 이 NULL 인 행이 빠지는 함정을 실행으로 확인합니다.

1. 왜 배우는가

목록 조회 화면은 거의 다 조건이 선택입니다. 사용자가 이름만 넣기도 하고, 부서와 상태를 함께 넣기도 하고, 아무것도 안 넣고 전체를 보기도 합니다. 조건 조합마다 SQL 을 따로 만들 수는 없으니 하나의 문장이나 조립 방식이 필요합니다.

이 작업에는 함정이 세 가지 있습니다. 조건을 줄여 쓰다가 NULL 행이 빠지는 것, 값을 문자열로 이어 붙여 SQL 인젝션 구멍이 생기는 것, 정렬 컬럼을 그대로 받아 넣는 것입니다. 셋 다 결과가 그럴듯해 보여서 운영에서야 발견됩니다.

이 레슨은 SQL 쪽 패턴을 예제로 실행해 보고, 애플리케이션 쪽 MyBatis 동적 SQL 은 조각 하나로만 짚습니다. 자세한 MyBatis 는 실무 프로젝트 "백엔드 04 MyBatis 다중 DB" 레슨에서 다룹니다. 중급 06 NULL 처리 함수와 중급 05 CASE 를 알면 쉽게 읽힙니다.