查询SQL一般涉及多个表查询,不同的条件可能作用在不同表的不同列上,为求SQL拼写简单,在不太影响效率情况下,不管是否需要添加查询条件,from后的表和where的表关联条件总是保留。
select t1.col1,t2.col2,t3.col3, t1.col from t1,t2,t3 where t1.id1 = t2.id1 and t2.id2 = t3.id2 and t1.col1 = ? and t2.col2 between ? and ? and t3.col3 in(?,?,?,?) and t1.col like ?
1、查询条件为全部
单表查询时where后可能一个条件也没有,一般地在第一个条件加上1 = 1,之后每个条件都是“and col = ?”
假设前端条件在选择全部时传的是一个空格,每个条件可写成(' ' = ? || col1 = ?)
2、查询条件为多选
多个条件常见的是使用in,考虑到需要使用PreparedStatement,只能在sql中根据条件个数拼问号;
可考虑每个条件用逗号包围使用instr函数instr(?, ','||t3.col3||',') > 0,假设前端条件在选择全部时传的是一个空格,为了不用动态构造dao.query(sql,new Object[]{})中的参数数组,instr条件后的>0改为>" + (" ".equals(p) ? -1 : 0)使条件总是成立。
3、查询条件需模糊
左模糊like '%xxx'、右模糊like 'xxx%'或左右模糊like '%xxx%',根据模糊需要在查询条件字符串前后先拼上%,sql中仍使用问号