玩转大数据数据库呆鸟的Python数据分析

【数据分析】【MySQL】快速入门+案例+代码+命令整理+GIF

2020-04-18  本文已影响0人  卯月七

1.SQL的语句顺序(理论)

SELECT [ALL|DISTINCT] <目标表达式>....
FROM <表名或者视图名>..
[WHERE <条件表达式>]
[GROUP BY <列名 1> [HAVING] <条件表达式>]
[ORDER BY <列名 2> [ASC|DESC]]

2.SQL数据库的选择命令

2.1 数据库的选择(实操)

作用 命令
查看当前有哪些数据库 show databases;
选择数据库 use database_name;
查看当前使用的是哪个数据库 select database();
新建数据库 create database database_name;
删除数据库 drop database database_name;
数据库选择演示

2.2 数据库的表格选择命令(实操)

作用 命令
查看当前数据库有哪些表格 show tables;
在当前数据库新建表格 create table table_name(字段名1 字段类型, 字段名2 字段类型);
为当前数据库的表格插入数据 insert into 表格名 values ('字段名1的值',字段名2的值,'字段名3的值');
更新当前数据库某个表的数据 update 表格名 set 字段名1="值1" where 字段名1="值2";
删除当前数据库某个表的数据 delete from 表名 where name="值1";
删除当前数据库的某个表格 drop table table_name;
表格选择演示

3. 数据库建表约束条件(理论+说明)

作用 详细 说明 命令
主键约束 单一主键 给某个字段添加约束,使得该字段不重复且不为空 create table user(
   id int primary key,
   name varchar(4));
联合主键 多个字段加起来唯一 create table user2(
   id int,
   name varchar(4),
    password varchar(20),
   primary key(id,name));
自增约束 控制某个值自动增长 create table user3(
   id int primary key auto_increment,
   name varchar(4));
唯一约束 单一约束 约束字段的值不能重复 create table user4(
   id int,
   name varchar(4) unique);
联合唯一约束 多个字段加起来的值唯一 create table user5(
   id int,
   name varchar(4),
   unique(id,name));
非空约束 非空约束 修饰字段的值不能为空 create table user6(
   id int,
   name varchar(4) not null);
默认约束 默认约束 当我们传入字段值的时候,如果没有传值,就会使用默认值 create table user7(
   id int,
   name varchar(4),
   age int default 23);
外键约束 外键约束 针对两张表:主表和附表,附表会参考主表的某个字段作为两张表的连接 create table coutries(
   id int primary key,
   name varchar(10));

create table provinces(
   id int primary key,
   name varchar(10),
   country_id int,
   foreign key(country_id) references country(id));
修改约束 添加约束 为字段加上新的约束 alter table user4 add primary key(id);
修改约束 修改字段的约束(也可视作添加约束) alter table user6 modify id int primary key auto_increment;
删除约束 删除约束 删除某个字段的约束 alter table user3 drop primary key;

4. 数据库的设计范式(理论+实例)

5. 数据库查询(重点+实操)

5.1 创造数据(案例+演示)

5.1.1 说明

首先使用MySQL创建三个简单的表模拟一个跨国公司的人员薪资表(极简版本),会用到Python自动生成数据的一个自定义算法,因此需要确保自己安装有python,同时安装有pandas、sqlalchemy、pymysql、jupyter notebook三方包。(后续写数据分析的总结也会用到,因此建议直接安装一个Anaconda到电脑上,就可以一次性解决上述问题)

5.1.2 创建表
-- 国家表
create table countries(
  id int ,
  name varchar(10),
  primary key(id)
);

-- 部门表
create table departments(
  id int primary key,
  name varchar(10)
);

-- 人员薪资表
create table staff(
  id int primary key,
  name varchar(10),
  job varchar(10),
  age int(3),
  salary decimal,
  country_id int,
  department_id int,
  foreign key(country_id) references countries(id),
  foreign key(department_id) references departments(id)
);
5.1.3 填充数据
5.1.4 生成数据

复制上方代码到对应的mysql命令行,jupyter notebook中,可以自行生成。


生成数据演示

5.2 初级查询(代码+不演示)

5.3 子查询(实例+代码+演示)

5.3.1 说明

子查询可以理解为多个查询的堆叠,将上一个查询的结果作为下一个查询的筛选条件或者作为下一个查询的数据来源。

5.3.2 实例和演示
求每个部门的平均薪资 各部门以卯月为姓的平均薪资和id

5.4 多表链接查询

查询各部门的平均薪资及部门名称 查找在中国工作的,组织部的姓卯月的员工的信息

5.5 综合查询

查询薪资在5万及7万间的员工信息 薪资在5万以上,7万以下员工中以卯月为姓的员工各部门平均薪资

-- 查询高于财务部以卯月为姓的员工的平均薪资的员工信息

-- 首先,我们可以找到财务部以卯月为姓的员工的平均薪资
select avg(salary)
from staff,departments 
where departments.id = staff.department_id and departments.name = '财务部' and staff.name like '卯月%';


-- 之后,将平均薪资作为查询条件,找薪资高于平均薪资的员工
select * 
from staff
where salary > (
  select avg(salary)
  from staff,departments 
  where departments.id = staff.department_id and departments.name = '财务部' and staff.name like '卯月%');
查询高于财务部以卯月为姓的员工的平均薪资的员工信息 国家和部门的联合信息

5.6 连接查询

作用 详细 说明 命令
内连接 内连接 查找两张表都有的内容 inner join

join
外连接 左连接 只显示左边表有的相关数据 left join

left outer join
右连接 只显示右边表有的相关数据 right join

right outer join
完全外连接 两边表都显示 full join

full outer join
5.6.1 创建数据

创建两张表(极简版本):
一张表是课程表,包含课程编号,课程名称;
一张表是教师表,包含教师编号、教师姓名,课程编号;

create table courses(
  id int,
  c_name  varchar(10)
);

insert into courses values
  (1,'语文'),
  (2,'数学'),
  (3,'英语'),
  (4,'政治'),
  (5,'历史'),
  (6,'地理'),
  (7,'物理'),
  (8,'生物'),
  (9,'化学');

create table teachers(
  id int,
  c_id int,
  t_name varchar(10)
);

insert into teachers values
  (1,3,'卯月七'),
  (2,5,'卯月初一'),
  (3,6,'卯月初二'),
  (4,1,'卯月初三'),
  (5,2,'卯月初四'),
  (6,5,'卯月初五'),
  (7,1,'卯月初六'),
  (8,2,'卯月初七'),
  (9,3,'卯月初八'),
  (10,4,'卯月初九'),
  (11,3,'卯月十五');
5.6.2 内连接

查询两张表的交叉数据

-- 对于courses表和teachers表来说,在teachers表中没有7、8、9的课程编号,因此不会出现物理、生物、化学三科。
select * from teachers inner join courses on teachers.c_id = courses.id;
内连接
5.6.3 外连接
左连接 右连接 mysql全连接的实现

说明

上一篇下一篇

猜你喜欢

热点阅读