1. SQL(Structure Quest Language)

一种结构化查询语言,它是一种通用的关系型数据库操作语言,用于存取数据,查询,更新和管理数据库。

2. 基本语句

Select, Create, Insert, Drop

3. SQL语句注意事项

1)SQL语句中,英文字母大写或小写均可

2)每个SQL语句的关键字用空白符号分隔

3)字段或参数之间用逗号分隔

4)SQL语句中,如参数为字符型,需要使用单引号,数值型不使用单引号

5)SQL语句结束时,在语句结尾处添加分号,在Access数据库中,无强制要求SQL语句结束时添加用分号。

6)Access数据库SQL语句中,如表名,字段名中出现空格,‘/’, '\'等特殊字符时,需用方括号‘ []’ 将含有特殊字符的表名或字段名括起来,以免得到不正确的结果或SQL语句无法运行。

7)SQL语句中,‘*’代表选定数据表中的所有字段,并且按照其在数据库中的固定顺序来显示

8)Access数据库,在函数参数中或条件查询中,若参数或查询条件为日期和时间类型数据,需要在数据值两端加上井字符号(#),以表示数据类型为日期型

9)SQL语句中使用的逗号,分号,单引号,括号等符号均需要是在输入法为英文状态下输入的符号。

10)应尽量避免在数据库中进行全表扫描:

a. 首先应考虑用where子句筛选出需要的数据;

b. 其次,在where子句中,应尽量避免使用 “!=”或 “<>”, "OR"等

c. 最后应尽量避免在where子句中对字段进行函数操作,否则将进行全表扫描

4. 字段拆分

1)相关函数

a. Left(字符串, 提取的位数)

b. Right (字符串, 提取的位数)

c. Mid (字符串, 提取的起始位置, 提取的位数)

2)示例:从身份证号码中提取省份编码,区县编码,出生日期

 SELECT 身份证号码, Left (身份号码,2) as 省份编码,
Mid (身份号码, 7,4) as 年,
Mid (身份号码,11,2) as 月,
Mid (身份号码, 13,2)as 日,
Mid (身份号码, 17,1) as 性别
FROM 用户明细;

5. 随机抽样:按照随机原则,进行抽取样本的一种方法

例如: 随机抽取20条记录

 SELECT TOP 20 *
FROM 用户明细
ORDER BY Rnd (用户ID);

6. 数据合并

1)字段合并

a. 使用连接符: &, +

 SELECT 身份证号码,
(Mid(身份证号码,7,4) & ‘-’ & Mid(身份证号码,11,2)& ‘-’ & Mid(身份证号码,13,2)) as 出生日期
FROM 用户明细;

b. 使用相关函数(比如日期函数DateSerial)

 SELECT 身份证号码,
DateSerial (Mid(身份证号码,7,4), Mid(身份证号码,11,2), Mid(身份证号码,13,2)) as 出生日期
FROM 用户明细;

2)字段匹配

a.连接类型:主要包含内连接(INNER JOIN),左连接(LEFT JOIN),右连接 (RIGHT JOIN)三种数据库关系;

 SELECT 订购明细.订单编号, 订购明细.订购日期, 订购明细.用户ID, 订购明细.产品, 订购明细.[单价(元)], 用户明细.性别
FROM 订购明细 INNER JOIN 订购明细.用户ID=用户明细.用户ID

3)记录合并

a. 记录合并:要求各表具有相同字段,结构,使用UNION ALL 或 UNION 指令进行两表或多表合并;

b. UNION会删除各表存在的重复记录,并进行排序,要慎用。

###合并所有记录,不擅长重复记录
1 SELECT * FROM (SELECT *FROM 订购明细20110901) UNION ALL SELECT * FROM 订购明细20110902)
#### 创建一张空表
1 SELECT *INTO 订购明细201109
FROM 订购明细20110901
WHERE 1=2; ### 该条件不可能满足

7. 数据去重:保留唯一的数据记录

1)Group By: 对数据按指定的分组字段进行分组。

 SELECT 用户ID
FROM 用户明细重复
GROUP BY 用户ID;

2) Distinct: 忽略所选字段中包含重复数据的记录,简单来说,就是数据去重。

 SELECT DISTINCT 用户ID, 注册日期, 身份证号码,性别,年龄
FROM 用户明细重复;

8.数据分组

1)数值分组---IIF函数,与Excel中的IF用法一致

IIF(条件表达式,表达式成立返回的值,表达式不成立返回的值):

 SELECT 用户ID, 年龄
IIF(年龄<=20, "20岁及其以下",
IIF(年龄 <=30, "21-30岁",
IIF(年龄 <= 40, "31-40岁", "40岁以上")))AS 年龄分组
FROM 用户明细;

2)日期分组

a. YEAR, MONTH, DAY函数:

 SELECT 订单编号,订购日期,
YEAR (订购日期) AS 年,
MONTH(订购日期)AS 月,
DAY(订购日期)AS 日
FROM 订购明细;

        前提:订购日期字段必须为日期型数据

       b. FORMAT函数:FORMAT(日期/时间, 日期/时间格式参数)

日期/时间格式参数 说明
:(冒号) 时间分隔符
/ 日期分隔符
d 根据需要以一位或两位数字表示一个月中的第几天(1-31)
dddd 星期的全称(Sunday-Saturday)
w 一周中的第几天(1-7)
ww 一年中的第几周(1-53)
m 根据需要以一位或两位数字表示一年中的月份(1-12)
mmmm 月份的全称(January-December)
q 一年中的第几个季度(1-4)
y 一年中的第几天(1-366)
yyyy 完整的年份(0100-9999)
h 根据需要以一位或两位数字表示小时(0-23)
n 根据需要以一位或两位数字表示分钟(0-59)
s 根据需要以一位或两位数字表示秒(0-59)

如下示例:

 SELECT 订单编号, 订购日期,
FORMAT(订购日期, "yyyy") AS 年,
FORMAT(订购日期, "q") AS 季,
FORMAT(订购日期, "m") AS 月,
FORMAT(订购日期, "d") AS 日,
FORMAT(订购日期, "dddd") AS 星期,
FORMAT(订购日期, "h") AS 小时,
FORMAT(订购日期, "n") AS 分,
FORMAT(订购日期, "s") AS 秒,
FROM 订购明细;

9.数据计算

1) 简单计算: 加,减,乘,除

 SELECT 订单编号,产品,【单价(元)】, 数量, 订购金额,【数量】*【单价(元)】AS 订单金额
FROM 订购明细;   

2)函数计算:通过软件内置的函数进行计算,比如:DATEDIFF("参数", 起始日期, 结束日期)

参数 说明
yyyy
q 季度
m
d
w
h
n
s
  SELECT 用户ID, 注册日期, DATEDIFF("D", 注册日期, #2015-2-14#) AS 注册天数             -----------------日期数据要用##标明
FROM 用户明细;

10. 数据分析

1)简单统计

统计方式 统计函数 说明
计数 Count() 统计指定列中值的个数
求和 Sum() 计算数值型数据的总和
平均 Avg() 计算数值型数据的平均值
最大值 Max() 筛选出数据的最大值
最小值 Min() 筛选出数据的最小值
标准差 StDev() 计算数值型数据的标准差
方差 Var() 计算数值型数据的方差
 SELECT Count(订单编号) AS 订单总数, Sum(订购金额) AS 订购金额总额, Avg(订购金额) AS 平均订单金额
FROM 订单明细;

2)分组分析

a. 定量分组:数值分组,日期分组

 SELECT IIF (年龄<=20,"20岁及其以下",
IIF(年龄<=30, "21-30岁",
IIF (年龄 <=40, "31-40岁", "40岁以上"))) AS 年龄分组,
Count(用户ID)AS 用户数
FROM 用户明细
GROUP BY IIF (年龄<=20,"20岁及其以下",
IIF(年龄<=30, "21-30岁",
IIF (年龄 <=40, "31-40岁", "40岁以上")));

b. 定性分组:按事物已有的类别进行划分,用Group By语句

 SELECT 产品,Count(订单编号) AS 订单总数,Sum(订购金额) AS 订购总金额,Avg(订购金额) AS 平均订单金额
FROM 订购明细
GROUP BY 产品;

日期分组:

 SELECT FORMAT(注册日期, "m") AS 月,
Count(用户ID) AS 用户数
FROM 用户明细
GROUP BY FORMAT(注册日期, "m")

3) 排序分析

 SELECT 产品, Count(订单编号) AS 订单总数
FROM 订购明细
GROUP BY 产品
ORDER BY Count(订单编号) DESC ;

4) 结构分析

 SELECT 产品,
Count(产品编号)/(SELECT Count(d订单编号) FROM 订购明细) AS 占比
FROM 订购明细
GROUP BY 产品;

5)分布分析:查看数据的分布情况

 SELECT IIF(B.年龄<=20, “20岁及其以下”,IIF(B.年龄<=30, "21-30岁",IIF(B.年龄<=40, "31-40岁", “40岁以上”))) AS 年龄分组, COUNT(A.用户ID) AS 购买用户数
FROM (SELECT 用户ID FROM 订购明细 GROUP BY 用户ID) AS A, 用户明细 AS B
WHERE A.用户ID=B.用户ID
GROUP BY IIF(B.年龄<=20, "20岁及其以下", IIF(B.年龄<=30, “21-30岁”, IIF(B.年龄<=40, "31-40岁", “40岁以上”)));

6)交叉分析:通常用于分析两个或两个以上分组变量的关系,以交叉表的形式进行变量间关系的对比分析,从数据的不同维度综合进行分组细分,以进一步了解数据的构成和分布特征。

变量的类型:

a. 定量,定量分组交叉

b. 定量,定性分组交叉

c. 定性,定性分组交叉

交叉的维度:不宜过多,一般建议两个维度。

 TRANSFORM COUNT(用户ID) AS 用户数
SELECT 年龄
FROM 用户明细
GROUP BY 年龄
PIVOT 性别;

7)留存分析:以留存率为基准,留存率是用户留下来的比率。

留存用户:(第一日登录,且在第二日登录的用户)

 SELECT 登录用户明细20110101.用户ID, 登录用户明细20110102.用户ID
FROM 登录用户明细20110101 LEFT JOIN 登录用户明细20110102 ON 登录用户明细20110101.用户ID=登录用户明细20110102.用户ID
#### 计算留存率
1 SELECT count(登录用户明细20110101.用户ID) AS 第一日登录用户数,count( 登录用户明细20110102.用户ID)/count(登录用户明细20110101.用户ID) AS 次日留存率
FROM 登录用户明细20110101 LEFT JOIN 登录用户明细20110102 ON 登录用户明细20110101.用户ID=登录用户明细20110102.用户ID

8)矩阵分析:例如根据年龄,消费两个维度,分析各省份购买用户质量。

各省份购买用户平均订购金额:

 SELECT LEFT(B.身份证号码,2) As 省份编码,
AVG(A.订购金额) AS 平均订购金额
FROM 订购明细 AS A, 用户明细 AS B
WHERE A.用户ID=B.用户ID
GROUP BY LEFT(B.身份证号码,2)

使用LEFT函数处理过的字段为短文本字段.

各省份购买用户平均订购金额:

 SELECT C.省份
AVG(A.订购金额) AS 平均订购金额
FROM 订购明细 AS A, 用户明细 AS B, 省份 AS C
WHERE A.用户ID=B.用户ID
AND C.省份编码=LEFT(B.身份证号码,2)
GROUP BY C.省份

各省份购买用户平均年龄:

 SELECT C.省份, AVG(B.年龄) AS 平均年龄
FROM
(SELECT 用户ID FROM 订购明细 GROUP BY 用户ID) AS A,
用户明细 AS B,
省份 AS C
WHERE A.用户ID=B.用户ID AND C.省份编码=LEFT(B.身份证号码,2)
GROUP BY C.省份;

数据分析---SQL(Access数据库)的更多相关文章

  1. C#操作access和SQL server数据库代码实例

    在C#的学习中,操作数据库是比较常用的技术,而access和sql server 数据库的操作却有着不同.那么,有哪些不同呢? 首先,需要引用不同的类.因为有着不同的数据引擎. access:usin ...

  2. 备份和还原SQL Server及压缩Access数据库

    功能说明:备份和恢复SQL Server数据库 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2007-1-1 * 当使用SQL Server时,请引用 COM组件中的,SQLDMO. ...

  3. Access数据库导入到SQL Server 2005 Express中

    安装好SQL Server 2005 Express后,再安装SQL Server Management Studio Express CTP就可以很方便的使用控制台进行数据库的管理.但SQL Ser ...

  4. Access数据库和SQL Server数据库在实际应用中的区别

    1.在Access数据库中简历查询语句的步骤 --> 打开你的MDB --> 在数据库窗口中,点击“查询”,或在“视图”菜单中选择“数据库对象”-> “查询” --> 点击数据 ...

  5. SQL Server,Access数据库查询易混点和C#中parameter指定参数长度的优缺点

    在学校的时候就经常做一些网站,所以这次在公司实习,组长第一次给了一个企业的网站还是很快的完成了.中间并没有遇到什么大的问题,但是还是遇到了两个新手非常容易混淆的小问题,所以拿出来跟大家分享一下. 主要 ...

  6. .net(C#)在Access数据库中执行sql脚本

    自己写的一个工具类,主要是业务场景的需要. 主要有两个功能: ①执行包含sql语句的字符串 ②执行包含sql语句的文件 调用方式 /// <summary> /// 执行sql语句 /// ...

  7. 用SQL语句创建和删除Access数据库中的表;添加列和删除列

    用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...

  8. 用ASP.NET/C#连接Access和SQL Server数据库

    连接Access 首先看一个例子代码片断:程序代码: ------------------------------------------------------------------------- ...

  9. asp.net连接SQL server,SQLLite,Oracle,Access数据库

    asp.net中连接数据库有两种方式为appSettings和connectionStrings connectionStrings比较常用,所以只讲一下connectionStrings方式的连接 ...

随机推荐

  1. Deeplab v3+的结构的理解,图像分割最新成果

    Deeplab v3+ 结构的精髓: 1.继续使用ASPP结构, SPP 利用对多种比例(rates)和多种有效感受野的不同分辨率特征处理,来挖掘多尺度的上下文内容信息. 解编码结构逐步重构空间信息来 ...

  2. 使用Navicat定时备份mysql数据库和创建报表并邮件自动发送

    数据库备份在现代计算机高速发展的今日变得日益重要,程序员往往因为不重视而忽略备份数据,导致数据丢失,造成非常严重的后果.定时备份无疑是解决备份的最好的途径,本文主要使用Navicat来自动备份数据库和 ...

  3. 解救小哈——dfs深搜

    问题描述: 小哈去玩迷宫,结果迷路了,小哼去救小哈.迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径 ...

  4. JavaScript 原型链学习(一)原型对象

    在JavaScript中创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有的实例共享的属性和方法.如果按照字面意思来理解 ...

  5. GO格式化打印

    General(通用占位符)  Integer整形  Integer width(指定长度的整型,以5为例)  Float(浮点数)  String(字符串)  String Width ( ...

  6. 如何将数据库中的数据导入到Solr中

    要使用solr实现网站中商品搜索,需要将mysql数据库中数据在solr中创建索引. 1.需要在solr的schema.xml文件定义要存储的商品Field. 商品表中的字段为: 配置内容是: < ...

  7. IDEA设置(含永久破解IDEA)

    永久破解IDEA(很多license服务器都是非永久性的,太麻烦了) https://www.cnblogs.com/iathanasy/p/9469280.html,亲测. 在我们为 IDEA 等编 ...

  8. 使用Angular2的Http发送AJAX请求

    使用Angular2的Http发送AJAX请求 Angular的文档并不详细,甚至API文档也有一些错误.经过查阅资料并经大量实验,终于明确了Angular的Http发送Ajax请求的方式方法.本文描 ...

  9. 01:云计算三种服务模式SaaS、PaaS和IaaS

    1.1 云计算 1.什么是云计算 1. 云计算服务是指将大量用网络连接的计算资源统一管理和调度,构成一个计算资源池向用户按需服务. 2. 用户通过网络以按需.易扩展的方式获得所需资源和服务(资源包括网 ...

  10. 创成汇丨投脑风暴·创心不止|路演日 第2期,寻IT创业者

    创成汇丨投脑风暴·创心不止|路演日 第2期   无畏荆棘之路的风雨 誓做浪潮之巅的勇者 你说,创业是一场孤注一掷的较量 你说,创新从来都是与过去battle 你还说,坚持总是比开始更让你难以琢磨 所以 ...