19.1.2 DML

server/2025/2/11 16:00:11/

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

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.ppmy.cn/server/166793.html

相关文章

Windows系统下设置Vivado默认版本:让工程文件按需打开

在FPGA开发过程中&#xff0c;我们常常需要在一台电脑上安装多个不同版本的Vivado软件&#xff0c;以满足不同项目的需求。然而&#xff0c;当双击打开一个Vivado工程文件&#xff08;.xpr&#xff09;时&#xff0c;系统默认会调用一个固定的版本&#xff0c;这可能并不是我们…

数据结构——【二叉树模版】

#思路 1、二叉树不同于数的构建&#xff0c;在树节点类中&#xff0c;有数据&#xff0c;左子结点&#xff0c;右子节点三个属性&#xff0c;在树类的构造函数中&#xff0c;添加了变量maxNodes&#xff0c;用于后续列表索引的判断 2.GetTreeNode()函数是常用方法&#xff0c;…

WPS接入DeepSeek,实现AI辅助功能

在现代办公场景中&#xff0c;WPS Office 作为一款功能强大的办公软件&#xff0c;已经成为许多职场人士日常工作的必备工具。WPS 不仅提供了全面的文档编辑功能&#xff0c;还支持宏&#xff08;Macro&#xff09;&#xff0c;使得用户可以通过编写脚本实现文档自动化处理&…

ES6~ES11新特性全解析

在JavaScript的世界里&#xff0c;ES6 - ES11带来了许多令人兴奋的新特性&#xff0c;这些特性极大地提升了JavaScript的表达力和开发效率。今天&#xff0c;我们就来全面总结一下这些版本的新特性。 ES6 (ECMAScript 2015) 模块化&#xff1a;允许将代码分割成独立模块&#…

C# OpenCV机器视觉:智能水果采摘

在一个风景如画的小镇边上&#xff0c;有一座阿强家祖传的果园。每到水果成熟的季节&#xff0c;果园里硕果累累&#xff0c;红彤彤的苹果、黄澄澄的梨子、紫莹莹的葡萄&#xff0c;散发着诱人的香气。然而&#xff0c;这丰收的喜悦却总被一件烦心事笼罩 —— 摘水果。 “哎呀…

1.5 Spring表达式语言(SpEL)

1.5 Spring表达式语言&#xff08;SpEL&#xff09; 1.5.1 资源注入表达式实战&#xff08;深度工程应用&#xff09; SpEL基础语法全景&#xff1a; 表达式类型&#xff1a;├─ 字面量&#xff1a;#{Hello World}├─ 属性引用&#xff1a;#{systemProperties[user.timezo…

VMware 虚拟机中 Ubuntu 20 网络不通问题解决总结

VMware 虚拟机中 Ubuntu 20 网络不通问题解决总结 一、问题描述 在 VMware 虚拟机中的 Ubuntu 20 系统出现网络不通的问题&#xff0c;具体表现为无法 ping 通百度且无法访问网页。ip addr 命令显示 ens33 网络接口处于异常状态&#xff0c;如显示 NO - CARRIER、DOWN 等&…

Qt、C++软件开发之table控件:tableview和tablewidget的区别以及C++详细用法。

` 文章目录 前言区别一、数据模型‌:二、灵活性和定制性‌:三、性能和内存使用‌:四、适用场景‌:使用方法QTableView创建数据模型‌:设置模型到QTableView‌:设置表头和数据‌:自定义委托‌:QTableWidget‌创建QTableWidget‌:设置表头‌:插入数据‌:插入新行和列‌…