MySql教程

多表查询练习题与pymysql模块

本文主要是介绍多表查询练习题与pymysql模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 多表查询练习题

  • python代码操作MySQL

  • 基于python代码和MySQL实现用户登录

 

多表查询练习题

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

# 思路
# 1.涉及到课程表与老师表
# 2.需要的数据在两张表中,则利用多表查询,并确定为联表操作
# 3.最后确定select后需要的字段名称

演示

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

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

# 思路
# 1.涉及到学生表与成绩表
# 2.先求成绩表中平均成绩大于80分的学生id号
# 3.再用联表把求解出来的表与学生表连接到一起

演示

# 求每个学生的平均成绩,可以按照学生id分组再利用聚合函数avg
select student_id,avg(num) from score group by student_id having avg(num)>80;

# 与学生表连接
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;
View Code

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

# 思路
# 1.涉及到学生表、成绩表、课程表以及老师表
# 2.求出报了李平老师课程的学生id
# 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 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='李平老师')));
View Code

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

# 思路
# 1.涉及到课程表、成绩表、学生表
# 2.先获取物理和体育课程的id号
# 3.再根据课程id号筛选出所有报了物理和体育的学生id
# 4.按照学生id分组,统计分组下课程数量,筛选出数量为1的即可
# 5.最后根据学生id去学生表中筛选出学生姓名

演示

步骤2:
select cid  from course where cname in ('物理','体育');
步骤3:
select * from score where course_id in (select cid  from course where cname in ('物理','体育'));
步骤4:
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:
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);
View Code

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

# 思路
# 1.涉及到成绩表、班级表、学生表
# 2.先筛选出所有num<60的数据
# 3.按照学生id分组统计每个学生挂科的次数筛选出两门及以上的科目
# 4.根据学生id获取对应的学生姓名和班级号
# 5.将第4步的表和class表连起来

演示

步骤2:
select * from score where num < 60;
步骤3:
select student_id from score where num < 60 group by student_id having count(course_id) >= 2;
步骤4:
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);
步骤5:
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;
View Code

 

python操作MySQL

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

# 第三方模块
本质就是网络上其他人写的模块
如果想要使用第三方模块需要基于网络先下载

 

python如何下载模块

# 步骤一:
在python解释器文件夹下找到scripts目录,接着复制该路径添加到环境变量中

 

 

# 步骤二
下载模块的基本语句

方式1:cmd终端:

 

 方式2:pycharm终端:

 

方式3:pycharm快捷方式:

 

 

远程仓库

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.命令临时切换
        pip3 install 模块名 -i 仓库地址
2.pycharm更改仓库地址
        settings 下载模块界面下方点击manage...     
3.永久更改
        需要修改python解释器内置的配置文件
    

 

pip3下载模块报错

1.报错信息里面含有timeout关键字
        原因:当前计算机网络不稳定
        措施:多执行几次或者更换网络

2.报错信息里面含有warning警告版本过低
        原因:pip3工具版本过低需要更新
         措施:直接拷贝提示的更新命令更新即可

3.报错信息里面没有任何关键字就是一堆红色字体
        原因:可能是即将下载的模块对计算机环境有要求
         措施:下载之前需要先准备好环境,可百度搜索一下

 

pymysql模块

import pymysql

# 创建连接对象
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='db6',
    charset='utf8'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 生成游标对象 等待用户输入命令
# 自定义sql语句
sql = 'select * from teacher'
# 执行sql语句
cursor.execute(sql)
# 获取执行的结果
res = cursor.fetchall()
print(res)
View Code

 

这篇关于多表查询练习题与pymysql模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!