背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-105378.html    注册17xie 一起来写书 实现您的出书梦想!

2.4  DELETE语句

本章中要讲述的DELETE语句的形式或许是它们中最容易的一种。这里没有列的列表——只有一个表名,通常还有一个WHERE子句。其语法简单得不能再简单:

DELETE [TOP (<表达式>) [PERCENT]

[FROM ] <表名>

[FROM ] <表的列表/JOIN条件>

[WHERE <搜索条件>]

此处要小心对待的是两个FROM子句(不,这可不是印刷错误)。可以把这想成是类似于UPDATE的语句,其一用于说明要从中进行删除的表,第二个更像是一个真正的包含JOIN的FROM子句(如果你愿意),表面上看来是用于帮助决定要删除的行。

WHERE子句的作用与前面遇到的所有WHERE子句一样。这里不需要提供列的列表,因为删除的是整个行(也不可能删除半个行)。

由于第一个DELETE的形式非常简单,因此我们只演示一个简单的例子。这里要利用本章前面为联结所构建的样例。万一跳过了前面的例子,这里有构建那些表的代码。

如果在本章的前面已经构建了FULL JOIN的样例,则可以忽略这里的构建脚本,因为它们是完全一样的。

首先,选出Film表中的行,看看都有什么:

返回的结果正是在前面的构建脚本中插入的两个行:

从Film表中删除Unforgiven名称:

再执行SELECT语句:

可以看到确实删除了记录。

接下来进入到略为复杂的JOIN场景。现在,要从Actors表中删除所有在Film表中没有匹配行的那些行。该查询要涉及两个表(因此需要JOIN)。另外,它需要了解,在联结的一端没有相应的匹配(Film中没有一条记录能匹配那个演员)。

回想一下,OUTER联结将在没有匹配的一端返回NULL。这里将利用这一点,通过实际对NULL进行测试来找出没有匹配的行。

此处进度很快。如果你尚无多少基础知识,不妨放慢速度,在阅读本节前,先做些复习。相比前一个版本,本书假定读者具有更多的知识和经验,因此讲述速度很快。别着急,仔细阅读这些例子。

我们稍微跳过一点前面的语句,来看第二个FROM子句,可以看到这里使用了LEFT JOIN。该语句意味着将返回所有的演员。若有匹配的FilmID,返回电影;若不存在匹配,则电影一端的列将是NULL。在本例的DELETE语句中,用到了这些知识,并对NULL值进行测试——如果发现FilmID是空值时,则说明此处没有匹配(因此需要删除该演员)。


字数:1065    最后更新:7个月以前 [04-23 15:30]happyskynet 修改
本页编辑者:happyskynet  
[前一页]:2.3 通过UPDATE语句更…  [后一页]:2.5 替代的联结语法
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号