sql내에서 여러곳에서 하나의 쿼리를 사용할 때 WITH AS절을 사용하지만, Mybatis에서 여러 select 쿼리에서 동일한 쿼리를 사용하고 싶다면 <sql> 태그를 사용하여 공통 쿼리를 사용 가능하다.
공통 쿼리 정의
<sql id="BaseSelect">
SELECT id, name, age
FROM users
WHERE status = 'active'
</sql>
공통 쿼리 사용
<select id="selectActiveUsers" resultType="User">
<include refid="BaseSelect"/>
</select>
<select id="selectUsersByName" resultType="User">
<include refid="BaseSelect"/>
AND name = #{name}
</select>
incldue refid를 통해 사용
추가적으로 select문이 아니라 특정 쿼리(WHERE 절)만 공통 쿼리로 분리할 수도 있다.
<sql id="BaseWhereConditions">
WHERE status = #{status}
<if test="startDate != null">
AND created_date >= #{startDate}
</if>
<if test="endDate != null">
AND created_date <= #{endDate}
</if>
</sql>