2. MySQL 简单操作与复杂操作

知识要点:

2.1 数据库的认知

2.2 Navicat 管理工具

2.3 数据类型

2.4 SQL基础查询语言

2.5 SQL 函数

2.6 SQL语句执行顺序

2.7 SQL多表联结查询

2.1 数据库的认知

数据库

按照数据结构来组织、存储和管理数据的仓库;

保存有组织数据的容器;

说人话:用来存放数据的一个特殊文件。

数据库的由来

截止至目前,Excel 最多存放104万行的数据;存放的数据有限,数据库由此诞生。

数据库的类型

类型 代表
商用数据库 Oracle、SQL Server、DB2
开源数据库 MySQL、PostgreSQL
桌面数据库 微软 Access

数据库的构成

术语 含义
表中的一个字段
表中的一个记录
结构化的信息;行和列组成
2. MySQL 简单操作与复杂操作
数据库 多张表组成一个数据库
  2. MySQL 简单操作与复杂操作
总结 行和列构成表,一张张表构成数据库,MySQL里面可以存多个数据库
  2. MySQL 简单操作与复杂操作

MySQL 里面可以存放多少数据

MySQL 每个数据库最多可创建20亿个表;

一个表允许定义1024列;

SQL对每个表中行的数量没有直接限制,但它受数据库存储空间的限制。

SQL 简介

SQL:一种数据查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库系统。

数据分析师最常用的是:数据查询语言、数据操作语言、数据定义语言;也就是,增删改查;

最常用的是“查”,取数。

2.2 Navicat 管理工具

熟悉Navicat的基本操作:链接数据库;新建数据库、删除数据库;新建数据表、删除数据表;数据增删改查;数据库的备份与恢复;数据表的导入与导出。

2.3 数据类型

数据类型 说明
常用的数据类型
int 整数
float 小数、浮点数
varchar 文本
date 日期
数值型
int(size) 整数,在括号中规定最大位数
float(size,d) 带有浮动小数点的小数字,在括号中规定最大位数
double(size,d) 带有浮动小数点的大数字,在括号中规定最大位数
日期型
YEAR() 2位或者4位格式的年
DATE() 日期  格式:YYYY-MM-DD
TIME() 时间  格式:HH:MM:SS
DATETIME() 日期和时间的组合  格式:YYYY-MM-DD  HH:MM:SS
TIMESTAMP() 时间戳
文本型
char(n) 保存固定长度的字符串(可包含字母、数字以及特殊符号)
varchar(n) 保存可变长度的字符串(可包含字母、数字以及特殊符号)

2.4 SQL基础查询语言

SQL 常用命令的书写顺序

顺序 命令
1 select *(必须)
2 from  表
3 where 条件
4 group by 字段
5 having 条件
6 order by  字段
7 limit  限制数据条数
SQL 对大小写不敏感;命令一般大写;表名、字段名一般小写。
SQL基础查询语句
序号 功能 要点
检索数据(select语句)
语法结构:select * from 表名
1 检索单列 select 列名 from 表名

检索“投资表”中的“投资金额”investment列

select investment from investmenttab;

2 检索多列 用“逗号”隔开

检索“投资表”中的“投资金额”investment列与“投资期限”investdays列

select investment, investdays from investmenttab;

3 检索所有列 检索所有列时,用“*”

检索“投资表”中的所有

select * from investmenttab;

4 限制检索结果 限制检索用 limit

检索“投资表”前3行的数据

select * from investmenttab limit 3;

5 去重检索 去重用 distinct

检索“投资表”中的“投资期限

select distinct investdays from investmenttab;

限定条件(where语句)
语法结构:select * from 表名 where 条件
6 数值判断 大于(>)、小于(<)、等于(=)、不等于(<>)、大于等于(>=)、小于等于(<=)、范围(between and)

检索出“投资表”中的“投资金额大于100000的投资信息”。

select * from investmenttab where investment > 100000;

7 逻辑判断 and、or、not、in()

检索出“投资表”中的“投资金额大于100000且投资期限为360天的投资信息”。

select * from investmenttab where investment > 100000 and investdays = 360;

8 模糊判断

like、%、_(下划线)等

like "%财%",表示只要字段中含有“财”字,都输出.

9 案例操作

从“投资表”中筛选出投资期限为270或者360,在2018年1月1日至2019年12月31日期间投资,并且投资金额在100000以上(含100000)的投资信息。

select * from investmenttab where investdays in (270,360) and investment >= 100000 and investmentdate between "2018-01-01" and "2019-12-31";

 10 SQL创建计算字段:计算字段(加减乘除)  
语法结构:select 字段1+字段2 as "合计",  字段1-字段2 as "相差",  字段1*字段2 as "乘积",  字段1/字段2 as "除以"  from 表名 where 条件(非必须)

 

案例操作

 在“投资表”中添加新字段:投资收益列income 投资收益计算公司如下:

投资收益income=投资金额investment*(投资收益率investrate/360)*投资期限investmentdays

select *,investment *(investrate/360)*investmentdays as income from investmenttab;

 11 SQL创建计算字段:拼接字段(cancat)
语法结构:select concat(字段1,字段2) as '新字段名' from 表名  
案例操作

在“用户表”中加入新拼接字段,把省份province和城市city拼接作为新拼接字段

select *,concat(province,city) from users;

select *,concat(province,"-",city) from users;

12 数据分组(group by
语法结构:select 字段,计算字段 from 表名 where 查询条件  group by 字段
案例操作

计算“各类投资期限投资产品”的投资金额

select investdays,sum(investment) from investmenttab group by investdays;

13 数据过滤(having
语法结构:select 字段,计算字段 from 表名 where 查询条件  group by 字段 having 过滤条件
案例操作

计算“各类投资期限”投资金额,显示投资金额大于1500000000(15亿)的投资信息

select investdays,sum(investment) from investmenttab group by investdays having sum(investment)>1500000000;

14 结果排序(order by)  [ 升序:asc(默认);降序:desc ]
语法结构:select 字段,计算字段 from 表名 where 查询条件  group by 字段 having 过滤条件 order by 字段 desc
案例分析

计算“各类投资期限理财产品”的投资金额,显示投资金额大于1500000000(15亿)的投资信息,并按投资金额从高到低降序排序

select investdays,sum(investment) from investmenttab group by investdays having sum(investment)>1500000000 order by sum(investment) desc;

2.5 SQL 函数

序号 函数 描述
数值型函数
  sum(列名) 返回某列的总和
  avg(列名) 返回某列的平均值
  min(列名) 返回某列的最低值
  max(列名) 返回某列的最高值
  count(列名) 返回某列的行数(不包含null值)
  count(*) 返回被选行数
  count(distinct 列名) 返回相异结果的数目
  abs(列名) 返回绝对值
  sqrt(列名) 返回平方
案例操作

计算“各类投资期限理财产品”的投资金额,以及投资数量。

select investdays,sum(investment),count(investmentlistid) from investmenttab group by investdays;

 
时间日期型函数

时间格式

datetime - 格式:yyyy-mm-dd hh:mm:ss

date - 格式:yyyy-mm-dd

year - 格式:yyyy

 
  now() 返回当前的日期和时间
  curdate() 返回当前的日期 
  curtime() 返回当前的时间
  date() 提取日期或日期/时间表达式的日期部分                             
  extract() 返回日期/时间的单独部分
  date_add() 给日期添加指定的时间间隔
  date_sub() 从日期减去指定的时间间隔
  datediff() 返回两个日期之间的天数
  date_format() 用不同的格式显示日期/时间
常见的日期命令 select now() 查看现在的日期和时间  
select date(now()) 日期格式  
select curdate() 查看现在的日期  
select month(now()) 返回当前的月份  
select year(now()) 返回当前的年份  
select date_format(now(),'%Y-%m-%d') 年月日格式  
select date_format(now(),'%Y-%m') 年月格式;大写为英文,小写为汉字  
select date_add(now(),interval 1 day) 日期相加,加一天,加一周  
select date_sub(now(),'%Y-%m') 日期相减,减一天,减一周  
select datediff('2019-08-31','2019-01-01') 日期间隔多少天  
案例操作

1.查看“投资结束日期”

select *,date_add(investmentdate,interval investdays day) as '投资结束日期' from investmenttab;

2.查看“投资月份”

select *,date_format( investmentdate,'%m' ) as '投资月份' from investmenttab;

 
文本型函数  
  left(列名) 返回左边的字符
  right(列名) 返回右边的字符
  length(列名) 返回某字段的长度

SQL函数:控制语句:IF 函数

语法结构:IF(condition,true,false)

 
  案例操作

查询投资表,增添新列“投资额度类型”,投资金额大于等于100000的为高收入,投资金额小于100000的为低收入。

select *,if(investment>=100000,'高收入','低收入') as invest_res from investmenttab;

 

SQL函数:控制语句:(case when)条件函数

语法结构:

case

when 条件1 then '结果1' 

when 条件2 then '结果2' 

...

else '默认值'  

end as '新字段名'

 
  案例操作

查询投资表,增添新列“投资额度类型”,投资金额大于等于100000的为高收入,投资金额大于等于50000小于100000的为低收入,投资金额小于50000的为低收入。

select *,

case

when investment >= 100000 then '高收入'

when investment >= 50000 and investment < 100000 then '中收入'

else '低收入'

end as type

from investmenttab;

 

SQL函数:控制语句:数据透视表

case when 与 group by 搭配使用,完成数据透视表功能

 
  案例操作

select investdays,

count( case when investment >= 100000 then '高收入' end) as '高收入'

count( case when investment >= 50000 and investment < 100000 then '中收入' end) as '中收入'

count( case when investment < 50000 then '低收入' end) as '低收入'

from investmenttab

group by investdays;

 

2.6 SQL语句执行顺序

*value *value
SQL 语句执行顺序:SQL语句结构

 

语句结构:

select * from 表名 where 条件 group by 字段 having 条件 order by 字段 limit 限制数据条数

(SQL对大小写不敏感;命令一般大写,表名、字段一般小写)

SQL 语句执行顺序:SQL语句执行顺序

1.确定数据源

from

join

on

2.过滤数据

where

group by

having

3.查询数据

select 
4.显示数据

distinct

order by

limit

2.7 SQL多表联结查询

为什么要联结?

一张表里有一部分信息,另外一张表有其他的信息,我们想要所有的信息,所以要把两张表做关联。

 序号 类型 
union 纵向连接:union用于把来自许多select语句的结果组合到一个结果集合中,也叫联合查询。
案例操作

将投资表(investmenttab)、投资2015年表(investmenttab2015)联结成一张大表.

-- 连接所有 --

select * from investmenttab2015 union all select * from investmenttab;

-- 去重连接(当数据与类型一致,认定为重复) --

select * from investmenttab2015 union select * from investmenttab;

-- 添加条件依旧可以连接 --

select * from investmenttab2015 where investment > 100000 union all select * from investmenttab where investdays = 360;

横向连接:union用于把来自许多select语句的结果组合到一个结果集合中,也叫联合查询。
 

内连接 - join:和 inner join 一样;

表1 join 表2,返回表1和表2 共同的行。

左连接 - left join:

表1 left join 表2,以表1为基础,匹配表2的相关信息;用得最多;即使右表中没有匹配,也从左表返回所有的行。

右连接 - right join:

表1 right join 表2,以表2为基础,匹配表1的相关信息;即使左表中没有匹配,也从右表返回所有的行。

全连接 - MySQL 中无直接实现全连接 

案例操作

将投资表、用户表联结成一张大表,显示只有相同userid的数据。

-- 可以简写 --

select * from investmenttab inner join users on investmenttab.userid = users.userid;

可简写为:select * from investmenttab join users using(userid);

-- inner 可加可不加 --

select * from investmenttab join users on investmenttab.userid = users.userid;

-- on 可以连接不同字段 [belongtobusiness 与 departmentid 必须是同一个信息]--

select * from users join dept on users.belongtobusiness = dept.departmentid;

   
上一篇:使用Hive SQL窗口函数进行商务数据分析


下一篇:【Unity】Particle System 下雪粒子特效