MySQL数据库多表查询;练习和Python代码操作MySQL
MySQL数据库
多表查询练习题
python代码操作MySQL
基于python代码和MySQL实现用户登录注册
多表查询练习题
在编写较为复杂的SQL查询语句时不要想着一口气写完
写一点检查一下看一下再写
任何复杂的SQL语句都是慢慢拼凑出来的
在编写复杂的SQL语句的时候可以先写出中文的思路 之后在慢慢拼凑SQL语句
多表查询题目的大体思路
这道题目涉及到几张表的数据
组要的数据在这几张表中 需要利用多表查询 思考到底是用连表的方法还是子查询的方法何时
最后再确定select后面需要的字段名称
1.查询所有的课程名称以及对应的认可老师姓名
步骤1:这个题目涉及到几张表 课程表和老师表
步骤2:需要的数据在这两张表中 需要利用多表查询 思考一下决定用连表操作
步骤3:最后确定select后需要的字段名称
select course.cname,
teacher.tname
from course
inner join
teacher on
course.teacher_id=teacher.tid;
2.查询平均成绩大于80分的同学的姓名和平均成绩
步骤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,d1.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 d1 on student.sid=d1.student_id;
3.查询没有报李平老师课的学生姓名
步骤1.这道题目需要用到4张表
步骤2.求报了李平老师课程的学生的id
步骤3.再去学生表中取反操作获取到没有报李平老师课程的学生姓名
1 查询李平老师的id号
select tid from teacheer where tname='李平老师';
2 根据李平老师的id号筛选出课程的id号
select cid from course where teacher_id=
(select tid from teacher where tname='李平老师');
3 根据上一步筛选出的课程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='李平老师'));
4 去学生表中依据筛选出的学生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.查询没有同事选修物理课陈和体育课程的学生姓名(只要报了一门的 两门不报和都不报的不要)
这道题目涉及到三张表
1.先获取物理和体育课程的id号
select cid from course where name in ('体育','物理');
2.根据课程id筛选出所有报了物理和体育的学生id(两门都报了和只报一门的都在里面)
select * from score where course_id in
(select cid from course where cname in ('物理','体育'));
3.按照学生的id分组 统计分组下课程数量 筛选出数量为1的即可(看到统计就可以使用聚合函数count)
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;
4.根据上步筛选出的学生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.查询挂科超过两门(包括两门)的学生姓名
这道题目涉及到三张表
1.在score表中筛选出挂科超过两门的学生
1.1 首先筛选出所有num小于60分的数据
select * from score where num <60;
2 然后按照学生id分组 统计每个学生挂科的次数 筛选出两门以及两门以上的
select student_id from score where num <60
group by student_id having count(course_id) >=2;
3.根据学生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)
4.最后将上述步骤的表和class连起来
select class.caption,d1.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 d1 on class.cid=d1.class_id;
python操作MySQL需要借助于第三方模块
python代码操作MySQL需要借助于第三方模块
第三方模块也只是别人在网络上写的
要想使用第三方模块就必须现在网络上下载
python如何下载模块
pip3 (环境变量 python解释器文件夹下面的scripts目录)
下载模块的方法及语句
1.cmd终端
pip3 install pymysql
2.pycharm终端
pip3 install pymysql
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='2000915',
database='ddd5',
charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 生成游标对象 等待用户输入命令
# 自定义sql语句
sql = 'select * from teacher'
# 执行sql语句
cursor.execute(sql)
# 获取执行的结果
res = cursor.fetchall()
print(res)
多表查询练习题库:https://www.cnblogs.com/Dominic-Ji/p/10875493.html