Access数据库相关知识
-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)
SELECT column1
FROM Table1
ii 限定列提取条件(Where)
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)
SELECT x
FROM x
ORDER BY Column1;
(按照Column1排序结果,默认升序排列)
ORDER BY Column1 ASC/DESC;
(升序/降序)
ORDER BY Column1 DESC,Column2 ASC;
(先按Column1降序排列,接着在Column1中按Column2升序排列)
iv 限定查询数量(Limit)
Select x
from x
limit a;
(从第一条数据开始获取a行数据)
limit a offset b;
(从(b+1)条数据开始,取 a条数据)
v 聚合函数(分组查询Group by)
包括COUNT计数、SUM(求和)、AVG(求平均)、MAX(最大)、MIN(最小),在select中使用。
SELECT COUNT(Column1)
FROM Table1;
(计算统计结果中行的数目)
函数和列名共用的情况
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)
SELECT Distinct column1
FROM Table1
ii 条件语句
1. IIF
Select iif(expression, truepart, falsepart)
From x
2. SWITCH
SELECT
SWITCH(
condition,result,
…………
True,result
)
From table
1)不必枚举所有情况,true不是非得有——可用于拆分信息
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语句中添加多个表格的关联字段即可
查询两个表:
SELECT A.Column1,B.Column2
FROM Table1 AS A,Table2 AS B
WHERE A.Column3=B.Column4
查询三个及以上的表:
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 嵌套表
分步查询,语句撰写思路是先写第一步语句,验证通过后在外层继续写第二步语句……
SELECT A.Column1,B.Column2
FROM (
Select Column1
From Table1) AS A,Table2 AS B
WHERE A.Column3=B.Column4
iii 联合查询
把两次查询的结果放在一张表中显示,前提是他们的字段数目相同
Select Column
From Table1
Union
Select Column
From Table2
看上去好像和前面的多个表、嵌套查询相似,但是有的时候还是会用上联合查询的。
IV 管理表格
简单的创建表格、字段,修改某行信息等操作可以在数据表格视图完成,但是涉及大量的修改、更新和维护就需要用到SQL查询语句了。
i 删除操作
1. 删除行
Delete from table_name
Where row='xx';
2. 删除列
Alter table table_name
Drop column column_name
3. 删除表
Drop table table_name;
ii 更新查询
用于更新表格信息。
Update table1,table2
Set
table1.column1=table2.column2,
table1.column3=5*column3
Where table1.ID=table2.ID
iii 追加查询
用于在已有表格中新增记录行
1. 单记录追加查询
INSERT INTO table [(Column1[,Column2……])]
[IN externaldatabase]
VALUES (value1[, value2[, …])
2. 多记录追加查询
INSERT INTO table [(Column1[, Column2……)]
[IN externaldatabase]
SELECT x
FROM x
Where x
Table表格可以链接外部数据插入
IN语句:IN"Path" "Type;"
IN "c:documentsxldata.xls""EXCEL 5.0;"
iv 查询并创建表格
用于将查询结果保存为数据库中的表格
Select Columns into TableName
From table
Where conditions
-5th-
后话
数据库使用,尤其是SQL语句的书写过程中还会遇到各种各样的问题,这里不可能一一而足,后面需要自行搜索解决,如“Access的SQL xxx怎么实现”。更多信息请转Access官方帮助文档。
其实完整的数据库学习还应当包括窗体和报表,窗体可以用于设定简单的数据录入、管理的程序界面,报表呢则是更规范地展现查询结果——这些,我都不常用上,感兴趣的自行学习。
- 【网络编程系列】一:字节顺序的大端与小端表示法
- Linux下的make命令用法
- 增量数据丢失的原因分析(三)(r8笔记第91天)
- JS之浏览器对象BOM
- 超清晰的makefile解释、编写与示例
- 一个简单的sql审核案例 (r8笔记第90天)
- Linux wait() 和 waitpid()函数介绍
- #if和#ifdef的区别
- 一个MySQL优化案例的初步思路(r8笔记第87天)
- 一条直线上N个线段所覆盖的总长度
- Go 语言 数据库操作之插入数据实现
- (摘抄)GO语言中template的用法
- 大数据时代的技术hive:hive介绍
- hadoop2.6分布式部署时 livenodes等于1的原因
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7服务器环境下vsftpd安装及配置方法
- Linux date 时间设置同步命令分享
- Gerrit设置开机启动方法
- Ubuntu服务器下搭建php运行环境的方法
- 详解ubuntu14.04搭建(迁移)hustoj记录
- linux 触摸屏驱动编写
- centos yum更新及删除多余启动项
- React进阶(1)-理解Redux
- MySQL死锁系列-线上死锁问题排查思路
- # 3分钟短文:Laravel路由注册,你必须掌握的“动词”!
- 资深程序员带你解锁Android性能优化五大误区和两大疑点!(附333页性能优化PDF宝典)
- Android大三提前批的钉钉和抖音面筋,阿里挂了HR面,抖音通过收获Offer
- leetcode之键盘行
- 浅析centos 7 自带的 php 5.4升级为 5.6的方法
- Linux内核设备驱动地址映射笔记整理