关于查询时一定不要给MySQL语句where后字段(列名)加引号的说明

今天要做个实验,碰到了在查询时,给where语句中,紧跟where的字段加了引号,导致结果和预期不符的问题,经过偶然的对粘到记事本中的病句的查看,突然想到了老师说过的一句话,在查询语句中,带引号的都是常量这句话,解答了遇到的问题是如何产生的原因。
先看,实验,最后,总结时候说明原委。
有一个 TSubject 表,
mysql> select * from TSubject;
在这里插入图片描述
请注意,这个表里有部分记录的个别列是空值。
现在,新建了一个表,ST
mysql> create table ST(subjectid varchar(10),subjectname varchar(30));
在这里插入图片描述

在这里插入图片描述

现在,要练习使用命令 mysql> insert into ST(subjectid,subjectname) select subjectid,subjectname from TSubject;将需要的列的值,从 TSubject 复制到 ST 表中。
在这里插入图片描述

在这里插入图片描述
没有问题,9条记录全过来了,
现在,增加难度,把 TSubject 表中 publisher 字段值为 非空的记录 复制到 ST 表中,共5条记录。
在这里插入图片描述
为确保实验不受影响,先删除 ST 表 中原有的数据,
mysql> truncate ST;
在这里插入图片描述

环境搭建好,开始实验,
mysql> insert into ST(subjectid,subjectname) select subjectid,subjectname from TSubject where ‘publisher’ is null;
在这里插入图片描述
命令成功了,但随之问题也出现了,
结果中,显示了 9 条记录,而我们在 where 中 已经指定了 字段 publisher 非空,正常返回的结果应该是 5 条才对,
这是为啥捏?

再次恢复实验环境,
mysql> truncate ST;
在这里插入图片描述

这次把 where 后的字段名 去掉引号试试,
mysql> insert into ST(subjectid,subjectname) select subjectid,subjectname from TSubject where publisher is not null;
在这里插入图片描述
没问题,返回的就是我们需要的 在 TSubject 表中 publisher 字段 值 不为空的 那 5 条记录。

从上面的实验可以看出来,问题就出在 where 后边 字段名 是否有引号包裹上了,
开篇中提到了,老师讲过,在查询语句中,不管什么类型的数据,只要被引号包裹起来,带着引号的它就变成了,常量,而常量永远都不为空的,
所以,where ‘publisher’ is not null 就等价成了 where true,就是 1
在这里插入图片描述

实际上 where ‘publisher’ is not null 在这里不起任何作用

最后,
mysql> insert into ST(subjectid,subjectname) select subjectid,subjectname from TSubject where publisher is not null;
就和
mysql> insert into ST(subjectid,subjectname) select subjectid,subjectname from TSubject 一样了。

总结,在指定查询条件时, where 后的 字段 一定不要使用括号括起来,那样的话,这个字段就失去了其本身是代表table 列的意义,变成了一个常量,而 where 后接一个 常量 是没有什么意义的。

补充
在这里插入图片描述
where 接 常量 没有意义,

January the 13th 2022 Thursday

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值