SQL高级查询

Posted wanghj-15

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL高级查询相关的知识,希望对你有一定的参考价值。

本文主要是对下图的查询方式的条件判断进行讲解:

技术图片

如果还有更多的查询条件,只要在下面方法中加入相对应的字段,然后添加相应的get和set方法,最后在

getQueryCondition方法中加入相对应的条件判断语句if就可以了。
public class SqlCondition {
    
    //职位:用于查询的条件判断
    private String  title;
    //职位类型:用于查询的条件判断
    private Integer positiontype;
    
    public SqlCondition() {
        super();
    }
    
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Integer getPositiontype() {
        return positiontype;
    }

    public void setPositiontype(Integer positiontype) {
        this.positiontype = positiontype;
    }
    
    /**
     * 查询语句的条件判断
     * 方法一(推荐使用):
     */
    public String getQueryCondition_01(){
        String whereSql="";
        if(title !=null && !"".equals(title)){
            whereSql += " and title like ‘%"+title+"%‘";
        }
        if(positiontype!=null && !"".equals(positiontype)){
            whereSql+=" and positiontype = "+positiontype;
        }
        //replace:替换;First:第一个
        return whereSql.replaceFirst("and", "where");
    }
        
     /**
     * 查询语句的条件判断
     * 方法二(不推荐使用): where 1==1 会影响查询的性能
     */
    public String getQueryCondition_02(){
        String  whereSql = "where 1==1";

        if(title != null && !"".equals(title)){
            whereSql+= "and title like ‘%"+title+"%‘";
        }
        if(positiontype !=null){
            whereSql += "and positiontype = " +positiontype;
        }

        return whereSql;
    }

    /**
     * 查询语句的条件判断
     * 方法三(准备一个标识(即一个flag)
         如果标识是true,条件前就加where,如果是false,条件前就加and):
     */
    public String getQueryCondition_03(){
        //标识:flag
        boolean flag = true;
        String whereSql = "";
        //title不为null,并且不为空字符串
        if(title!=null && !"".equals(title)){
            if(flag){
                whereSql+= " where ";
                flag = false;
            }else{
                whereSql+= " and ";
            }
            whereSql += " title like ‘%"+title+"%‘ ";
        }
        if(positiontype!=null){
            if(flag){
                whereSql+= " where ";
                flag = false;
            }else{
                whereSql+= " and ";
            }
            whereSql += " positiontype = "+positiontype;
        }
        return whereSql;
    }

    /**
     * 查询语句的条件判断
     * 方法四(准备一个集合):
     */
    public String getQueryCondition_04(){
        //准备一个集合(里面会装咱们的所有条件)
        List<String> sqlList = new ArrayList<>();

        String whereSql = "";
        //title不为null,并且不为空字符串
        if(title!=null && !"".equals(title)){
            sqlList.add(" title like ‘%"+title+"%‘ ");
        }
        if(positiontype!=null){
            sqlList.add(" positiontype = "+positiontype);
        }
        //查询条件加多了,只要在这加if语句就可以了
        //遍历这个集合
        for (int i = 0; i < sqlList.size(); i++) {
            if(i==0){
                //第一次循环,前面肯定是加where
                whereSql += " where ";
            }else{
                //第2-n次循环,前面肯定是加and
                whereSql += " and ";
            }
            whereSql += sqlList.get(i);
        }

        return whereSql;
    }

最后在需要的SQL语句中引入条件判断方法即可。

 

四种方法特点分析:

  方法一:比较简单,容易看懂,不会影响查询性能,推荐使用。

  方法二:虽然比方法一少了几个代码,但 where == 1在sql查询中会影响查询性能,不建议使用。

  方法三:代码比较多,容易写错。

  方法四:比较难理解,使用相对其它几个方法比较麻烦。

 

以上是关于SQL高级查询的主要内容,如果未能解决你的问题,请参考以下文章

sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li

.NET Entity Framework(EF)使用SqlQuery直接操作SQL查询语句或者执行过程

sql mysql查询/ db片段

sql注入高级

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

SQL笔记--MySQL高级操作