select * from table where in,sql语句select from where
http://www . Zhang ping Yong . com/database-SQL-select-from-table-where . html
http://blog.sina.com.cn/s/blog_4c1c63910100r9qz.html
这是什么样的查询语句?首先,1=1不是查询语句中的任何关键字,所以请放心,你用不用这个语句都没关系,对你来说没有任何损失。
另外,很多网站都有select * from table where 1=1这样的语句介绍。而且对于这种说法,真的很混乱(一个抄一个,很可笑),也不知道自己在说什么,导致很多新手都没有抓住重点,所以对此很苦涩。
本文致力于为你解读这句话。看完这篇文章,你会拨开云雾。
我们先来看这个语句的结果:select * from table where 1=1,其中where 1=1,由于1=1始终为真,返回TRUE,条件为真;因此,该语句相当于select * from table,返回查询表中的所有数据。
第一,多条件查询不使用where 1=1的麻烦
比如你做一个查询页面,有多个选项可以查询,同时允许用户自己选择输入查询关键字,那么根据平时查询语句的动态结构,代码如下:
string MySqlStr=" select * from table where ";
如果(年龄。文本长度0)
{
MySqlStr=MySqlStr "Age=" "Age。文本“”;
}
如果(地址。文本长度0)
{
MySqlStr=MySqlStr "和Address=" 地址。文本“”;
}
假设
如果上面两个IF判断语句都为真,即用户输入了查询词,那么最终的MySqlStr动态构造语句就变成了:
MySQL=" select * from table where age= 18 and address=云南省文山州广南县小波莫村"
可以看出,这是一条完整正确的SQL查询语句,可以正确执行,并根据数据库中是否有记录返回数据。
假设
如果上述两个IF判断语句无效,那么最终的MySqlStr动态构造语句就变成了:
MySqlStr=" select * from table where "
现在,让我们来看看这个声明。因为where关键字后面需要条件,但是这个语句中根本没有条件,所以这个语句是错误的语句,一定不能执行。它不仅会报告错误,而且也不会查询任何数据。
以上两个假设代表实际应用,说明句子的构造存在问题,不足以应对灵活多变的查询条件。
二。使用where 1=1的好处
如果我们将上面的语句改为:
string MySqlStr=" select * from table where 1=1 ";
如果(年龄。文本长度0)
{
MySqlStr=MySqlStr "和Age=" "Age。文本“”;
}
如果(地址。文本长度0)
{
MySqlStr=MySqlStr "和Address=" 地址。文本“”;
}
现在,也有两种假设。
假设
如果两个IF都为真,则语句变为:
MySQL=" select * from table where 1=1年龄= 18 ,地址=云南省文山州广南县小波莫村 "。显然,这种说法是正确的,可以正确执行。如果数据库里有记录,肯定会被查询。
假设
如果两个IF都不成立,则该语句变为:
MySQL str=" select * from table where 1=1 "。现在,我们来看看这个声明。因为where 1=1是真语句,所以该语句具有正确的语法,并且可以正确执行。它的作用相当于:MySQL str="select * from table ",即返回表中的所有数据。
其含义是:如果用户在多条件查询页面中没有选择任何字段或输入任何关键字,将返回表中的所有数据;如果用户在页面中选择了一些字段并输入了一些查询关键字,那么将会根据用户设置的条件进行查询。
说了这么多,不知道大家有没有理解。其实where 1=1的应用并不是高级应用,也不是所谓的智能构造。只是为了满足多条件查询页面中的各种不确定因素,而构造一个能够正确运行的动态SQL语句的一种方式。
三。做多条件查询一定要用where 1=1吗?
不,如果你喜欢,你可以使用它。不喜欢就不用。对你来说,你没有什么可失去的,也没有什么可得到的。
那么,如果我不使用where 1=1进行多条件查询,我该如何构造一个动态查询语句呢?很简单,我给你一个思路:
以下声明:
string MySqlStr=" select * from table ";
如果(年龄。文本长度0)
{
QuerySqlStr=QuerySqlStr " Age=" Age。文本“”;
}
如果(地址。文本长度0)
{
QuerySqlStr=QuerySqlStr "和Address=" " 地址。文本“”;
}
if(QuerySqlStr。长度0)
{
MySqlStr=MySqlStr " where "+query sqlstr;
}
不管你用where 1=1做多条件查询,只要你能保证你构造的查询语句是正确的,就万无一失。
四。其中1=1的总结
一种“江湖手段”,用于构造复杂、正确的查询语句,具有动态、多条件和不确定因素。
一般这种方法在书本上并不常见,但在实际应用中,人们不得不从现实的角度考虑,即保证满足多条件查询和应对不确定因素的灵活性,最终保证语句中没有语法错误。
这是一个好方法。但是,因为这个where 1=1,我不知道让多少新手,琢磨了多少遍,还是不能说到点子上。同时可能会误导新手误入歧途;