数据库中重复值和空值的处理

上一篇 / 下一篇  2012-09-27 09:49:42 / 个人分类:数据库

51Testing软件测试网 Y'J:hC$gc*o9V

  在一些情况下,如要查询数据中的几个字段,此时就有可能产生重复记录,而重复的记录是不符合规范的,数据表是现实世界的客观反映,因此,空值的产生是不可避免。

!C5h4R)U}S6]0

7jp-h5~R!yz0  1、查询时不显示重复记录51Testing软件测试网-}7B^8pntb

:bF&T#IO"I9P0ra0  在实现查询操作时,如果查询的选择列表中包含一个表的主键,那么每个查询结果中的记录将是唯一的,如果主键不包含在查询结果中,就可能出现重复记录.使用Distinct关键字可以消除重复记录。51Testing软件测试网;wb|#V][._

&R5J"f-u4^ar0  Distinct关键字可从SQL语句结果中除去重复的行,如果没有指定DISTINCT关键字,那么将返回所有行,包括重复的行。

#k(q2Afq5j4k0

v!N+fT _d0  在使用DISTINCT关键字去除重复记录时,需将DISTINCT关键字放在第一个字段名之前。

hN%OyQ;K/L051Testing软件测试网a:zw?8E

  DISTINCT的语法:Select [disinct|all]select_list

%qU-pV&{'g#k!r051Testing软件测试网)[#n&jP;qdG

  注意:

H3bRGNmQg Vd2c0

5];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'S5O2a ba/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*?M

  select distinct 书号,书名,作者,出版社 from tb_BookSell  order by 书号

n H`e9y!| M9r9o2n0

51Testing软件测试网Iv:Cw(HFo G

  2、列出数据中的重复记录和记录条数

1f\s \!h6Ho0

  通过HAVING子句为组指定条件.通过作为一个整体的组指定条件,可限定查询中出现的组.在对数据进行分组和聚集后,将用到having 子句中的条件,中有符号条件的组才会出现在查询中。

jRf[K!k0

  例如:查询重复的书籍

U$tr NS \h0

  select 书名,书号,作者,COUNT (书名) as 重复数量from tb_BookSell  group by 书名,书号,作者 having count(书名)>=251Testing软件测试网W)pB#|(gB

51Testing软件测试网TLI,J(Fw!SkO

+];[2`{3R|%{0  3、取记录中指定字段的空值51Testing软件测试网9a J.DRL7R s 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 j4V

  select 学生姓名,所在学院,备注信息 from tb_stuInfo where 备注信息 is null

Q p*`~(^'q3H0

51Testing软件测试网6vBX!_`-\nbe

  4、除去记录中指定字段的空值

1]^v,]/C x0{bk#L8Z0

  在3的时候说过如何查找数据中的空值,那么我们如何能把这些空值去掉呢?

#v+T,d[ }'u*M0

  想要去掉空值,先要了解一下列中空值形成的原因:

!c"kG(z D q/J0[F`0

  1)其值未知51Testing软件测试网k2p r Sx

  2)其值不存在51Testing软件测试网 ?Q*?$B*pw

  3)列对表行不可用51Testing软件测试网"~qY!Ax!~x)?

  例如:查询没有NULL值的数据

%z*W*K!g!t*K~0

  select 学生姓名,所在学院,备注信息 from tb_stuInfo where 备注信息 is not null51Testing软件测试网5|!a"xP!j9|6[7Wr

51Testing软件测试网+t%@0F I?,M

  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&dv0  sum(Presentreturncash) as Presentreturncash,sum(Presentbalance)as Presentbalance, _
(nod%vx0  sum(Prioraddcash) as Prioraddcash  from  dayaccout_Info where  couutdate between'2012/9/17' and '2012/9/17'
51Testing软件测试网5Q!h"u yy ^Z

51Testing软件测试网&{.m.m!LW

  那么就用isnull函数来判断是否为NULL显示出来:51Testing软件测试网~1snW%?&Yr

$E]VLr|?-N b0
<SPAN style="FONT-SIZE: 18px"> '填写上期余额51Testing软件测试网D+F.@p8Oh6mrJA-i
        If Not IsNull(mrc.Fields("Prioraddcash").Value) Then51Testing软件测试网Tr+I7GuBhs
            TxtRemaincash.Text = mrc.Fields("Prioraddcash").Value51Testing软件测试网:Y6Fx+f^ e4g
        Else
-N Cp:s^ [_Cg2U0            TxtRemaincash.Text = 0
!pd|o(h{0        End If</SPAN>

  如果不是NULL 值的话,就显示当前的信息,如果是NUll值的话,就显示为0。

b[Z |6\;K(tj0

  如果对于空值和重复数据的处理,你 有更好地方法,我们一起交流!51Testing软件测试网 R#cf N.j7Hy


TAG:

 

评分:0

我来说两句

Open Toolbar