条件1 = 0可用于阻止查询返回任何行。它返回空集。
语法如下:
SELECT * FROM yourTableName WHERE 1=0;
为了理解以上语法,让我们创建一个表。创建表的查询如下:
mysql> create table ConditionDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(10),
-> PRIMARY KEY(Id)
-> );
使用insert命令在表中插入一些记录。查询如下:
mysql> insert into ConditionDemo(Name) values('Larry');
mysql> insert into ConditionDemo(Name) values('Sam');
mysql> insert into ConditionDemo(Name) values('Mike');
mysql> insert into ConditionDemo(Name) values('Carol');
mysql> insert into ConditionDemo(Name) values('John');
mysql> insert into ConditionDemo(Name) values('Bob');
使用select语句显示表中的所有记录。查询如下:
mysql> select * from ConditionDemo;
以下是输出:
+----+-------+
| Id | Name |
+----+-------+
| 1 | Larry |
| 2 | Sam |
| 3 | Mike |
| 4 | Carol |
| 5 | John |
| 6 | Bob |
+----+-------+
6 rows in set (0.00 sec)
这是查询,以防止查询返回任何行
mysql> select *from ConditionDemo where 1=0;
Empty set (0.00 sec)
where 1=1始终为true,在构造动态sql语句时,能够保证查询语句恒正确。
where 1=0; 这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表。
动态sql语句的一些问题
string MySqlStr="select * from table where";
if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“Age="+"'Age.Text'";
}
if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+"and Address="+"'Address.Text'";
}
如果两个if语句均不成立,那么MySqlStr动态构造语句就变成了:
MySqlStr=”select * from table where”
这是一条错误的语句,不能被执行,会报错,这并不是一种好的编码方式,不够棒。
使用where 1=1语句后
string MySqlStr="select * from table where 1=1";
if(Age.Text.Lenght>0)
{
MySqlStr=MySqlStr+“and Age="+"'Age.Text'";
}
if(Address.Text.Lenght>0)
{
MySqlStr=MySqlStr+"and Address="+"'Address.Text'";
}
若两个if不成立,MySqlStr语句就变成了:
MySqlStr="select from table where 1=1;
该语句语法正确,它的作用相当于:MySqlStr=”select * from table;,被执行后,返回表中所有数据。意思就是,用户在多条件查询时,不输入任何条件,就会返回表中所有数据。
where 0=1 和 where 1=0 语句;
这个条件始终为false,结果不会返回任何数据,只有表结构,可用于快速建表
该select语句主要用于读取表的结构而不考虑表中的数据,这样节省了内存,因为可以不用保存结果集。
SELECT * FROM strName WHERE 1 = 0;
创建一个新表,而新表的结构与查询的表的结构是一样的。
create table newtable as select * from oldtable where 1=0;