Python学习 Day10

MySQL

11、分组查询

1、roup by的使用

group by 可用于单个字段分组,也可用于多个字段分组

--根据gender字段分组 select gender from student group by gender; 指定以指定字段进行分组,select后只能出现该字段 --根据gender和name字段分组 select name,gender from student group by name,gender;

2、group by + group_concat()的使用

group_concat(字段名):统计每个分组指定字段的信息集合,每个信息之间使用逗号进行分割。 select gender,group_concat(name) from student group by gender; roup_concat(name)指的是统计性别为男的人的姓名有哪些 group_concat()相当于聚合函数函数

3、group by+聚合函数

select gender,avg(age) from student group by gender;

4、group by + HAVING

HAVING作用和where类似都是过滤数据的,但HAVING是过滤分组数据的,只能用于group by 根据性别汇总所有人数并统计人数大于2的性别 select gender,count() from student group by gender HAVING count() > 2;

5、group by + WITH ROLLUP

WITH ROLLUP的作用是:在最后记录后面新增一行,显示select查询时聚合函数的统计和计算结果 根据gender字段进行分组,汇总总人数: select gender,count(*) from student group by gender with rollup; 根据gender字段进行分组,汇总所有人的年龄:(不是求和) select gender, group_concat(age) from student group by gender with rollup;

12、内连查询

连接查询可以实现多个表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成。 连接查询分为: 1、内连接查询 2、左连接查询 3、右连接查询 4、自连接查询

1、内连接查询

查询两个表中符合条件的共有记录 语法: select 字段 from 表1 inner join 表2 on 表1.字段 = 表2.字段 说明: inner join 就是内连接查询关键字 on 就是连接查询条件

内连接根据连接查询条件取出两个表的‘交集’。

准备两个表classes和student

image.png

image.png

当前python1数据库中包含两张表,即:

image.png

使用内连接查询学生表和班级表 select * from student as s inner join classes as c on s.c_id = c.id; image.png

只显示学生姓名和班级 select s.name,c.name from student as s inner join classes as c on s.c_id = c.id; image.png

2、左连接

以左表为主根据条件查询右表数据,如果根据条件查询右表数据不存在使用null值填充。左连接查询时,左表的数据都会存在,右表内无数据时在返回的结果会是空值。 左连接语法: select 字段 from 表1 left join 表2 on 表1.字段 = 表2.字段 说明: 1、left join 就是左连接查询关键字。 2、on就是连接查询条件 3、表1是左表,表2是右表。

在student表中添加一行数据,使班级为空 image.png

select * from student s left join classes c on s.c_id=c.id; image.png

3、右连接

以右表为主根据条件查询左表数据,如果根据条件查询左表数据不存在使用null值填充。右连接查询时,右表的数据都会存在,左表内无数据时在返回的结果会是空值。 左连接语法: select 字段 from 表1 right join 表2 on 表1.字段 = 表2.字段 说明: 1、right join 就是左连接查询关键字。 2、on就是连接查询条件 3、表1是左表,表2是右表。

select * from student s right join classes c on s.c_id=c.id; image.png

4、自连接

左表和右表是同一个表,根据连接查询条件查询两个表中的数据。 终端内执行sql文件,用source 文件

5、子查询

在select语句中,嵌入了另外一个select语句,那么内嵌入的select语句称之为子查询语句,外部那个select语句则为主查询。

主查询和子查询的关系: 1、子查询是嵌入到主查询中。 2、子查询是辅助主查询的,要么充当条件,要么充当数据 3、子查询是可以独立存在的语句,是一条完成整的select语句。

查询大于平局年龄的学生 select * from student where age>(select avg(age) from student);

image.png

13、数据库设计三大范式

范式:对设计数据库提出的一些规范,目前有迹可循的共有8种范式,一般遵循3范式即可。 1、第一范式(1NF):强调的是列的原子性,即列不能够在分成其他几列。 2、第二范式(2NF):满足1NF,另外包含两部分内容,意识表必须有一个主键,二是非主键字段必须完全依赖主键,而不能只依赖主键的一部分 3、第三范式(3NF):满足2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列A依赖于非主键列B,非主键列B依赖于主键的情况。

14、E-R模型

E-R模型即实体-关系模型,E-R模型就是描述数据库存储数据的结构模型。

15、外键约束

1、作用:

外键约束:对外键字段的值进行更新和插入时会引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性。

2、对于已存在的字段添加外键约束

为c_id字段添加外键约束 student表中的c_id用的是classes表中的id数据 alter table student add foreign key(c_id) references classes(id);

3、在创建数据表时设置外键约束

CREATE TABLE teacher ( id int unsigned NOT NULL AUTO_INCREMENT, name varchar(20) COLLATE utf8mb4_general_ci NOT NULL, s_id int unsigned NOT NULL, PRIMARY KEY (id,s_id DESC), KEY 1 (s_id), CONSTRAINT 1 FOREIGN KEY (s_id) REFERENCES school (id) ); 在创建表时加上 foreign key('s_id') references school('id')

4、删除外键

alter table teacher drop FOREIGN KEY 1(外键名称) CREATE TABLE teacher ( id int unsigned NOT NULL AUTO_INCREMENT, name varchar(20) COLLATE utf8mb4_general_ci NOT NULL, s_id int unsigned NOT NULL, PRIMARY KEY (id,s_id DESC), KEY 1 (s_id) );

5、修改表结构

alter table 表名 change 旧列名 新列名 int not null,change brand_name brind_id int not not null;

alter table 可以同时修改多个字段信息

Python与MySQL交互

pymysql的使用

1、导入pymysql包

import pymysql

2、创建连接对象

调用pymysql模块中的connect()函数来创建来连接对象。 conn = connect(参数列表) 参数host:连接的mysql主机,如果是本机则为 'localhost' 参数port:连接的mysql主机端口,默认是3306 参数user:连接的用户名 参数password:连接的密码 参数database:数据库的名称 参数charset:通信采用的编码方式,推荐使用utf8

3、获取游标对象

获取游标对象的目标就是执行sql语句,完成对数据库的增删改查操作

cur = conn.cursor()

游标操作使用说明: 1、使用游标执行sql语句:cur.execute(要执行的sql语句)执行sql语句,返回受影响的行数,主要执行insert、update、delete、select语句 2、获取查询结果集中的一条数据:cur.fetchone()返回一个元组,如(1:“zhangsan”) 3、获取查询结果集中的所有数据:cur.fetchall()返回一个元组,如(1:“zhangsan”),(2:“lisi”) 4、关闭游标:cur.close()表示和数据库操作完成

4、使用

1、查询 image.png

2、增删改

增 image.png 改 image.png

删 image.png

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP