版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
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#教程 目录