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. 【Mac】-NO.100.Mac.1.java.1.001-【Mac Install multiple JDK】-

    Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...

  2. 公众号获取unionid

    然后在微信客户端输入unionid接口的地址(比如发给文件传输助手www.XXX.COM/unionid.php),随便给别人发过去,在点击该链接,就能看到打印的accessToken,openid, ...

  3. python数据结构-如何实现用户的历史记录功能

    如何实现用户的历史记录功能 使用collections中的deque from collections import deque dq = deque([], 5) dq.append(1) dq.a ...

  4. Monte Carlo simulated annealing

    蒙特·卡罗分子模拟计算 使用蒙特·卡罗方法进行分子模拟计算是按照以下步骤进行的: 1. 使用随机数发生器产生一个随机的分子构型. 2. 对此分子构型的其中粒子坐标做无规则的改变,产生一个新的分子构型. ...

  5. web项目的一些常用设置

    给项目取别名: 03

  6. POJ 2533 裸的LIS

    A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given ...

  7. Linux基础命令---lpc打印机控制

    lpc lpc指令用来控制打印机,它提供了一个命令行,用户可以输出命令来控制打印机.如果命令行上没有指定命令,lpc将从标准输入中显示提示符并接受命令. 此命令的适用范围:RedHat.RHEL.Ub ...

  8. 删除本地git的远程分支和远程删除git服务器的分支

    在项目中使用git管理代码后,有些时候会创建很多不同名称的分支,以此区分各个分支代码功能. 而随着代码的合并,以前的分支就可能不再需要保存了,所以就要对没有用的分支进行删除,包括紧急回滚时从中抽取某一 ...

  9. SolrJ的入门

    什么是SolrJ? solrj是访问solr服务的java客户端,提供索引和搜索的请求方法, SolrJ和图形界面操作的区别就类似于数据库中使用jdbc和mysql客户端的区别一样. 我在测试Solr ...

  10. P3628 [APIO2010]特别行动队(斜率优化dp)

    P3628 [APIO2010]特别行动队 设$s[i]$为战斗力前缀和 显然我们可以列出方程 $f[i]=f[j]+a*(s[i]-s[j])^{2}+b*(s[i]-s[j])+c$ $f[i]= ...