深入理解SQL语句中常出现的where 1=1
2016-01-19 17:09
232 查看
本文主要参考 http://bbs.csdn.net/topics/310082591 和 http://www.jb51.net/article/38062.htm
现在进入正题:
加入where 1=1,既是where 的条件成立,为永真,得到的结果就是未加约束条件的。为了动态SQL中连接and条件。
where后面总要有语句,加上了1=1后就可以保证语法不会出错!
假如后面确定有条件语句,就可以不用1=1; 不能确定where后面是否有语句的时候就要加上1=1了,当没有其他条件语句时候,还有1=1,就不会输错了 。
例1: SQL="SELECT * FROM TABLE WHERE 1=1 "&WHERE_STR
WHERE_STR是根据前面填入的得到的一个串.这样就不用管是否为空,都不会出现错误.就这点技巧了。
就是说:1=1永真条件,一般用于构造动态SQL语句,"SELECT ... FROM ... WHERE 1=1 "+动态构造条件子句。
如果不写1=1呢,那么在每一个不为空的查询条件面前,都必须判断有没有where字句,否则要在第一个出现的地方加where
if(!name.equals("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}
where 1=1的写法是为了检化程序中对条件的检测
例2:打个比方有三个参数a, b, c
@sql=select * from tb'
这三个参数都可能为空
这时你要构造语句的话,一个个检测再写语句就麻烦
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
这里你怎么写?要不要加where 或直接用 and ?,你这里还要对@a是否为空进行检测
用上 where 1=1 之后,就不存在这样的问题, 条件是 and 就直接and ,是or就直接接 or
拷贝表 create table_name as select * from Source_table where 1=1;
复制表结构 create table_name as select * from Source_table where 1 <> 1;
例3:
String sql = "select * from " + DB_TABLENAME + " where 1=1 and (name like '%" + condition + "%' " +
"or mobilephone like '%" + condition + "%' or familyphone like '%" + condition + "%' " +
"or officephone like '%" + condition + "%')" + strSelection;
加上where 1=1 之后,就可以直接使用and 和or 语句了,不怕出现语法错误了~~~
2016.1.19晴,冷,心情little down~
现在进入正题:
加入where 1=1,既是where 的条件成立,为永真,得到的结果就是未加约束条件的。为了动态SQL中连接and条件。
where后面总要有语句,加上了1=1后就可以保证语法不会出错!
假如后面确定有条件语句,就可以不用1=1; 不能确定where后面是否有语句的时候就要加上1=1了,当没有其他条件语句时候,还有1=1,就不会输错了 。
例1: SQL="SELECT * FROM TABLE WHERE 1=1 "&WHERE_STR
WHERE_STR是根据前面填入的得到的一个串.这样就不用管是否为空,都不会出现错误.就这点技巧了。
就是说:1=1永真条件,一般用于构造动态SQL语句,"SELECT ... FROM ... WHERE 1=1 "+动态构造条件子句。
如果不写1=1呢,那么在每一个不为空的查询条件面前,都必须判断有没有where字句,否则要在第一个出现的地方加where
if(!name.equals("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}
where 1=1的写法是为了检化程序中对条件的检测
例2:打个比方有三个参数a, b, c
@sql=select * from tb'
这三个参数都可能为空
这时你要构造语句的话,一个个检测再写语句就麻烦
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
这里你怎么写?要不要加where 或直接用 and ?,你这里还要对@a是否为空进行检测
用上 where 1=1 之后,就不存在这样的问题, 条件是 and 就直接and ,是or就直接接 or
拷贝表 create table_name as select * from Source_table where 1=1;
复制表结构 create table_name as select * from Source_table where 1 <> 1;
例3:
String sql = "select * from " + DB_TABLENAME + " where 1=1 and (name like '%" + condition + "%' " +
"or mobilephone like '%" + condition + "%' or familyphone like '%" + condition + "%' " +
"or officephone like '%" + condition + "%')" + strSelection;
加上where 1=1 之后,就可以直接使用and 和or 语句了,不怕出现语法错误了~~~
2016.1.19晴,冷,心情little down~
相关文章推荐
- Redis-3.0.6 集群部署集成SpringJava工程-----spring集成
- 数据库——常用函数
- 007-LAMP_MySQL_DDL
- Redis 键(key)
- MySql初步
- mysql zip版安装(笔记)
- redis 界面软件使用
- oracle数据库中,分天查询数目
- 使用sqlcmd备份还原sqlserver数据库
- Redis-3.0.6 集群部署集成SpringJava工程-----环境搭建
- Mysql表结构
- mysql恶补_约束1
- redis在window下的安装启动
- C#连接MSSQL数据库
- Redis EXISTS命令耗时过长case排查
- 一些数据库函数记录
- MongoDB增删查改
- MySQL外键的设置及作用
- MySQL存储引擎比较
- SQL按每日查询