1.基本概念
关系型数据库(RDBMS):是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
SQL(Structured Query Language):结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等所有的关系型的数据库。
数据类型:
整数:int,bit
小数:decimal
字符串:varchar,char
日期时间: date, time, datetime
枚举类型(enum)
约束:主键primary key、非空not null、惟一unique、默认default、外键foreign key
回购率:本月购买用户中有多少用户下个月又再次购买
复购率:当月购买了多次的用户占当月用户的比例
2、不熟悉的操作
查看所有数据库:show databases;
使用数据库:use数据库名;
查看当前使用的数据库:select database();
创建数据库:create database 数据库名 charset=utf8;
删除数据库:drop database 数据库名
if条件判断:IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。
限制查询位置:select * from表名limit start,count
逻辑删除(先增加字段,在做更新):
alter table students add is_delete bit default 0;
update students set isdelete=1 where id = 1;
group by 和group_concat()连用:
select gender,group_concat(name) from students group by gender;
3.数据分析实践练习
困难一:代码框架
在做较为复杂的查询时,很多时候都要进行多表连接、多次子查询、自联结,有时候要交叉使用。
以回购率这个较为复杂的查询为例,要查询3月的回购率,分三步进行代码构建:
第一步:查询每年每月的每个id用户的消费情况
第二步:相邻月用户进行关联,能关联上的说明是回购用户
第三步:统计每个月的消费人数情况并且得到新的计算字段(回购率)
困难二:时间数据处理(探索中)
给出的数据中为datetime标准格式,需要提取年月日进行统计。实际分析中的数据一般是多年的完整月度数据,用year()函数提取并不能精确说明问题。因此考虑使用date_format()函数对时间格式进行转化。
此过程中发现,如果使用date_format(paidTime,'%Y-%m')的形式进行转化,发现实际查询过程中次月的回购用户并没有链接到上一月的数据中。
date_format(paidTime,'%Y-%m') date_format(paidTime,'%Y-%m-01')对数据进行探索:select distinct paidtime from orderinfo
4.报错解决
在workbench中导入SQL文件:https://blog.csdn.net/u010801439/article/details/78762387
workbench中出现You are using safe update mode 解决方法:https://blog.csdn.net/wade3015/article/details/89436489
Every derived table must have its own alias(sql语句错误解决方法) :https://blog.csdn.net/qq_32863631/article/details/83024322
网友评论