Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-查询/SQL语句

全面掌握MS ACCESS SQL(31)

时 间:2018-01-18 15:58:12
作 者:Big Young   ID:252  城市:襄阳
摘 要:    DELETE语句实例详解。
正 文:

第二节 Delete语句实例详解

伴随着大数据时代到来,数据将会越来越多,越来越复杂,我们都知道数据库是为数据而生的,那么Access作为最简单的数据库,怎么根据条件删除数据呢?下面我们就来学习如何使用Delete语句对数据库表中的记录进行删除操作。我们还是先创建一个示例数据库及示例数据表。

打开MS ACCESS 2016应用程序,在适当的目录下创建一个名为删除记录示例的数据库,然后创建建一个名为学生成绩的表并插入示例数据,表的数据如下:

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110135  史佳妮  132 133 138 181

10420601110136  韩雪娇  117 140 139 152

10420601110137  刘申    122 135 138 157

10420601110138  张艳辉  123 145 129 164

10420601110139  郭文涛  120 139 136 171

10420601110140  刘念晨  127 143 133 182

10420601110141  邹佳    123 136 133 170

10420601110142  周杰    117 136 146 183

10420601110143  熊戈尔  108 144 138 176

10420601110144  胡开宇  115 125 137 169

10420601110145  张正杨  121 132 131 178

10420601110146  崔楚蔚  119 140 129 172

10420601110147  王海章  113 132 140 187

10420601110148  许袁浩  125 123 116 169

10420601110149  吴曼丽  117 142 129 165

10420601110150  宋巧至  108 131 140 166

10420601110151  王秋蕊  126 140 126 175

10420601110152  吴婷颖  118 140 129 160

10420601110153  夏雨泽  123 132 138 180

10420601110154  杜赟    133 141 129 179

10420601110157  吴丹    117 128 138 186

准备工作就绪后,我们接下来就来探讨如何运用Delete语句删除指定的记录的问题。

一、删除一条记录

在学校中,学生也是经常性的变动的,如有的同学转学了,有的同学休学了,或有的不幸病故了,相应的我们的成绩表也要相应的作出修改。假如一我叫吴丹的同学转学了,我们就没有必要再记录其数据了,我们要将此删除,SQL语句如下:

Delete *

FROM 学生成绩

Where 姓名='吴丹';

此语句执行后我们再查看数据表,指定的相应记录不存在了。

二、删除多条记录

我们还是以学生成绩表为例,假如我们发现“考生号的值大于“10420601110143”的考生都不是我们的学生,现在要将其删除,我们用SQL语句:

Delete *

FROM 学生成绩

Where VAL(考生号)> 10420601110143;

确认运行后数据表结果如下:

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110135  史佳妮  132 133 138 181

10420601110136  韩雪娇  117 140 139 152

10420601110137  刘申    122 135 138 157

10420601110138  张艳辉  123 145 129 164

10420601110139  郭文涛  120 139 136 171

10420601110140  刘念晨  127 143 133 182

10420601110141  邹佳    123 136 133 170

10420601110142  周杰    117 136 146 183

10420601110143  熊戈尔  108 144 138 176

与开始时相比,后面的十几条记录被删除了。

三、删除表中重复的记录

有时候我们的数据来源于不同的表合并而成,难免会有重复的数据记录,例如我们下列的学生成绩表:

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110142  周杰    117 136 146 183

10420601110131  邓林楠  119 145 131 197

10420601110131  邓林楠  119 145 131 197

10420601110132  刘国琼  125 146 138 194

10420601110133  孔明阳  121 139 134 196

10420601110134  赵一凡  118 136 132 182

10420601110142  周杰    117 136 146 183

现在我们要删除其中的重复记录,即重复的记录只保留一条,不存在重复的记录保持不变,那我们该如何实现呢?我们先备份下这个表,备份表名为“TEMP”,然后再作如下的操作:

Delete *

FROM 学生成绩

Where 考生号

IN (Select 考生号 FROM 学生成绩 GROUP BY 考生号 HAVING COUNT(考生号) > 1);

执行号我们再打开学生成绩表查看,情况如下:

考生号  姓名    语文    数学    英语    综合

10420601110127  方志超  117 145 142 190

10420601110128  孙红霞  110 143 141 167

10420601110129  张方方  127 140 130 188

10420601110130  胡一炳  119 146 137 160

这表明它把重复的记录全删除了,这不是我们想要的结果,我们想要的是重复的记录只保留一条,多余的删除。现在我们从备份中恢复数据,另作处理。

 四、重复记录只保留一条,删除多余重复记录

要实现只保留一条重复的记录,把其它重复多余的记录删除,在ACCESS SQL查询视图中用一条语句很难做到,我们可以分步骤实现。

第一步,为表增加的自动编号的列,这里我们为表学生成绩新增一个名为“ID”的字段,用以下SQL语句实现:

Alter TABLE 学生成绩

ADD COLUMN [ID] COUNTER;

执行后我们打开表查看,情况如下:

考生号  姓名    语文    数学    英语    综合    ID

10420601110127  方志超  117 145 142 190 1

10420601110128  孙红霞  110 143 141 167 2

10420601110129  张方方  127 140 130 188 3

10420601110130  胡一炳  119 146 137 160 4

10420601110131  邓林楠  119 145 131 197 5

10420601110132  刘国琼  125 146 138 194 6

10420601110133  孔明阳  121 139 134 196 7

10420601110134  赵一凡  118 136 132 182 8

10420601110142  周杰    117 136 146 183 9

10420601110131  邓林楠  119 145 131 197 10

10420601110131  邓林楠  119 145 131 197 11

10420601110132  刘国琼  125 146 138 194 12

10420601110133  孔明阳  121 139 134 196 13

10420601110134  赵一凡  118 136 132 182 14

10420601110142  周杰    117 136 146 183 15

第二步,我们就可以利用新增加的自动编号字段“ID”来实现重复记录只保留一条的删除操作了,具体SQL语句如下所示:

Delete *

FROM 学生成绩

Where ID NOT IN (Select MIN(ID) FROM 学生成绩 GROUP BY 考生号;);

这样就会删除多余的重复记录,只把重复记录中“ID”号最小的一个留下了,执行后的效果如下:

考生号  姓名    语文    数学    英语    综合    ID

10420601110127  方志超  117 145 142 190 1

10420601110128  孙红霞  110 143 141 167 2

10420601110129  张方方  127 140 130 188 3

10420601110130  胡一炳  119 146 137 160 4

10420601110131  邓林楠  119 145 131 197 5

10420601110132  刘国琼  125 146 138 194 6

10420601110133  孔明阳  121 139 134 196 7

10420601110134  赵一凡  118 136 132 182 8

10420601110142  周杰    117 136 146 183 9

第三步,接下来我们就要删除先前增加的自动编号字段“ID”,恢复原来的表的结构,删除字段的语句如下:

Alter TABLE 学生成绩

Drop COLUMN [ID];

这样,能过三步的操作我们就实现了把多记录删除时只保留一条的任务。当然这也不是唯一的方法步骤,实现方式可以多样,如,我们也可以利用临时表也可以实现,这里就不理一一列举了。



Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助