关于排除null空值的查询?

salecn 2007-10-24 11:16:12
成绩表
学号 课程 成绩 备注
0001 计算机 80 补考
0002 物理 90 2006年补考
0003 软件工程 70 null
0004 c语言 60 null


要求:查询出备注不包含 补考 的成绩?

(select * from 成绩表 where 备注 not like '%补考%' 这样查询不出来)

一般这种包含null空值的字段,使用不包含 某值 查询是通过什么方法啊?
...全文
504 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mugua604 2007-10-25
  • 打赏
  • 举报
回复
ISNULL
lixueming3000 2007-10-25
  • 打赏
  • 举报
回复
create table tb(学号 varchar(10),课程 varchar(20),成绩 varchar(20),备注 varchar(20))
insert into tb values('0001', '计算机','80', '补考 ')
insert into tb values('0002', '物理', '90 ' , '2006年补考')
insert into tb values('0003', '软件工程', '70 ', null)
insert into tb values('0004', 'c语言', '60', null)


select * from tb where isnull(备注, ' ') not like '%补考% '

/*
学号 课程 成绩 备注
---------- ----------- --------------------
0002 物理 90 2006年补考
0003 软件工程 70 NULL
0004 c语言 60 NULL
*/
pt1314917 2007-10-25
  • 打赏
  • 举报
回复
select * from 成绩表 where isnull(备注, ' ') not like  '%补考% ' 
cxmcxm 2007-10-25
  • 打赏
  • 举报
回复
用isnull函数
javavista 2007-10-25
  • 打赏
  • 举报
回复
use grade //成绩表为grade
go
select * from grade where 备注 not like '补考%'
//结果为:
学号 课程 成绩 备注
----------- ---------- ----------- ----------
0002 物理 90 2006年补考
0003 软件工程 70 null
0004 C语言 60 null
sp4 2007-10-25
  • 打赏
  • 举报
回复
select * from 成绩表 where isnull(备注,'') not like '%补考% '
renzhe02 2007-10-25
  • 打赏
  • 举报
回复
楼上正解啊
fcuandy 2007-10-24
  • 打赏
  • 举报
回复
如果用charindex的话,可以直接写为
select * from tb where isnull(charindex('补考', 备注),0)=0
vchao13 2007-10-24
  • 打赏
  • 举报
回复

select * from 成绩表 where charindex('补考', 备注)=0 or (备注 is null)
fcuandy 2007-10-24
  • 打赏
  • 举报
回复
where isnull(备注,'') not like '%补考%'

或者

where 备注 not like '%补考% ' or 备注 is null
【源码免费下载链接】:https://renmaiwang.cn/s/zrcae 相信有很多MySQL资深用户对其字段属性的概念仍存疑惑,以下是一系列问题:为何允许非null字段存储空值?允许null的字段在判断不为空时应采用何种条件表达式(如`IS NULL`或`<> ''`)?这些疑问促使我们深入探讨null与not null之间的差异。首先,我们需要澄清“空值”和“null”的概念:在MySQL中,“空值”通常指用户未输入数据的字段值,而“null”是一个特殊的数据库保留值,表示信息缺失。尽管两者都代表数据不存在的情况,但它们在存储方式上存在显著区别。“空值”不占用数据库存储空间,而“null”则会占用一个位来标识是否为null值(尤其适用于MyISAM表)。此外,在字段约束方面,“非null”类型禁止插入null值,必须存入有效数据;允许null的字段则可存储null或其它合法数据。关于性能优化,使用“non null”约束通常优于“null”,因为后者在索引和查询时需进行额外处理。“null”值不会被B树索引包含,可能影响查询效率;而“<> ''”条件虽然能检测空字符串,但无法排除null值。因此,在判断字段是否为空时应优先选择`IS NULL`操作符而非“<>”。例如,“WHERE col1 IS NOT NULL”将准确返回非null记录,而“WHERE col1 <> ''”仅过滤空字符串而不包含null值。在涉及计数操作时,函数`COUNT(*)`会自动忽略null值但包括空字符串;若需统计所有非null记录数量,则应使用该函数。此外,在处理可能为null的字段数据时可采用`IFNULL()`函数进行默认值填充,例如“IFNULL(column, default_value)”。对于特殊类型如TIMESTAMP,插入null可能导致无效时间戳(如“0000

34,872

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧