SQL语句里 where 1=1 的意义

[SQL] 季雨林 2018/11/19 15:17:42

        SQL语句最终都是字符,但是符合了一定得标准,因此可以被数据库引擎解析。

        其中,有种写法很常见: where 1=1

        这种恒等式,似乎没多大意义,实际上却可以做到简化拼写规则。很多程序,无论使用何种架构,最终都是在拼接sql语句。因此,对于一般的查询语句 select * from table where column='value'的写法中,可能很多时候不需要where,但是为了方法复用。

        我们举例, 封装的程序层代码为 :

public static DateSet getList(string columnName, string tableName , string wheresql){
    //其他逻辑
    string sqlStr = string.format("select {0} from {1} where 1=1 {2}"
        ,columnName
        ,tableName
        ,wheresql);
  //其他逻辑
}

        参数解释:

columnName //查询列名,用于sql语句的 select 之后, from之前的部分;
tableName //表名,用于拼接sql语句的from之后,where 之前的部分;
wheresql //条件,用于拼接 where 1=1 之后的部分。
//这里where 1=1便发挥统一规范作用:所有拼接都要带and 或者or 关键字开头;

        

        例子一:不需要条件

        程序上看到的语句:select * from table

        实际拼接后执行是:select * from table where 1=1

        程序中调用方法: getList(“*”, "table" ,"")//查询所有列,表名为table,条件为空字符


        例子二:需要一个条件

        程序上看到的语句:select * from table where col1 = 'value1'

        实际拼接后执行是:select * from table where 1=1 and col1 = 'value1'

        程序中调用方法: getList(“*”, "table" ," and col1 = 'value1' ")//查询所有列,表名为table,条件为col1 = 'value1'


        例子二:需要两个或者多个条件

        程序上看到的语句:select * from table where col1 = 'value1' and col2 = 'value2'

        实际拼接后执行是:select * from table where 1=1 and col1 = 'value1' and col1= 'value2'

        程序中调用方法: getList(“*”, "table" ," and col1 = 'value1' and col1= 'value2' ")//查询所有列,表名为table,条件为col1 = 'value1' and col1=2 = 'value2'



原文地址: https://www.opengps.cn/Blog/View.aspx?id=213 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

鲁ICP备14008001号-2