2024年4月21日发(作者:)

谓词 

EXISTS的使用在实际的数据库应用系统开发中有着较 

为广泛的应用,其在SQL的教学、实践环节中也是学生比较 

难于理解和掌握的内容。但是,目前在大多数的教材和参考 

书上只是简单地通过一两个例子介绍了带有存在量词 

EXISTS的书写语句,并没有给出实质性的说明。本文根据 

作者多年的教学经验,总结出EXISTS在不同的场合下的使 

商品编号 

Slool 

裹3产品销售襄 

客户编号 

K0ool 

销售日期 

2010.O6.07 

销售数量 

20 

S1ool 

S1001 

S1002 

k0oo2 

k0o03 

kooO1 

kOo0l 

kOOO2 

KooOl 

2010-06.O8 

2010.O6-】O 

2010.06-07 

20l0.O6.07 

20lO.O6.O8 

20lO.O6.07 

30 

l1 

l 

9 

lO 

lO 

用情况,并以学生接触较多的实际案例为依托,在SQL 

Server环境下得到了验证。 

2.案例导入 

¥200l 

以网上商品销售系统的数据库为例,对EXISTS在不同 

场合的使用进行探讨,下面给出了数据库中的客户表、商品 

S200l 

S2oo2 

表、商品销售表。 

表1商品表 

S2oo2 k0oO3 20lO.O6.1O 12 

商品编号 

slo01 

s10o2 

s20o1 

商品名称 

精盐 

胡椒粉 

花生 

类别 

1 

1 

2 

单价 

50.OO 

40.00 

60.OO 

3.1语义中有“全是”的情况 

例:为了统计商品销售的情况,查询全是“女”客户购买 

的商品编号。 

问题分析:即在查找结果中的商品编号没有“男”客户购 

买过此商品。可以使用间接的方法,先求客户购买过的所有 

商品编号以及男客户购买的商品编号,两者再做差运算就可 

得到所求结果,这时使用SQL语句提供的组合查询minus, 

则设计查询语句如下: 

s2Oo2 苹果 2 80.O0 

表2客户表 

select distinct商品编号 

联系电话 客户号 客户名 性别 

k0o01 

k0oo2 

张三 

李四 

女 

男 

客户地址 

from商品销售表 

minus 

山西太原东湖友好公司 l3378905672 

陕西临潼好好乐公司 l3434269O56 

select distinct商品销售表.商品编号 

form商品销售表,客户表 

where商品销售表.客户编号=客户表.客户编号and性别 

k0o03 王五 女 山东淄博家福公司 l3189003353 

’男’ 

但在SQL Server 2005的环境下,分析语句后结果如图 

1所示。这是因为在SQL Server、MySQL在内的几种SQL产 

3.带有EXISTS的SQL语句的实例设计 

品的不同版本并不完全支持标准SQL提供的INTERSECT 

和MINUS两种操作。因此,我们必须寻求另外一种解决此 

我们知道,SQL语句并不提供语义中含有全称量词(For 

作者简介:肖海蓉,女,陕西泾阳人,硕士,讲师,研究方向:数据库技术及应用。 

。‘——

46・-—— 

问题的方法。可以把“全是”转换为等价的带有存在量词 

(EⅪSTS)的形式语义,其等价的语义为:查找这样的商品编 

号,不存在男客户也购买了此商品的情况存在。则设计的 

SQL语句如下: 

select distinct商品编号 

from商品销售表xsl 

where not exists(select from客户表 

where性别=’男’and exists 

(select 

rfom商品销售表xs2 

where xs2.客户编号=客户表.客户编号 

nad xs2.商品编号--xs1.商品编号)) 

需要注意的是:在含有“全是”语义中,不能用谓词IN 

来代替EXISTS,如果使用IN的话,则查询结果中会还有男 

女客户都购买的商品编号。当然,此类问题还可以使用--all 

谓词加以实现。 

图1使用minus分析结果 

图2使用EXISTS的执行结果 

3.2语义中有“全部”、“每个”或“至少包含”的情况 

例:为了统计不同客户购买商品的情况,查询购买过全 

部商品的客户名。 

问题分析:查询购买过全部商品的客户姓名,即找这样 

的商品名,不存在某一个商品他不购买的情况。通过等价的 

语义转换,同样可以把SQL语句设计成EXISTS的形式如 

下: 

select distinct客户名 

rfom客户表 

wherenot exists(select from商品表 

圈3 3.2执行结果 

同样,此类问题的SQL查询语句也不能使用IN代替 

EXISTS。 

3.3语义中有否定的“没有”、“未”的情况 

例:为了统计哪些商品未曾有过销售记录,求没有客户 

购买过的商品名。 

问题分析:没有客户购买过的商品名,即找这样的商品, 

在商品销售表中不存在该商品有销售记录。转换为等价的 

带有EXISTS的SQL语句如下 

select distinct商品名称 

rfom商品表 

where not exists(select 

rfom商品销售表 

where商品销售表.商品编号=商品表.商品编号1 

执行的结果如图4所示,由于本数据库中不存在哪个商 

品未销售过,所以执行结果为空。 

图4 3.3执行结果 

这种类型同样能够解决诸如“查询购买了那个商品,但 

没有购买另一种商品”的情况。 

3.4语义中有“既…又”、“并且”和“或”的情况 

例:查询购买了商品编号“sl001”,并且又购买了商品编 

号“s2002”的客户名。 

4.结束语 

在数据库原理课程的教学中,带有EXISTS的SQL查 

询语句一直以来是教学中的一个难点,也是学生最头痛的 

问题,文章以SQL Server 2005为实现环境,通过实际的案例 

研究,总结出在SQL语句的设计中,如何正确灵活地使用 

EXISTS的情况,更好地掌握SQL语句的书写技巧。 

参考文献: 

[1]李春葆,数据库原理及应用系统解析[M].北京:清华大学出版 

社.2002. 

[2]高荣芳等,数据库原理[M】.西安:西安电子科技大学出版社, 

2003. 

[3]苗雪兰等,数据库系统原理及应用教程[M】.北京:机械工业出 

版社.2007. 

[4]肖海蓉.SQL中分组查询的设计与应用[J].计算机与数字工 

程,2009,5:85—87. 

[5】肖海蓉.关系代数中“除法”运算与SQL中带有exists子查询 

的对比教学[J].电脑学习,2009,5:158-159. 

固5 3.4执行结果 

Research on Application of'‘EXISTS”in SQL 

Xiao Hairong 

(Shanxi University of Technology,Hanzhong 723000,Shanxi) 

【Ah 】To solve diifcult point of exists in practical use,speciifc applications of exists are studied.By actual case study 

analysis,how to design SQL query statements correctly with exists is summarized according to actual meaning in SQL Server 2005 

environment. 

【 哆_-DldB】EXISTS;SQL;SQL Server 

(上接第45页) 

The Design of the Virtual Human Animation Based on the Template 

Fang Xu 

(PLA Chongqing Communication College,Chongqing 400035) 

【^h血I吐】In this paper we present a template-based customization method for animation,and carry out a user-friendly naimation 

system.Using the template system to animating a character,we don’t have to do operations on the model directly,but control the 

parameters on the user pane1.We attach the animation template to any bipe skeleton model and modify the style of walking poses, 

for example,modiyf the stride,velociyt,and the arm swing extent. 

【 啊血】animation;template;virtual realiyt 

48—