前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Access数据库相关知识

Access数据库相关知识

作者头像
Sidchen
发布2020-08-07 16:26:51
3.8K0
发布2020-08-07 16:26:51
举报
文章被收录于专栏:规划领域技术规划领域技术

-1st-

规范化

建立一个规范的数据库其实是一个比较高深的学问,不过好在我们并不需要太规范。

我们只要记住:一张表只有一个主题,如“居住区情况”表

每个表需要遵循以下范式:

第一范式:表的每个字段只能包含一个值,并且该表不能包含重复的数据组

第二范式:将不直接依赖表主键的数据迁移到另一个表,即需要识别不同的“实体”

*主键,是表中每条数据的唯一识别编码。实体,可以理解为一个不能再细分的主题。

比如,公园到访者的数据表,可能包含的实体有:公园信息(主键是公园编号),到访者的信息(主键是到访者编号),到访者居住地的信息(主键是居住地编号)一共有2个实体,即3张表。

第三范式:要求移除所有可以派生自表中(或其他数据库的其他表中)其他字段包含的数据字段

-2nd-

创建表格

可以手动创建表格,并在Access中手动输入数据,倒是还是建议把原始乱七八糟的Excel表格导入Access之后,再利用SQL查询语句,按照规范化标准来建立数据库。而不是用Excel处理后再导入Access,因为太低效了。

为了后期便于表格的交叉查询,表格名称请用英文命名,表格中的字段也要使用英文。可以采用“驼峰命名法”或下划线分隔的方式,如表名PeopleDense,字段名Grid_id

-3rd-

导入导出

Access支持多种导入、导出数据的方式。以Excel文件格式为例

1)导入:表对象中,右键——导入——Excel,一路确定,按需修改

2)导出:选中表格,或者某个查询结果(需先保存)——右键——导出——Excel,选择保存位置——确定

-4th-

SQL查询

01 简介

SQL(StructuredQuery Language),结构化查询语句。不同的数据库软件语法有所不同。接下来的语法规则,主要是针对Access数据库。

SQL语句是Access中管理、处理数据的最高效方法,使用:创建选项卡——查询功能块——查询设计(会自动跳出来一个选择表格的窗口,关掉)——选择SQL视图(左上角)

*一个表格一共有三个视图,1)数据表视图:类似Excel的显示界面,用于显示数据;2)设计视图,用于限定、备注、创建、删除字段;3)SQL视图,用于书写SQL查询语句

SQL语句符合英文语言习惯:我要选择什么数据,从哪个表,限定条件是什么,查询结果如何排序……

02 语法

I 简单查询

i 提取列(Select)

代码语言:javascript
复制
SELECT column1
FROM Table1

ii 限定列提取条件(Where)

代码语言:javascript
复制
SELECT Column1(*代表所有列)
FROM Table1
Where Column1 = 'Row1';
      Column1 > x;
      Column1 IN/NOT IN ('x','y','z');
      Column1 BETWEEN x AND y;
      Column1 LIKE/NOT LIKE 'a_ xxx';
      Column1 IS/IS NOT NULL

1. 多个限定条件时,每个条件之间用AND/OR连接

2. 通配符的使用(引自某本书):

字符

说明

示例

*(星号)

匹配任意数量字符

Ford*可以找到Ford Mustang

?(问号)

匹配单个字符

F?rd可以找到Ford

[](方括号)

匹配字符列表一个字符

19[67]1可以找到1961和1971

!(感叹号)

配合方括号使用,可以排除字符列表中的字符

19[!67]可以找到1951,但不能找到1961和1971

-(连字符)

配合方括号使用,可以匹配指定范围内的字符

196[2-8]可以找到1962和1968

#(井号)

匹配一个数字

1:##可以找到1:18,但不能找到1:9

3. 不能将条件写成 where 1<Column1<2,而要分成两个条件,whereColumn1>1 and Column1<2

iii 对查询结果排序(Order by)

代码语言:javascript
复制
SELECT x
FROM x
ORDER BY Column1;
(按照Column1排序结果,默认升序排列)
ORDER BY Column1 ASC/DESC;
(升序/降序)
ORDER BY Column1 DESC,Column2 ASC;
(先按Column1降序排列,接着在Column1中按Column2升序排列)

iv 限定查询数量(Limit)

代码语言:javascript
复制
Select x
from x
limit a;   
(从第一条数据开始获取a行数据)
limit a offset b;
(从(b+1)条数据开始,取 a条数据)

v 聚合函数(分组查询Group by)

包括COUNT计数、SUM(求和)、AVG(求平均)、MAX(最大)、MIN(最小),在select中使用。

代码语言:javascript
复制
SELECT COUNT(Column1)
FROM Table1;
(计算统计结果中行的数目)

函数和列名共用的情况

代码语言:javascript
复制
SELECT Column1,Count(*)
FROM Table1
GROUP BY Column1;(按Column1分组)
(HAVING COUNT(*)>1;)
(Having用于添加条件,在分组查询结果中再进行筛选)

Select中使用聚合函数的列,可以不在Group by中列出,没有使用聚合函数的列一定要在Group by 中列出。

各语句执行顺序是:WHERE字句、GROUP字句、聚合函数、HAVING字句

vi 一些规则

1)As用于查询后重命名字段,或查询中简化表格名称,如Select Column1 as Name from……;Select x fromPeopleDense as t

2)(‘’)单引号用于限定字符内容

3)([])方括号用于限定容易产生歧义的名称,如[Grid_id]>1

4)(())圆括号用于运算分级

II 高级查询

i 提取列并去重(Distinct)

代码语言:javascript
复制
SELECT Distinct column1
FROM Table1

ii 条件语句

1. IIF

代码语言:javascript
复制
Select iif(expression, truepart, falsepart)
From x

2. SWITCH

代码语言:javascript
复制
SELECT
 SWITCH(
          condition,result,
       …………
           True,result
           )
From table

1)不必枚举所有情况,true不是非得有——可用于拆分信息

代码语言:javascript
复制
Select
count(switch(xb='1',1))as male,
count(switch(xb='1',1)as female
From x

2)Result可以是包含其他列的表达式,Condition也可以包含其他列

iii 常用函数

1. 字符函数

用法与Excel相同,如Left(字段名称,所取字符数),Mid(),Right()和Replace()函数等

更多请转:http://accessoft.com/article-show.asp?id=3333

2. 运算结果限定

1)Round(Value,num),对Value进行四舍五入,结果保留num位数。

2)int()/fix()

Int(向下取整)和Fix(向上取整)均删除数字的小数部分, 并返回得到的整数值。

Int和Fix之间的区别在于, 如果Number为负数, 则int返回小于或等于number的第一个负整数, 而Fix返回大于或等于的第一个负整数

III 交叉查询

i 多个表

从多个表中查询数据,From字句中列出涉及的表格名称,Where语句中添加多个表格的关联字段即可

查询两个表:

代码语言:javascript
复制
SELECT A.Column1,B.Column2
FROM Table1 AS A,Table2 AS B
WHERE A.Column3=B.Column4

查询三个及以上的表:

代码语言:javascript
复制
SELECT A.Column1,C.Column2
FROM Table1 AS A,Table2 AS B,Table3 AS C
WHERE A.Column3=B.Column3
AND B.Column4=C.Column4

ii 嵌套表

分步查询,语句撰写思路是先写第一步语句,验证通过后在外层继续写第二步语句……

代码语言:javascript
复制
SELECT A.Column1,B.Column2
FROM (
Select Column1
From Table1) AS A,Table2 AS B
WHERE A.Column3=B.Column4

iii 联合查询

把两次查询的结果放在一张表中显示,前提是他们的字段数目相同

代码语言:javascript
复制
Select Column
From Table1
Union
Select Column
From Table2

看上去好像和前面的多个表、嵌套查询相似,但是有的时候还是会用上联合查询的。

IV 管理表格

简单的创建表格、字段,修改某行信息等操作可以在数据表格视图完成,但是涉及大量的修改、更新和维护就需要用到SQL查询语句了。

i 删除操作

1. 删除行

代码语言:javascript
复制
Delete from table_name
Where row='xx';

2. 删除列

代码语言:javascript
复制
Alter table table_name
Drop column column_name

3. 删除表

代码语言:javascript
复制
Drop table table_name;

ii 更新查询

用于更新表格信息。

代码语言:javascript
复制
Update table1,table2
Set
table1.column1=table2.column2,
table1.column3=5*column3
Where table1.ID=table2.ID

iii 追加查询

用于在已有表格中新增记录行

1. 单记录追加查询

代码语言:javascript
复制
INSERT INTO table [(Column1[,Column2……])]
[IN externaldatabase]
VALUES (value1[, value2[, …])

2. 多记录追加查询

代码语言:javascript
复制
INSERT INTO table [(Column1[, Column2……)]
[IN externaldatabase]
SELECT x
FROM x
Where x

Table表格可以链接外部数据插入

IN语句:IN"Path" "Type;"

代码语言:javascript
复制
IN "c:\documents\xldata.xls""EXCEL 5.0;"

iv 查询并创建表格

用于将查询结果保存为数据库中的表格

代码语言:javascript
复制
Select Columns into TableName
From table
Where conditions

-5th-

后话

数据库使用,尤其是SQL语句的书写过程中还会遇到各种各样的问题,这里不可能一一而足,后面需要自行搜索解决,如“Access的SQL xxx怎么实现”。更多信息请转Access官方帮助文档。

其实完整的数据库学习还应当包括窗体和报表,窗体可以用于设定简单的数据录入、管理的程序界面,报表呢则是更规范地展现查询结果——这些,我都不常用上,感兴趣的自行学习。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 规划人在路上 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档