sql细节之and和or的使用

sql细节之and和or的使用

说明:

之前项目对表有复杂的条件筛选,后面必须通过or和and连接,当时出现了bug,但是好久了,具体什么情况,已经忘了,

但是知道and和or使用需要稍微小心

1.数据库脚本

# 建表语句
CREATE TABLE `demo` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL DEFAULT '' COMMENT '用户名',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;



# 插入测试数据
insert into demo (id , name , create_time , update_time) values(null , 'root','2020-01-01 22:22:22','2020-02-02 22:22:22');
insert into demo (id , name , create_time , update_time) values(null , 'admin','2020-01-01 22:22:22','2020-02-02 22:22:22');
insert into demo (id , name , create_time , update_time) values(null , 'zs','2020-01-01 22:22:22','2020-02-02 22:22:22');

2.普通查询全表

select * from demo;

±—±------±--------------------±--------------------+
| id | name | create_time | update_time |
±—±------±--------------------±--------------------+
| 1 | root | 2020-01-01 22:22:22 | 2020-02-02 22:22:22 |
| 2 | admin | 2020-01-01 22:22:22 | 2020-02-02 22:22:22 |
| 3 | zs | 2020-01-01 22:22:22 | 2020-02-02 22:22:22 |
±—±------±--------------------±--------------------+
3 rows in set (0.000 sec)

3.全部使用and进行查询

3.1 and的使用

3.1.1 and前后结果都为真
select * from demo where 1=1 
select * from demo where 1=1 and 2=2

查出数据

3.1.2 and前后数据都为假
select * from demo where 1 = 2 and 1=2

查不出数据

3.1.3 and前后有至少一个结果为假
select * from demo where 1=1 and 1=2
select * from demo where 1=2 and 1=1
select * from demo where 1=2 and 1=2

查不出数据

说明

and连接查询条件有一个为假就查不出数据

3.2 or的使用

3.2.1 or前后结果都为真
select * from demo where 1=1
select * from demo where 1=1 or 1=1

查出数据

3.2.2 or前后结果都为假
select * from demo where 1=2 or 1=2

查不出数据

3.2.3 or前后结果至少一个结果为假
select * from demo where 1=1 or 1=2
# 查出数据
select * from demo where 1=2 or 1=1
# 查出数据
select * from demo where 1=2 or 1=2
# 查不出数据

3.3 or和and混合使用

select * from demo where 1=1 or 1=2 and 1=2
# 查不出数据
select * from demo where 1=2  or 1=1 and 1=1;
# 查出数据
select * from demo where 1=1 and (1=1 and 1=2);
 # 查不出数据
select * from demo where 1=1 or (1=2 and 1=2);
# 查出数据

4.总结

and前后条件都为真结果才为真

or前后条件一个为真结果就为真

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值