目录
基础操作
分页
链接查询
当查询结果的列来源于多张表时,需要将多张表连接成一个大的数据集,再选择合适的列返回MySQL支持的三种类型的连接查询,分别是:
- 内连接查询。查询的结果为两个表匹配到的数据
- 右连接查询。查询的结果为两个表匹配到的数据,右表特有的数据,对于左表不存在的数据使用null填充
- 左连接查询。查询的结果为两个表匹配到的数据,左表特有的数据,对于右表不存在的数据使用null填充
- 语法:select * from 表1 inner/right/left join 表2 on 表1.列 = 表2.列
数据库现在有下面两张表
一、内连接
将两个表内连接
上面查询的结果有两列相同的班级ID,仅保留一列
只显示学生名字和所在班级的查询
像上面的操作命令,反复的写表的名很长,可以给表AS一个别名
二、左连接
以左边的表为基准,右边表中找不到的对应的值就以null填充
在下面的例子中,我们利用左连接的查询结果做查询,使用having
如果是在原表中进行查询的话使用where
三、右连接
右连接不经常使用,若使用的话,也是采用左连接的办法,把左右两边的数据表调换以下位
自关联
在一个数据表中,其中的一列关联着另外一个
常用场景:省市县选择、公司领导部门员工管理
创建一个表:
向表中导入SQL文件,第一步,在终端中切换到SQL文件的位置下;第二步,输入下图命令
第三步,选择一个数据库,查看数据表,输入下图命令。应该注意导入的表与数据库现有的表名字一致
查找一共有多少个省份直辖市
查找山东省有多少个市
接着查找青岛市有多少个区
像上面的查询,加入我们的需求是要查询青岛市有多少个区,就要像上面分成好多步查询
那么有没有一步到位的查询方法呢
我们先想一想内查询的方法,假设城市为一个表,区县为一个表,采用内连接的办法。城市的每一个数据都有一个城市ID,区县的每一个数据也有自己对应的城市ID。
下面查询山东省有多少个市
济南市有多少个区
数据库设计
在开发中有很多设计数据库的软件,常用的有power designer、db designer等,这些软件可以直观的看到实体与实体之间的关系
范式
三范式
一般需要遵守三范式即可
第一范式1NF normal form
强调的是列的原子性,列不能再分成其他列
第二范式2NF
首先要满足1NF,再包含两个部分,一是表必须要有一个主键,二是没有包含主键中的列必须完全依赖于主键,而不能只依赖主键的一部分
第三范式3NF
首先满足2NF,另外,非主键列必须直接依赖于主键,不能存在传递依赖。
最终表
E-R模型
e表示entry实体,设计实体就像定义一个类,指定从哪些方面描述对象,一个实体转换为数据库中的一个表
r表示relationship关系,关系是描述两个实体之间的对应规则,关系的类型包括一对一,一对多,多对多
关系也是一种数据,需要通过一个字段存储在表中
实体A对实体B为1对1,则在表A或表B中创建一个字段,存储另一个表的主键值
实体A对实体B为1对多,在表B中创建一个字段,存储表A的主键值
实体A对实体B为多对多,新建一张表C,这个表只有两个字段,一个用于存储A的主键值,一个用于存储B的主键值
MySQL与Python交互
准备数据
注意:在插入数据的时候,每一列的值要和创建表时候的类型和约束相一致
SQL演练
用到了自查询
接着上面的例子,笔记本中最贵的是4999.下面我们插入一个老王电脑,价格也为4999
上图的结论是对的,就像在商场中同价位的不同品牌产品很正常
把上图中分开的两个笔记本信息放在一起
数据操作演练:拆分为多个表
外键
下面来了解一下外键的概念
首先做一下数据准备
看一下两个表的描述信息,在cata_name和另一个表中的id,可以看到type是不一样,把第一个表中的cate_name更改一下
改之后,type变为一致的了
如下图,我们在商品表中加入了一行记录,类型 为12.但是在类型表中没有ID为12的记录
拆分品牌表
查看表约束
58到家 公司对数据库的规范
Python操作MySQL步骤
查询一行数据
用面向对象的思想查询“京东”数据库数据
有一个“JD”数据库,实现:用户可以根据自己的需求来选择查询数据库中的数据
运行结果:
增删改操作
对上面的例子进行添加一个信息的操作,部分代码:
运行结果: