多表查询练习题
python代码操作MySQL
基于python代码和MySQL实现用户登录
# 思路 # 1.涉及到课程表与老师表 # 2.需要的数据在两张表中,则利用多表查询,并确定为联表操作 # 3.最后确定select后需要的字段名称
select course.cname, teacher.tname from course inner join teacher on course.teacher_id = teacher.tid;View Code
# 思路 # 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
# 思路 # 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
# 思路 # 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
# 思路 # 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解释器文件夹下找到scripts目录,接着复制该路径添加到环境变量中
# 步骤二 下载模块的基本语句
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解释器内置的配置文件
1.报错信息里面含有timeout关键字 原因:当前计算机网络不稳定 措施:多执行几次或者更换网络 2.报错信息里面含有warning警告版本过低 原因:pip3工具版本过低需要更新 措施:直接拷贝提示的更新命令更新即可 3.报错信息里面没有任何关键字就是一堆红色字体 原因:可能是即将下载的模块对计算机环境有要求 措施:下载之前需要先准备好环境,可百度搜索一下
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