当前位置: 首页 > article >正文

19.1.2 DML

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

DML用于操作数据,例如新增、删除、更新、查询等。

19.1.2.1 北风数据库的使用

打开北风数据库,如果由于安全设置弹出安全警告,那么直接单击“启用内容”按钮,然后单击【主切换面板】窗口上的“显示数据库窗口”按钮:

图19-9 北风数据库默认打开显示【主切换面板】窗口

左侧的【所有Access对象】窗口就会显示北风数据库中所有的表、查询、窗体等。

图19-10 北风数据库的所有对象

打开任一表,可能会看到表数据前面有个“+”号:

图19-11 北风数据库的所有对象

这是因为在北风数据库中已经将所有表建立了“关系”。单击【数据库工具】选项卡下面的【关系】,打开【关系】窗口:

图19-12 数据表之间的关系

右击表与表之间的连线,从弹出菜单上单击【删除】,可以将删除表之间的关系:

图19-13 删除数据表之间的关系

由于本书中需要的是北风数据库中的数据表,为了更好地查看每一个表,请将所有表之间的关系删除。其它Access对象如查询、窗体等也可以不用理会。

19.1.2.2 新增数据

在表中新增一行数据,具体语法:

insert into 表名(字段1,字段2,……,字段3) values(值1,值2,……,值n)

字段部分:不需要在字段名称上加引号,需要注意的是,

1、如果全部字段都新增值,那么可以直接表名后空格在接上values

2、如果其中有字段设置了默认值(包括自动编号字段),该字段新增的值和默认值相同,那么可以不加入该字段,对应的值的部分也不写入该字段的值。

值部分:除了数字类型,其余类型的都要加上引号(可以是双引号或者单引号)。

例如,在北风数据库的“运货商”表中增加一行数据:

insert into 运货商(公司名称,电话) values("宅送快递","(010)655555")

第一个字段“运货商ID”由于是自动编号,所以不用写入字段名称。

还有个运货商需要添加,可以使用以下语句:

insert into 运货商(运货商ID,公司名称,电话) values(5,"飞天货运","(010)655556")

或者以下语句:

insert into 运货商 values(5," 超级速递","(010)655556")

这两条语句按照第19.1.1节中运行SQL语句的方法,通过【创建】选项卡下的【查询设计】,在“SQL视图”下分别添加运行。新增数据不会立刻显示,点击刷新就可以看到新增的数据:

图19-14 新增加了两条数据

19.1.2.3 更新数据

更新表中的数据,语法如下:

update 表名 set 需要修改的字段1=值1,需要修改的字段2=值2,……需要修改的字段n=值n where 条件字段=值

字段和值部分的说明19.1.2.2节。

where部分指定条件,只有满足条件的才能执行。如果取消where语句,将会更新表中所有行。

上一节中将“飞天货运”的电话不小心录入错误,这里需要更新该条数据:

update 运货商 set 电话="(010)655557" where 公司名称="超级速递"

运行时由于要更新数据,Access会提示有1行数据会被更新:

图19-15 Access提示更新1行数据

单击“是”按钮,确定修改数据。

如果没有where及后面的语句,Access同样会执行该SQL语句,当然会提示更新5行数据,也就是全部的数据:

图19-16 Access提示更新5行数据

单击“是”按钮,运货商表中所有行的电话字段数据全部会被更新为(010)655557。

Where条件中的语句一定要清晰,明确筛选的行数据是否是用户需要的。

19.1.2.4 删除数据

表内数据的删除,语法如下:

delete * from 表名 where 条件字段=值

* 可以省略

where 部分的说明同19.1.2.3节

由于超级速递公司不再担当运货商,所以现在需要将该公司从运货商表中删除:

delete * from 运货商 where公司名称="超级速递"

运行时,access会提示将删除1行数据:

图19-17 Access提示删除1行数据

单击“是”按钮,确定删除数据,刷新运货商表或者关闭后重新打开运货商表,就会发现超级速递已经被删除。

如果没有where语句做限制会有什么后果呢?很显然该表中所有的数据都将被删除,而且是恢复不了的。因此再次强调,执行删除操作时,务必确保where后面的语句是否正确,是否是需要删除的数据。

19.1.2.5 查询数据

最简单的查询语法:

select * from 表名 where 字段条件=值

说明:查询符合条件的所有数据并全部显示。

读者们可以试一下以下查询语句:

1、普通查询语句:

查询产品表中的所有数据:

select * from 产品

2、使用where条件语句做限定:

(1)查询供应商ID为3的数据:

select * from 产品 WHERE 供应商ID=3

(2)查询除供应商ID为3的数据:

select * from 产品 where 供应商ID<>3

where语句是限定查询的条件,可以使用的数学符号包括:=(等于)、<(小于)、>(大于)、<>(不等于)……

(3)查询除供应商ID为3、类别ID为2的数据:

select * from 产品 WHERE 供应商ID=3 and 类别ID=2

where语句还可以使用and、or等条件。

Where语句的使用在update、delete语句中也是一样的。

(4)只查询单价大于50的产品,而且只显示产品名称和单价相关的信息:

select 产品名称,单价 from 产品 where 单价>50

3、使用order by语句排序:

(1)将以上结果按照单价排序,从小到大:

select 产品名称,单价 from 产品 where 单价>50 order by 单价 asc

(2)将以上结果按照单价排序,从大到小:

select 产品名称,单价 from 产品 where 单价>50 order by 单价 desc

4、使用top选择显示排列最前的数据:

(1)只需要查询最贵的2件产品:

select top 2 产品名称,单价 from 产品 order by 单价 desc

(2)查询单价大于40的最便宜的两件产品:

select top 2 产品名称,单价 from 产品 where 单价>40 order by 单价 asc

5、表的交叉查询:

在查询:

select * from 产品 WHERE 供应商ID=3 and 类别ID=2

中,显示出的供应商和类别都是数字,而在供应商表和类别表中有相关ID对应的名称,此时需要使用交叉查询,这里需要使用3个表的交叉查询:

select 产品.产品名称,供应商.公司名称,类别.类别名称,产品.单价

from

(产品 inner join 供应商 on 产品.供应商ID=供应商.供应商ID)

inner join 类别on 产品.类别ID=类别.类别ID

交叉查询中对表名和显示的字段进行简化(表和字段都增加别名):

SELECT cp.产品名称 AS 产品, gys.公司名称 AS 公司, lb.类别名称 AS 类别, cp.单价 AS 单价

from

(产品 AS cp INNER JOIN 供应商 AS gys ON cp.供应商ID=gys.供应商ID)

INNER JOIN 类别 AS lb ON cp.类别ID=lb.类别ID

注意:执行此查询可能不会显示字段的别名,因为北风数据库中每个表中的字段设置了显示的标题。可以按以下方式修改:

打开表,进入【设计视图】,选中字段,在窗口下面的【常规】中将标题一项删除:

图19-18 删除了标题才能正确显示别名

6、使用聚合函数:

聚合函数包括求个数(count)、平均值(avg)、求和(sum)、最大值(max)、最小值(min)等:

订单明细中单号对应的产品数量和总价:

select 订单ID,count(订单ID) as 产品数量,sum(单价*数量*(1-折扣)) as 总价 from 订单明细 group by 订单ID

 

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录


http://www.kler.cn/a/542984.html

相关文章:

  • 软件测试面试题及答案解析,2025最新版
  • 【IDEA】2017版本的使用
  • C# OpenCV机器视觉:SoftNMS非极大值抑制
  • 基于 Nginx 的 CDN 基础实现
  • 【Docker】
  • 强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略
  • Ubuntu22.04 配置deepseek知识库
  • 【Linux】修改语言编码
  • 通过命令行运行py文件与通过ide运行py文件,对文件中模块的引用方式的影响
  • Vue3.5 企业级管理系统实战(六):Vue3中defineProps用法
  • C# ASP.NET核心特性介绍
  • Java基础知识(七) -- 集合
  • 初学springboot注解
  • 【计算机网络】TCP/IP 网络模型有哪几层?
  • UI-设计规范大小总结
  • 4G/5G路由器链路检查作业指导
  • 14.1 AutoGPT 项目深度解析:为什么它能掀起自主智能体开发革命?
  • 安防机器人电源解决方案
  • 网络在线考试|基于vue的网络在线考试系统的设计与实现(源码+数据库+文档)
  • Python自动化办公之批量重命名
  • MySQL 动态分区管理:自动化与优化实践
  • PortSwigger——WebSockets vulnerabilities
  • 【GeeRPC】Day5:支持 HTTP 协议
  • 浙江大华社招面试
  • PyTorch 中 `torch.cuda.amp` 相关警告的解决方法
  • 手撕Transformer编码器:从Self-Attention到Positional Encoding的PyTorch逐行实现