python/MySQL练习题(二)

python/MySQL练习题(二)

21、查询各科成绩前三名的记录:(不考虑成绩并列情况)

 1  select score.sid,score.course_id,score.num,T.first_num,T.second_num from score left join
 2     (
 3     select
 4         sid,
 5         (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num,
 6         (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 3,1) as second_num
 7     from
 8         score as s1
 9     ) as T
10     on score.sid =T.sid
11     where score.num <= T.first_num and score.num >= T.second_num

22、查询每门课程被选修的学生数

1 SELECT count(student_id) from score LEFT JOIN course on course.cid=score.course_id
2 GROUP BY course_id
3 HAVING COUNT(1) >4

23、查询出只选修了一门课程的全部学生的学号和姓名

1 SELECT student.sid,student.sname from score LEFT JOIN student on student.sid=score.student_id
2 LEFT JOIN course on course.cid=score.course_id
3 GROUP BY student_id
4 HAVING count(score.course_id)=‘1‘

24、查询男生、女生的人数

1 SELECT gender,count(sid) from student
2 GROUP BY gender
3 HAVING count(sid)

25、查询姓“张”的学生名单

1 SELECT * from student where sname like ‘张%‘

26、查询同名同姓学生名单,并统计同名人数

1 SELECT sname,COUNT(sname) from student
2 GROUP BY sname
3 HAVING COUNT(sname)

27、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

1  SELECT course_id,avg(num) from score LEFT JOIN course on course.cid=score.course_id
2  GROUP BY course_id
3  ORDER BY avg(num) asc 

28、查询平均成绩大于85的所有学生的学号、姓名和平均成绩

1  SELECT student.sid,student.sname,avg(num) from score LEFT JOIN student on student.sid=score.student_id
2  GROUP BY student_id
3  HAVING avg(num) > 85

29、查询课程名称为“物理”,且分数低于60的学生姓名和分数

1 SELECT student.sname,score.num  from score LEFT JOIN student on student.sid=score.student_id
2 LEFT JOIN course on course.cid=score.course_id
3 where course.cname=‘生物‘ and score.num <60

30、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名

1 SELECT student.sid,student.sname from score LEFT JOIN course on course.cid=score.course_id
2 LEFT JOIN student on student.sid=score.student_id
3 where course.cid=‘3‘ and num > 80

31、求选了课程的学生人数

1 SELECT COUNT(c) from
2 (SELECT count(student_id)as c from score GROUP BY student_id)as A

32、查询选修“李平”老师所授课程的学生中,成绩最高的学生姓名及其成绩

1 SELECT sname,num from score
2 LEFT JOIN course on course.cid=score.course_id
3 LEFT JOIN student on student.sid=score.student_id
4 LEFT JOIN teacher on teacher.tid=course.teacher_id
5 where teacher.tname=‘李平老师‘
6 GROUP BY student_id
7 ORDER BY num DESC
8 LIMIT 1

33、查询各个课程及相应的选修人数

1 SELECT cname,COUNT(1)from score LEFT JOIN course on course.cid=score.course_id
2 GROUP BY course_id

34、查询不同课程但成绩相同的学生的学号、课程号、学生成绩

1 select A1.student_id,A1.course_id,A2.course_id,A1.num,A2.num from score as A1 ,score as A2
2 where A1.course_id!=A2.course_id and A1.num=A2.num
3 GROUP BY student_id

35、查询每门课程成绩最好的前两名

 1    select score.sid,score.course_id,score.num,T.first_num,T.second_num from score left join
 2     (
 3     select
 4         sid,
 5         (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num,
 6         (select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 1,1) as second_num
 7     from
 8         score as s1
 9     ) as T
10     on score.sid =T.sid
11     where score.num <= T.first_num and score.num >= T.second_num

36、检索至少选修两门课程的学生学号

1 -- SELECT count(A.c) from (select count(1)as c from score GROUP BY course_id)as A
2 SELECT student_id from score LEFT JOIN student on student.sid=score.student_id
3 GROUP BY student_id
4 HAVING count(1) > 2

37、查询全部学生都选修的课程的课程号和课程名

1 select course_id from score GROUP BY course_id HAVING COUNT(1)=(select count(1) from student)

38、查询没学过“李平”老师讲授的任一门课程的学生姓名

 1 SELECT
 2     student.sname
 3 FROM
 4     student
 5 WHERE
 6     sid NOT IN (
 7         SELECT
 8             course_id
 9         FROM
10             score
11         LEFT JOIN course ON course.cid = score.course_id
12         LEFT JOIN student ON student.sid = score.student_id
13         LEFT JOIN teacher ON teacher.tid = course.teacher_id
14         WHERE
15             teacher.tname = ‘李平老师‘
16     )

39、查询两门以上不及格课程的同学的学号及其平均成绩

1 SELECT student_id,avg(num) from score where num <60 GROUP BY student_id HAVING count(1)>2

40、检索“004”课程分数小于60,按分数降序排列的同学学号

1 SELECT student_id from score where course_id=4 and num <60 ORDER BY num DESC

41、删除“002”同学的“001”课程的成绩

1 DELETE from score where student_id=2 and course_id=1
时间: 2024-10-13 00:05:34

python/MySQL练习题(二)的相关文章

Python/ MySQL练习题(一)

Python/ MySQL练习题(一) 2.查询"生物"课程比"物理"课程成绩高的所有学生的学号 1 SELECT 2 * 3 FROM 4 ( 5 SELECT 6 * 7 FROM 8 course 9 LEFT JOIN score ON score.course_id = course.cid 10 WHERE 11 course.cname = '生物' 12 ) AS A 13 INNER JOIN ( 14 SELECT 15 * 16 FROM 17

mysql练习题二

建立表格 1.创建student和score表 CREATE  TABLE  student ( id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  , name  VARCHAR(20)  NOT NULL , sex  VARCHAR(4)  , birth  YEAR, department  VARCHAR(20) , address  VARCHAR(50) ); 创建score表.SQL代码如下: CREATE  TABLE  score ( id

Python开发【第十八篇】:MySQL(二)

Python开发[第十八篇]:MySQL(二) 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SELECT nid, NAME FROM tb1 WHERE nid > 2 ) AS A WHERE A. NAME > 'alex'; 临时表搜索 1.创建视图 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v

Python/MySQL(三、pymysql使用)

Python/MySQL(三.pymysql使用) 所谓pymysql就是通过pycharm导入pymysql模块进行远程连接mysql服务端进行数据管理操作. 一.在pycharm中导入pymysql模块: 最后进行搜索和导入 二.通过pycharm语句连接MySQ服务端(MySQL服务端必须先启动) 1 import pymysql 2 导入pymysql 3 conn=pymysql.connect(host='localhost',user='root',password='guobao

Python/MySQL表操作以及连接

Python/MySQL表操作以及连接 mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. mysql> create table yuan(id int auto_increment,yuangongname int,bumen_id int, primary key(id,yuangongname))engine=innodb default charset=utf8; Query OK, 0 rows affected (0.43 sec) 外键 :可以进行联合外键,操作

第一节、Alex 讲解 python+mysql 交互;

Python Mysql 交互 A.Alex 的语法展示: import MySQLdb  try: conn=MySQL.connect(host='localhost',user='root',passwod='123qwe',db='test-DB',port='3306') cur =conn.cursor() cur.execute('select * from user_info') cur.close() conn.close() except MySQLdb.Errot,e: p

Python/MySQL(四、MySQL数据库操作)

Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: 1 case when id>9 then ture else false 二.三元运算: 1 if(isnull(xx)0,1) 三.上下连表: select id,name from ta1 union 天然去重(检测上边的表和下边的表行内完全一样就只显示一行内容) select num,sname from tb2 ========================================== select

MySQL基准测试(二)--方法

MySQL基准测试(二)--方法 目的: 方法不是越高级越好.而应该善于做减法.至简是一种智慧,首先要做的是收集MySQL的各状态数据.收集到了,不管各个时间段出现的问题,至少你手上有第一时间的状态数据,而不是凭空想象的去做剖析和分析问题. 数据模拟参考 仿真多线程插入和查询语句,可以参考Python模拟数据(MySQL数据库)文档 MySQL状态命令的解释 SHOW GLOBAL VARIABLES 查看目前的MySQL的各个参数变量值. SHOW GLOBAL STATUS 查看全局的MyS

python mysql and ORM

本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sqlachemy学习 1. 数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管