python自动化(一)基础能力:8.python基础上之数据库

一.MySQL简介

python自动化(一)基础能力:8.python基础上之数据库_第1张图片
python自动化(一)基础能力:8.python基础上之数据库_第2张图片
python自动化(一)基础能力:8.python基础上之数据库_第3张图片

二.安装MySQL

python自动化(一)基础能力:8.python基础上之数据库_第4张图片
python自动化(一)基础能力:8.python基础上之数据库_第5张图片
python自动化(一)基础能力:8.python基础上之数据库_第6张图片
python自动化(一)基础能力:8.python基础上之数据库_第7张图片
python自动化(一)基础能力:8.python基础上之数据库_第8张图片
python自动化(一)基础能力:8.python基础上之数据库_第9张图片
python自动化(一)基础能力:8.python基础上之数据库_第10张图片
python自动化(一)基础能力:8.python基础上之数据库_第11张图片
python自动化(一)基础能力:8.python基础上之数据库_第12张图片
python自动化(一)基础能力:8.python基础上之数据库_第13张图片
python自动化(一)基础能力:8.python基础上之数据库_第14张图片
python自动化(一)基础能力:8.python基础上之数据库_第15张图片

三.SQL语句

1.什么是SQL语句

python自动化(一)基础能力:8.python基础上之数据库_第16张图片
python自动化(一)基础能力:8.python基础上之数据库_第17张图片
python自动化(一)基础能力:8.python基础上之数据库_第18张图片

2.数据库操作语句

python自动化(一)基础能力:8.python基础上之数据库_第19张图片
python自动化(一)基础能力:8.python基础上之数据库_第20张图片

3.数据表的操作语句

python自动化(一)基础能力:8.python基础上之数据库_第21张图片
python自动化(一)基础能力:8.python基础上之数据库_第22张图片
python自动化(一)基础能力:8.python基础上之数据库_第23张图片
python自动化(一)基础能力:8.python基础上之数据库_第24张图片

4.操作表中数据

python自动化(一)基础能力:8.python基础上之数据库_第25张图片
python自动化(一)基础能力:8.python基础上之数据库_第26张图片

5.数据的备份与恢复

python自动化(一)基础能力:8.python基础上之数据库_第27张图片
python自动化(一)基础能力:8.python基础上之数据库_第28张图片

6.主键

python自动化(一)基础能力:8.python基础上之数据库_第29张图片
python自动化(一)基础能力:8.python基础上之数据库_第30张图片
python自动化(一)基础能力:8.python基础上之数据库_第31张图片
python自动化(一)基础能力:8.python基础上之数据库_第32张图片

7.查询数据语句

python自动化(一)基础能力:8.python基础上之数据库_第33张图片
python自动化(一)基础能力:8.python基础上之数据库_第34张图片
python自动化(一)基础能力:8.python基础上之数据库_第35张图片

8.数据排序输出

python自动化(一)基础能力:8.python基础上之数据库_第36张图片

9.限制查询条件

python自动化(一)基础能力:8.python基础上之数据库_第37张图片
python自动化(一)基础能力:8.python基础上之数据库_第38张图片

10.查询部分数据记录(限制行)

python自动化(一)基础能力:8.python基础上之数据库_第39张图片

11.函数-聚合函数

python自动化(一)基础能力:8.python基础上之数据库_第40张图片
python自动化(一)基础能力:8.python基础上之数据库_第41张图片

12.函数-字符串函数

在这里插入图片描述
python自动化(一)基础能力:8.python基础上之数据库_第42张图片
python自动化(一)基础能力:8.python基础上之数据库_第43张图片
python自动化(一)基础能力:8.python基础上之数据库_第44张图片

13.函数-数学函数

python自动化(一)基础能力:8.python基础上之数据库_第45张图片
python自动化(一)基础能力:8.python基础上之数据库_第46张图片
python自动化(一)基础能力:8.python基础上之数据库_第47张图片

14.日期时间函数

python自动化(一)基础能力:8.python基础上之数据库_第48张图片
python自动化(一)基础能力:8.python基础上之数据库_第49张图片

15.分组查询和过滤

python自动化(一)基础能力:8.python基础上之数据库_第50张图片
python自动化(一)基础能力:8.python基础上之数据库_第51张图片
python自动化(一)基础能力:8.python基础上之数据库_第52张图片
python自动化(一)基础能力:8.python基础上之数据库_第53张图片
python自动化(一)基础能力:8.python基础上之数据库_第54张图片
python自动化(一)基础能力:8.python基础上之数据库_第55张图片
python自动化(一)基础能力:8.python基础上之数据库_第56张图片

16.表的约束

python自动化(一)基础能力:8.python基础上之数据库_第57张图片
python自动化(一)基础能力:8.python基础上之数据库_第58张图片
python自动化(一)基础能力:8.python基础上之数据库_第59张图片
python自动化(一)基础能力:8.python基础上之数据库_第60张图片
python自动化(一)基础能力:8.python基础上之数据库_第61张图片
python自动化(一)基础能力:8.python基础上之数据库_第62张图片
python自动化(一)基础能力:8.python基础上之数据库_第63张图片
python自动化(一)基础能力:8.python基础上之数据库_第64张图片
python自动化(一)基础能力:8.python基础上之数据库_第65张图片

17.索引和视图

python自动化(一)基础能力:8.python基础上之数据库_第66张图片
python自动化(一)基础能力:8.python基础上之数据库_第67张图片
python自动化(一)基础能力:8.python基础上之数据库_第68张图片
python自动化(一)基础能力:8.python基础上之数据库_第69张图片
python自动化(一)基础能力:8.python基础上之数据库_第70张图片

四.事务

python自动化(一)基础能力:8.python基础上之数据库_第71张图片
python自动化(一)基础能力:8.python基础上之数据库_第72张图片
python自动化(一)基础能力:8.python基础上之数据库_第73张图片
python自动化(一)基础能力:8.python基础上之数据库_第74张图片
python自动化(一)基础能力:8.python基础上之数据库_第75张图片
python自动化(一)基础能力:8.python基础上之数据库_第76张图片

五.多表关联查询

1.多表关联关系

python自动化(一)基础能力:8.python基础上之数据库_第77张图片
python自动化(一)基础能力:8.python基础上之数据库_第78张图片
python自动化(一)基础能力:8.python基础上之数据库_第79张图片
python自动化(一)基础能力:8.python基础上之数据库_第80张图片

2.多表查询

创建以下三个表用于练习:
python自动化(一)基础能力:8.python基础上之数据库_第81张图片
python自动化(一)基础能力:8.python基础上之数据库_第82张图片
python自动化(一)基础能力:8.python基础上之数据库_第83张图片

2.1 子查询

  • 子查询:查询嵌套:查询里面嵌套了小的查询
  • 引入:查询选修了java语言的全部学生的平均成绩

思路:首先可以根据java语言这个课程名在课程表里找到它所对应的课程号,
然后根据课程号在成绩表里找到它对应的成绩,求平均值

select avg(cj) from cjb where kch=(
	select kch from kcb where kcm='java语言'
);
  • 查询1班叫张三的同学的java语言的成绩

思路:要在cjb里找到特定的成绩,需要相应的xh和kch,
xh可以通过1班张三在xsb里定位到,
kch可以通过java语言在kcb里定位到,

select cj
from cjb
where xh=(
	select xh from xsb where bj='1班' and xm='张三'
)
and kch=(
	select kch from kcb where kcm='java语言'
);

2.2关联查询:

  • 将多张表(两张及其以上的表)联接成一张大的表,然后从表中查询特定的数据

  • 引入:查询张三同学的各科成绩,要求显示的字段有姓名、课程号和成绩

问题:不在一张表的字段信息要能在一张表里显示,可以通过关联查询解决这个问题
表和表之间是如何关联的?——》通过笛卡儿积运算(将两张表里任意两条记录组合在一起形成新
的记录,最终生成一张大的表的过程)

将学生表和成绩表做笛卡儿积运算:

select * from xsb,cjb; 
select * from xsb cross join cjb;

生成一张大的表:
11列(8+3)132行(11*12)
xsb:8列11行
cjb:3列12行

笛卡儿积运算虽然能将两张表关联在一起生成一张大的表,但是这张大的表里存在许多的
没有意义的垃圾数据(例如张三学员信息会关联非张三学员的成绩)——》那么如何过滤这些垃圾数据呢?
——》通过添加关联条件进行垃圾数据的消除——》我们希望张三的学员信息联接张三的各科成绩,
可以通过让学生表的学号和成绩表的学号相等来过滤垃圾数据。

select * from xsb,cjb
where xsb.xh=cjb.xh;

内联接还有一种写法:

select * from xsb inner join cjb
on(xsb.xh=cjb.xh);

回到最开始的查询需求:

select xsb.xm,cjb.kch,cjb.cj 
from xsb,cjb
where xsb.xh=cjb.xh
and xsb.xm='张三';

注解:
(1)只要看到了from后面跟了两张或以上的表,就要反应出这是在做笛卡儿积运算,
笛卡儿积运算会产生垃圾数据,需要添加关联条件来消除垃圾数据;
(2)如果题目的需求除了多表关联以外还有其它的限定条件,我们可以通过and连接
其他的条件;
(3)在关联查询中,如果涉及到同名字段,一定要加上表名做前缀,否则会报错,对于
初学者建议在写关联查询的SQL时所有的字段都带上表名做前缀,这样不容易出错。
(4)除了可以给字段取别名之外,还可以给表取别名:

select x.xm,c.kch,c.cj 
from xsb x,cjb c
where x.xh=c.xh
and x.xm='张三';

关联查询有多种:

内联接:只返回满足关联条件的结果集
外联接:
(1)左外联接:
指的是除了返回满足关联条件的结果集以外,还会把左边的那张表完整的展示出来,
右边的那张表不满足关联条件的字段位置补空值(null)
(2)右外联接:
指的是除了返回满足关联条件的结果集以外,还会把右边的那张表完整的展示出来,
左边的那张表不满足关联条件的字段位置补空值(null)
(3)全外联接:
指的是除了返回满足关联条件的结果集以外,还会把两边的表完整的展示出来,
两边不满足关联条件的字段位置补空值(null)

示例:查询所有学员的课程号、学号、姓名、成绩(要求没有成绩的学员信息也要展示出来)

select cjb.kch,xsb.xh,xsb.xm,cjb.cj
from xsb,cjb
where xsb.xh=cjb.xh;

以上这种写法不能将没有成绩的学员信息展示出来(例如 李晨)
可以通过左外联接或者右外联接来实现这个需求(将所有学员信息展示)。

左外联接:

select cjb.kch,xsb.xh,xsb.xm,cjb.cj
from xsb left join cjb
on(xsb.xh=cjb.xh);

右外联接:

select cjb.kch,xsb.xh,xsb.xm,cjb.cj
from cjb right join xsb
on(xsb.xh=cjb.xh);

全外联接:通常使用full join来实现,但是mysql不支持full join,
那么可以通过union集合操作来实现全外联接:

select cjb.kch,xsb.xh,xsb.xm,cjb.cj
from xsb left join cjb
on(xsb.xh=cjb.xh)
union
select cjb.kch,xsb.xh,xsb.xm,cjb.cj
from xsb right join cjb
on(xsb.xh=cjb.xh);

三张表关联的示例:
查询学生的姓名、选修的课程名和成绩

select x.xm,k.kcm,c.cj
from xsb x,cjb c,kcb k 
where x.xh=c.xh
and c.kch=k.kch;

select x.xm,k.kcm,c.cj
from xsb x inner join cjb c on(x.xh=c.xh) 
inner join kcb k on(c.kch=k.kch);

查询java语言课程和数据库的学员的名字和成绩

select x.xm,c.cj
from xsb x,cjb c
where x.xh=c.xh
and c.kch in(select kch from kcb where kcm in('java语言','数据库'));

六.python操作MySQL

python自动化(一)基础能力:8.python基础上之数据库_第84张图片
python自动化(一)基础能力:8.python基础上之数据库_第85张图片
python自动化(一)基础能力:8.python基础上之数据库_第86张图片
python自动化(一)基础能力:8.python基础上之数据库_第87张图片
python自动化(一)基础能力:8.python基础上之数据库_第88张图片
python自动化(一)基础能力:8.python基础上之数据库_第89张图片
python自动化(一)基础能力:8.python基础上之数据库_第90张图片
python自动化(一)基础能力:8.python基础上之数据库_第91张图片
python自动化(一)基础能力:8.python基础上之数据库_第92张图片
python自动化(一)基础能力:8.python基础上之数据库_第93张图片

你可能感兴趣的:(python自动化,mysql,python,sql,数据库)