数据库中重复值和空值的处理
上一篇 / 下一篇 2012-09-27 09:49:42 / 个人分类:数据库
在一些情况下,如要查询数据中的几个字段,此时就有可能产生重复记录,而重复的记录是不符合规范的,数据表是现实世界的客观反映,因此,空值的产生是不可避免。
!C5h4R)U}S6]07jp-h5~R!yz0 1、查询时不显示重复记录51Testing软件测试网-}7B^8pnt b
:bF&T#IO"I9P0ra0 在实现查询操作时,如果查询的选择列表中包含一个表的主键,那么每个查询结果中的记录将是唯一的,如果主键不包含在查询结果中,就可能出现重复记录.使用Distinct关键字可以消除重复记录。51Testing软件测试网;wb|#V][._
&R5J"f-u4^ar0 Distinct关键字可从SQL语句结果中除去重复的行,如果没有指定DISTINCT关键字,那么将返回所有行,包括重复的行。
#k(q2Afq5j4k0v!N+fT _d0 在使用DISTINCT关键字去除重复记录时,需将DISTINCT关键字放在第一个字段名之前。
hN%OyQ;K/L051Testing软件测试网a:zw?8EDISTINCT的语法:Select [disinct|all]select_list
%qU-pV&{'g#k!r051Testing软件测试网)[#n&jP;qdG注意:
H3bRGNmQg Vd2c05];K~*Mn'p{;Y&z0 (1)在select列表中只能使用一次distinct关键字,不要在其后添加逗号。51Testing软件测试网z{5f(q"htL
[@a4la5i3U0 (2)如果省略了distinct关键字,查询结果中不会消除重复的记录,也可以指定all关键字来明确保留重复记录,此项为默认的行为。
%l Ez6[X;f A"y-f#Tf051Testing软件测试网(\e'S5O2aba/h*p k^(3)distinct关键字并不是指某一行,而是指不重复select输出的所有列。51Testing软件测试网;{*T2es)O;AG(Y
%d/H2?/S+TG'Lj0 (4)distinct是sum,avg和count函数的可选关键字,如果使用distinct关键字,那么在计算总和,平均值或计数之前,先消除重复的值。51Testing软件测试网:]K8Li!b
51Testing软件测试网-Ba/JH?*HP例如:显示不重复的内容51Testing软件测试网+f\']S:_ G"c9Q gM
51Testing软件测试网U7~ ]v:zD;c*?Mselect distinct 书号,书名,作者,出版社 from tb_BookSell order by 书号
n H`e9y!|M9r9o2n02、列出数据中的重复记录和记录条数
1f\s \!h6Ho0通过HAVING子句为组指定条件.通过作为一个整体的组指定条件,可限定查询中出现的组.在对数据进行分组和聚集后,将用到having 子句中的条件,中有符号条件的组才会出现在查询中。
jRf[K!k0例如:查询重复的书籍
U$tr NS \h0select 书名,书号,作者,COUNT (书名) as 重复数量from tb_BookSell group by 书名,书号,作者 having count(书名)>=251Testing软件测试网W)pB#|(gB
+];[2`{3R|%{0 3、取记录中指定字段的空值51Testing软件测试网9a J.DRL7Rs L-m0u
i+D;W-j'V0e^2I-M0 NULL 代表的是一个未知的值,在查询数据时,想要找出字段值是NULL 的记录时,可以用is NULL 来判断NULL 值。
ar:^9G*mLbpg0#?v4U:[!|+X't K0 例如:查找出NULL 值51Testing软件测试网(u+Y4c/W'^
51Testing软件测试网+_Q$L3a&x j4Vselect 学生姓名,所在学院,备注信息 from tb_stuInfo where 备注信息 is null
Q p*`~(^'q3H04、除去记录中指定字段的空值
1]^v,]/C x0{bk#L8Z0在3的时候说过如何查找数据中的空值,那么我们如何能把这些空值去掉呢?
#v+T,d[ }'u*M0想要去掉空值,先要了解一下列中空值形成的原因:
!c"kG(zDq/J0[F`01)其值未知51Testing软件测试网k2pr Sx
2)其值不存在51Testing软件测试网 ?Q*?$B*pw
3)列对表行不可用51Testing软件测试网"~qY!Ax!~x)?
例如:查询没有NULL值的数据
%z*W*K!g!t*K~0select 学生姓名,所在学院,备注信息 from tb_stuInfo where 备注信息 is not null51Testing软件测试网5|!a"xP!j9|6[7Wr
5、在程序的显示中判断是否为空值51Testing软件测试网 I\-zrsYL-t#J
在使用 MSHFlexGrid1控件显示查询的结果,如果在数据库表中是空值的话,就会显示"无用null值",那我们如何判读是否为null值呢 ,这就需要一个函数____ISNULL 函数。51Testing软件测试网$E Y8\ s^9G|`
我们就以一个例子来看看:
&L%n'I7H?+~0在没有今天没有结账的情况下,查询今天的结账情况:
(?8o}2]P&g0 select sum(Presentaddcash) as Presentaddcash,sum(Presentconsume) as Presentconsume, _
+?8p|d&d