pymysql模块

多表查询练习题(有难度)

(在编写较为复杂的SQL查询时不要想着一口气写完

写一点查一点看一点再写,任何复杂的SQL都是慢慢拼凑出来的)

在编写复杂SQL的时候可以先写出中文思路,之后再拼凑SQL

1.查询所有的课程的名称以及对应的任课老师姓名

  1.1该题涉及到几张表?课程表,老师表

    1.2需要的数据在两张表中需要利用多表查询,思考确定为联表操作

      1.3最后确定select后需要的字段名称

  select course.cname,teacher.tname from course inner join teacher on course.teacher_id = teacher.tid;

2.查询平均成绩大于八十分的同学的姓名和平均成绩

  2.1先明确需要用到几张表?学生表,成绩表

    2.2分析题意可知先求解分数表中平均成绩大于80分的学生id号

      2.3由于最终的需求是学生姓名和第二步中的平均成绩,所以此处应该采用联表操作更合适

求每个学生的平均成绩,按照学生id分组再利用聚合函数avg

  select student_id,avg(num) from score group by student_id having avg(num) > 80;

将上述SQL求解出来的表与学生表连接到一起

  select student.sname,t1.avg_num from student inner join (select student_id,avg(num) as avg_num from score group by student_id having avg(num) > 80) as t1 on student.sid = t1.student_id;

3.查询没有报李平老师课的学生姓名

  3.1.该题需要使用四张表

  3.2.求报了李平老师课程的学生id

  3.3.再去学生表中取反操作获取没有报李平老师课程的学术姓名

查询李平老师id号

  select tid from teacher where tname='李平老师';

根据老师id号筛选出课程id号

  select cid from course where teacher_id=(select tid from teacher where tname='李平老师');

根据课程id去分数表中筛选出对应学生id号

  select distinct student_id from score where course_id in (select cid from course where teacher_id=(select tid from teacher where tname='李平老师'));

去学生表中依据学生id号取反

  select sname from student where sid not in (select distinct student_id from score where course_id in(select cid from course where teacher_id=(select tid from teacher where tname='李平老师')));

 4.查询没有同时选修物理课程和体育课程的学生姓名(只要报了一门的,报了两门的和两门都没报的不要)

  4.1.该题涉及到的表有三张

先获取物理和体育课程的id号

  select cid from course where cname in ('物理','体育');

先根据课程id筛选出所有报了物理和体育的学生id(去除两门都没报的)

  select * from score where course_id in (select cid from course where cname in ('物理','体育'));

按照学生id分组,统计分组下课程数量,筛选出数量为1的即可

  select student_id from score where course_id in (select cid from course where cname in ('物理','体育')) group by student_id having count(course_id) = 1;

根据学生id去学生表中筛选出学生姓名

  select sname from student where sid in (select student_id from score where course_id in (select cid from course where cname in ('物理','体育')) group by student_id having count(course_id)=1);

5.查询挂科超过两门(包括两门)的学生姓名和班级

  5.1该题涉及到三张表

先筛选出所有num小于60分的数据

  select * from score where num <60;

按照学生id分组统计每个学生挂科的次数,筛选出两门及以上的

  select student_id from score where num <60 group by student_id having count(course_id) >= 2;

 

根据学生id获取对应的学生姓名和班级号

  select sname,class_id from student where sid in (select student_id from score where num <60 group by student_id having count(course_id) >= 2);

 

将得到的表和class连起来

  select class.caption,t1.sname from class inner join (select sname,class_id from student where sid in (select student_id from score where num <60 group by student_id having count(course_id) >= 2)) as t1 on class.cid = t1.class_id;

 

 python操作MySQL

(python代码操作MySQL需要借助于第三方模块)

第三方模块

  本质也是模块只不过是网上其他人写的

如果我们想要使用第三方模块需要基于网络先下载

python如何下载模块

  pip3  (环境变量,python解释器文件夹下的scripts目录)

下载模块的基本语句

  方式1:cmd终端

    pip3 install pymysql

  方式2:pycharm终端

    pip3 install pymysql

  方式3:pycharm快捷方式

    settings>>>

 

 

远程仓库

  pip3下载模块的时候默认都是从国外的仓库下载模块数据的

  下载过程有时候会非常的慢,我们可以切换到国内的仓库

(1)阿里云 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣 http://pypi.douban.com/simple/
(3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
(5)华中科技大学http://pypi.hustunique.com/

切换方法:

  方式1:cmd命令临时切换

    pip3 install 模块名 -i 仓库地址

  方式2:pycharm更改仓库地址

    settings 下载模块界面下方点击manage后添加网址

  方法3:永久更新

    需要修改python解释器内置的配置文件

 pip3下载模块报错

  1.报错信息内包含timeout关键字

    原因:当前计算机网络不稳定

    措施:try again and again

  2.报错信息里面含有warning警告版本过低

    原因:pip3工具版本过低需要更新

    措施:直接拷贝提示的更新命令输入即可更新

  3.报错信息里面没有任何关键字就是一堆红色字体

    原因:可能是即将下载的模块对计算机环境有要求

    措施:下载之前需要先准备好环境(百度去)

 pymysql模块

  import pymysql

创建连接对象

conn = pymysql.connect(

  host='127.0.0.1',

  port=3306,

  user='root',

  password='你的密码',

  database='操作的数据库',

  charset='utf8'

)

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  生成游标对象,等待用户输入命令

自定义sql语句

  sql = 'select * from teacher'

执行sql语句

  cursor.execute(sql)

获取执行的结果

  res = cursor.fetchall()

  print(res)

posted @ 2021-09-09 19:59  雾雨黑白  阅读(62)  评论(0编辑  收藏  举报