Mysql not in查询返回为空

Mysql not in查询返回为空,第1张

这个问题的根源在于null。

众所周知,当判断一个值是否为null的时候,sql要用is null 或者is not null, 在SQL中,Null值并不是一个值,而是表示特定含义,其所表示的含义是“Unknow”,可以理解为未定义或者未知,因此任何与Null值进行比对的二元 *** 作符结果一定为Null,包括Null值本身。

解决:

all_student表是所有的学生信息,fail_student表是不及格的学生信息

select * from all_student

select * from fail_student

查询及格的学生信息

select * from all_student

where name not in (

select name from fail_student

)

假如fail_student有一条name为null的记录

再次查询及格的学生信息,结果集为空

select * from all_student

where name not in (

select name from fail_student

)

解决方案

1.修改表结构,设置name字段为not null,并设置默认值

2.修改sql为

select * from all_student a

left join fail_student f on a.name = f.name

where f.name is null

出现在select语句中的select语句,称为子查询或内查询。

外部的select查询语句,称为主查询或外查询。

测试数据比较多,放在我的个人博客上了。

浏览器中打开链接:http://www.itsoku.com/article/196

mysql中执行里面的 javacode2018_employees库 部分的脚本。

成功创建 javacode2018_employees 库及5张表,如下:

运行最后一条结果如下:

in,any,some,all分别是子查询的关键词之一。

in :in常用于where表达式中,其作用是查询某个范围内的数据

any和some一样 : 可以与=、>、>=、<、<=、>结合起来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的任何一个数据。

all :可以与=、>、>=、<、<=、>结合使用,分别表示等于、大于、大于等于、小于、小于等于、不等于其中的其中的所有数据。

下文中会经常用到这些关键字。

运行结果:

not in的情况下,子查询中列的值为NULL的时候,外查询的结果为空

建议:建表是,列不允许为空。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8318548.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存