日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql查询选课最少成绩最高_MySQL 练习

發(fā)布時(shí)間:2023/12/10 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql查询选课最少成绩最高_MySQL 练习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在學(xué)習(xí)MYSQL?數(shù)據(jù)庫(kù),在此mark?一下做過的sql?相關(guān)練習(xí)

表結(jié)構(gòu)如下:

teacher表

tid

tname

class表

cid

caption

course表

cid

cname

teacher_id

student表

sid

gender

class_id

sname

score表

sid

student_id

course_id

num

class :

?teacher :?

?course :??

student :

score :?

根據(jù)以上圖片建表并進(jìn)行SQL?語(yǔ)句練習(xí):? (本次練習(xí)使用的MySQL?版本為 8.0.21,系統(tǒng)為windows 10?系統(tǒng))

1.自行創(chuàng)建測(cè)試數(shù)據(jù)庫(kù)

/*Navicat Premium Data Transfer

Source Server : localhost

Source Server Type : MySQL

Source Server Version : 50624

Source Host : localhost

Source Database : sqlexam

Target Server Type : MySQL

Target Server Version : 50624

File Encoding : utf-8

Date: 2020年10月8日09:02:02*/

SETNAMES utf8;SET FOREIGN_KEY_CHECKS = 0;--------------------------------Table structure for `class`------------------------------

DROP TABLE IF EXISTS`class`;CREATE TABLE`class` (

`cid`int(11) NOT NULLAUTO_INCREMENT,

`caption`varchar(32) NOT NULL,PRIMARY KEY(`cid`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;--------------------------------Records of `class`------------------------------

BEGIN;INSERT INTO `class` VALUES ('1', '三年二班'), ('2', '三年三班'), ('3', '一年二班'), ('4', '二年九班');COMMIT;--------------------------------Table structure for `course`------------------------------

DROP TABLE IF EXISTS`course`;CREATE TABLE`course` (

`cid`int(11) NOT NULLAUTO_INCREMENT,

`cname`varchar(32) NOT NULL,

`teacher_id`int(11) NOT NULL,PRIMARY KEY(`cid`),KEY`fk_course_teacher` (`teacher_id`),CONSTRAINT `fk_course_teacher` FOREIGN KEY (`teacher_id`) REFERENCES`teacher` (`tid`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;--------------------------------Records of `course`------------------------------

BEGIN;INSERT INTO `course` VALUES ('1', '生物', '1'), ('2', '物理', '2'), ('3', '體育', '3'), ('4', '美術(shù)', '2');COMMIT;--------------------------------Table structure for `score`------------------------------

DROP TABLE IF EXISTS`score`;CREATE TABLE`score` (

`sid`int(11) NOT NULLAUTO_INCREMENT,

`student_id`int(11) NOT NULL,

`course_id`int(11) NOT NULL,

`num`int(11) NOT NULL,PRIMARY KEY(`sid`),KEY`fk_score_student` (`student_id`),KEY`fk_score_course` (`course_id`),CONSTRAINT `fk_score_course` FOREIGN KEY (`course_id`) REFERENCES`course` (`cid`),CONSTRAINT `fk_score_student` FOREIGN KEY (`student_id`) REFERENCES`student` (`sid`)

) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;--------------------------------Records of `score`------------------------------

BEGIN;INSERT INTO `score` VALUES ('1', '1', '1', '10'), ('2', '1', '2', '9'), ('5', '1', '4', '66'), ('6', '2', '1', '8'), ('8', '2', '3', '68'), ('9', '2', '4', '99'), ('10', '3', '1', '77'), ('11', '3', '2', '66'), ('12', '3', '3', '87'), ('13', '3', '4', '99'), ('14', '4', '1', '79'), ('15', '4', '2', '11'), ('16', '4', '3', '67'), ('17', '4', '4', '100'), ('18', '5', '1', '79'), ('19', '5', '2', '11'), ('20', '5', '3', '67'), ('21', '5', '4', '100'), ('22', '6', '1', '9'), ('23', '6', '2', '100'), ('24', '6', '3', '67'), ('25', '6', '4', '100'), ('26', '7', '1', '9'), ('27', '7', '2', '100'), ('28', '7', '3', '67'), ('29', '7', '4', '88'), ('30', '8', '1', '9'), ('31', '8', '2', '100'), ('32', '8', '3', '67'), ('33', '8', '4', '88'), ('34', '9', '1', '91'), ('35', '9', '2', '88'), ('36', '9', '3', '67'), ('37', '9', '4', '22'), ('38', '10', '1', '90'), ('39', '10', '2', '77'), ('40', '10', '3', '43'), ('41', '10', '4', '87'), ('42', '11', '1', '90'), ('43', '11', '2', '77'), ('44', '11', '3', '43'), ('45', '11', '4', '87'), ('46', '12', '1', '90'), ('47', '12', '2', '77'), ('48', '12', '3', '43'), ('49', '12', '4', '87'), ('52', '13', '3', '87');COMMIT;--------------------------------Table structure for `student`------------------------------

DROP TABLE IF EXISTS`student`;CREATE TABLE`student` (

`sid`int(11) NOT NULLAUTO_INCREMENT,

`gender`char(1) NOT NULL,

`class_id`int(11) NOT NULL,

`sname`varchar(32) NOT NULL,PRIMARY KEY(`sid`),KEY`fk_class` (`class_id`),CONSTRAINT `fk_class` FOREIGN KEY (`class_id`) REFERENCES`class` (`cid`)

) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;--------------------------------Records of `student`------------------------------

BEGIN;INSERT INTO `student` VALUES ('1', '男', '1', '理解'), ('2', '女', '1', '鋼蛋'), ('3', '男', '1', '張三'), ('4', '男', '1', '張一'), ('5', '女', '1', '張二'), ('6', '男', '1', '張四'), ('7', '女', '2', '鐵錘'), ('8', '男', '2', '李三'), ('9', '男', '2', '李一'), ('10', '女', '2', '李二'), ('11', '男', '2', '李四'), ('12', '女', '3', '如花'), ('13', '男', '3', '劉三'), ('14', '男', '3', '劉一'), ('15', '女', '3', '劉二'), ('16', '男', '3', '劉四');COMMIT;--------------------------------Table structure for `teacher`------------------------------

DROP TABLE IF EXISTS`teacher`;CREATE TABLE`teacher` (

`tid`int(11) NOT NULLAUTO_INCREMENT,

`tname`varchar(32) NOT NULL,PRIMARY KEY(`tid`)

) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;--------------------------------Records of `teacher`------------------------------

BEGIN;INSERT INTO `teacher` VALUES ('1', '張磊老師'), ('2', '李平老師'), ('3', '劉海燕老師'), ('4', '朱云海老師'), ('5', '李杰老師');COMMIT;SET FOREIGN_KEY_CHECKS = 1;

View Code

2.查詢 生物 課程比 物理 課程成績(jī)高的所有學(xué)生的學(xué)號(hào)

--我的寫法:

select A.student_id from score asAleft join score as B on A.student_id =B.student_idwhere A.course_id in (select cid from course where cname = '生物')and B.course_id in (select cid from course where cname = '物理')and A.num >B.num;--參考寫法:

select A.student_id from(select score.sid, student_id,course.cname,num from score left join course on course.cid = score.course_id where course.cname = '生物') asAinner join(select score.sid,student_id,course.cname,num from score left join course on course.cid = score.course_id where course.cname = '物理') asBon A.student_id =B.student_idwhere A.num > B.num;

View Code

3.查詢平均成績(jī)大于60分的同學(xué)的學(xué)號(hào)和平均成績(jī)

select b.student_id,student.sname,B.avgnum from(select student_id ,AVG( num) as avgnum fromscoreGROUP BY student_id having AVG(num) > 60

ORDER BY avg(num) desc) asBLEFT JOIN student on B.student_id = student.sid ;

View Code

4.查詢所有同學(xué)的學(xué)號(hào),姓名,選課數(shù),總成績(jī)

select student.sid,student.sname,Count(score.course_id),sum(score.num) fromstudentleft join score on score.student_id =student.sidGROUP BY student.sid;

View Code

5.查詢姓李的老師的個(gè)數(shù)

select '姓李的老師個(gè)數(shù)',count(1) from teacher where tname like '李%';

View Code

6.查詢沒學(xué)過 葉平 老師課的同學(xué)的學(xué)號(hào)和姓名

select sa.sid,sa.sname from student assaWHERE sa.sid not in(select score.student_id fromscoreleft join student on score.student_id =student.sidleft join course on course.cid =score.course_idleft join teacher on teacher.tid =course.teacher_idwhere teacher.tname like '李平%');

View Code

7.查詢學(xué)過 001 并且也學(xué)過編號(hào) 002 課程的同學(xué)的學(xué)號(hào)和姓名

select score.student_id,student.sname fromscoreleft join student on student.sid =score.student_idwhere score.course_id = 1 or score.course_id = 2

GROUP BY score.student_id having count(score.course_id) > 1 ;

View Code

8.查詢學(xué)過?李平 老師所有課程的同學(xué)的學(xué)號(hào)和姓名

select A.student_id,student.sname from score asAleft join student on student.sid =A.student_idwhere A.course_id in(SELECT course.cid fromcourseleft join teacher on teacher.tid =course.teacher_idwhere teacher.tname like '李平%')group by A.student_id having count(A.course_id) =(SELECT count(course.cid) fromcourseleft join teacher on teacher.tid =course.teacher_idwhere teacher.tname like '李平%');

View Code

9.查詢課程編號(hào) 002 的成績(jī)比課程編號(hào) 001 課程低的所有同學(xué)的學(xué)號(hào)和姓名

select A.student_id,student.sname from score asAinner join score as B on A.student_id =B.student_idleft join student on student.sid =A.student_idwhere A.course_id = 1 and B.course_id = 2 and A.num < B.num;

View Code

10 查詢有課程成績(jī)小于 60 分的同學(xué)的學(xué)號(hào)和姓名

select student_id,sname fromscoreleft join student on student.sid =score.student_idwhere score.num < 60

group byscore.student_id;select sid,sname from student where sid in(select student_id from score where num < 60 GROUP BYstudent_id);select sid,sname from student where sid in(select distinct student_id from score where num < 60) ; --distinct 的效率不高,能不用就不用,用其他方法實(shí)現(xiàn)去重

View Code

11.查詢沒有學(xué)全所有課程的同學(xué)的學(xué)號(hào)和姓名

--解答分析:--1.查出所有課程ID--2.查出所有學(xué)過所有課程的學(xué)生ID--3.從所有學(xué)生中去掉 上面查詢出來(lái)的學(xué)生

--主要:這道題有一個(gè)題目理解的問題,就是"沒有學(xué)全所有課程的學(xué)生"包不包括一門課沒選的學(xué)生?--如果理解為包括,則是答案1的解法--如果理解為不包括,則是答案2、3 的解法

--答案一:

select sid,sname fromstudentwhere sid not in(select student_id fromscoreGROUP BY student_id having count(1) = ( select count(1) fromcourse)

);--答案二:

select student.sid,student.sname fromstudentleft JOIN score on score.student_id =student.sidGROUP BY student.sid having count(score.course_id) >= 1 and count(score.course_id) < ( select count(1) fromcourse) ;--答案三:

select student_id ,sname fromscoreleft join student on student.sid =score.student_idGROUP BY student_id HAVING count(1)

View Code

12.查詢至少有一門課與學(xué)號(hào) 001 的同學(xué)所學(xué)相同的同學(xué)的學(xué)號(hào)和姓名

--解答思路:--1.先查出001 的同學(xué)所學(xué)的課程ID--2.查score 表中student_id != 1 的學(xué)生的課程ID 在上面查出的范圍內(nèi)的數(shù)據(jù)

select student.sid,student.sname fromscoreleft join student on student.sid =score.student_idwhere student_id != 1 and score.course_id in (select B.course_id from score as B where B.student_id = 1)GROUP BY score.student_id;

View Code

13.查詢至少學(xué)過學(xué)號(hào)為 001 同學(xué)所選課程中任意一門課的其他同學(xué)學(xué)號(hào)和姓名

select student.sid,student.sname fromscoreleft join student on student.sid =score.student_idwhere student_id != 1 and course_id in (SELECT course_id from score where student_id = 1)GROUP BY score.student_id having count(score.course_id) >= (select count(1) from score where student_id = 1);

View Code

14.查詢 和 002 號(hào)同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)的學(xué)號(hào)和姓名

select score.student_id,student.sname fromscoreleft join student on student.sid =score.student_idwhere student_id in(select student_id fromscorewhere student_id != 2

GROUP BY student_id having count(course_id ) = (select count(1) from score where student_id = 2))and course_id in (select course_id from score where student_id = 2)GROUP BY student_id having count(course_id) = (select count(1) from score where student_id = 2);

View Code

15.刪除學(xué)習(xí) '葉平' 老師課的score表記錄

delete fromscorewhere course_id in(select course.cid fromcourseleft join teacher on teacher.tid =course.teacher_idwhere tname like '葉平%');

View Code

16.向score 表插入一些記錄,這些記錄要求符合以下條件:1.沒有上過編號(hào) 002 課程的同學(xué)學(xué)號(hào) 2.插入 002 號(hào)課程的平均成績(jī)

select sid,2,(select avg(num) from score where course_id = 2 ) fromstudentwhere sid not in (select student_id from score where course_id = 2);

View Code

17、按平均成績(jī)從低到高顯示所有學(xué)生的 生物,物理,體育 三門的課程成績(jī),按如下形式顯示: 學(xué)生ID,生物,物理,體育,有效課程數(shù),有效平均分;

select A.sid as學(xué)生ID,

(SELECT num from score left JOIN course on course.cid = score.course_id where course.cname = '生物' and score.student_id = A.sid) as生物,

(SELECT num from score left JOIN course on course.cid = score.course_id where course.cname = '物理' and score.student_id = A.sid) as物理,

(SELECT num from score left JOIN course on course.cid = score.course_id where course.cname = '體育' and score.student_id = A.sid) as體育,

(SELECT count(1) from score where score.student_id =A.sidand num is not null and score.course_id in(select cid from course where cname in ('生物','物理','體育'))) as有效課程數(shù),

(SELECT avg(num) from score where score.student_id =A.sidand num is not null and score.course_id in(select cid from course where cname in ('生物','物理','體育'))) as三門成績(jī)有效平均分from student asAleft join score on score.student_id =A.sidGROUP BY A.sid;

View Code

18.查詢各科成績(jī)最高分和最低分,以如下形式顯示:課程ID,最高分,最低分

selectcourse.cidas課程ID ,max(score.num) as最高分,min(score.num) as最低分 .fromcourseleft JOIN score on score.course_id =course.cidGROUP BY course.cid;

View Code

19.按各科平均成績(jī)從低到高和及格率的百分比從高到低順序

selectA.cidas課程ID,avg(num) as課程平均分,AVG(A.passed ) 及格率from (select course_id as cid,num,case when num >=60 then 1 else 0 end as passed from score ) asAGROUP BYA.cidORDER BY avg(num) asc ,AVG(A.passed ) desc;selectcourse_idas課程ID,avg(num) as課程平均分,AVG(case when num >=60 then 1 else 0 end ) as及格率fromscoreGROUP BYcourse_idORDER BY avg(num) asc ,AVG(case when num >=60 then 1 else 0 end ) desc;

View Code

20.課程平均分從高到低顯示(顯示任課老師)

selectcourse.cidas課程ID,avg(score.num) as平均分,

teacher.tnameas授課老師fromcourseleft join score on score.course_id =course.cidleft join teacher on teacher.tid =course.teacher_idGROUP BYcourse.cidorder by avg(score.num) desc;

View Code

21.查詢個(gè)課程成績(jī)前三名的記錄(不考慮成績(jī)并列情況)

selectA.course_id,

A.student_id,

A.numfrom score asAwhere num >= (select num from score where course_id = A.course_id ORDER BY num desc LIMIT 2,1)ORDER BY A.course_id asc ,A.num desc;SELECTscore.course_id,score.student_id,score.numfromscoreleft JOIN(selectA.course_id,

(select num from score where score.course_id = A.course_id ORDER BY num desc LIMIT 2,1) asnumfrom score asAGROUP BYcourse_id

)as B on score.course_id =B.course_idwhere score.num >=B.numORDER BY score.course_id asc ,score.num desc;

View Code

22.查詢每門課程被選修的學(xué)生數(shù)

SELECTcourse.cid ,count(score.course_id)fromcourseleft JOIN score on score.course_id =course.cidGROUP BY course.cid;

View Code

23.查詢出只選修了一門課程的全部學(xué)生的學(xué)號(hào)和姓名

select student.sid,student.sname fromscoreleft JOIN student on student.sid =score.student_idgroup by score.student_id having count(course_id) = 1;

View Code

24.查詢男生、女生人數(shù)

SELECT gender,count(1) from student group by gender;

View Code

25.查詢姓 張 的學(xué)生名單

select * from student where sname like '張%';

View Code

26.查詢同名同姓學(xué)生名單,并統(tǒng)計(jì)同名人數(shù)

select sname ,COUNT(1) from student GROUP BY sname ;

View Code

27.查詢每門課程的平均分,結(jié)果按平均成績(jī)升序排列,平均成績(jī)相同時(shí),按課程號(hào)降序排列

select course.cid,avg( case when isnull(score.num) then 0 else score.num end) fromcourseLEFT JOIN score on score.course_id =course.cidGROUP BYcourse.cidORDER BY avg( case when isnull(score.num) then 0 else score.num END) asc ,score.course_id;

View Code

28.查詢平均成績(jī)大于 85 的所有學(xué)生的學(xué)號(hào)和姓名

select student.sid,student.sname,avg(num) fromscoreleft JOIN student on student.sid =score.student_idGROUP BY student_id having avg(num) > 60

ORDER BY avg(num) desc;

View Code

29 查詢課程為?物理,且分?jǐn)?shù)低于60 的學(xué)生的姓名和分?jǐn)?shù)

SELECT course_id,student.sname,num fromscoreLEFT JOIN student on student.sid =score.student_idwhere course_id = (select cid from course where cname = "物理") and num < 60;

View Code

30.查詢課程編號(hào)為003 且課程成績(jī)?cè)?0 分以上的學(xué)生的學(xué)號(hào)和姓名

SELECT course_id,student.sname,num fromscoreLEFT JOIN student on student.sid =score.student_idwhere course_id = 3 and num >80;

View Code

31.求選了課程的學(xué)生人數(shù)

select count(1) from score GROUP BY student_id;

View Code

32.查詢選修?李平?老師所教授的學(xué)生中,成績(jī)最高的學(xué)生姓名和成績(jī)

select score.course_id,score.student_id,student.sname,score.num fromscoreleft join(select course_id ,max(num) as num from score where course_id in(select cid from course where teacher_id = (select tid FROM teacher where tname like '李平%'))group by course_id ) asAon score.course_id =A.course_idleft join student on student.sid =score.student_idwhere score.num = A.num;

View Code

33.查詢各個(gè)課程及相應(yīng)的選修人數(shù)

select course.cid,course.cname,count(score.student_id) fromcourseleft JOIN score on score.course_id =course.cidGROUP BY course.cid;

View Code

34.查詢不同課程但成績(jī)相同的學(xué)生的學(xué)號(hào),課程號(hào),學(xué)生成績(jī)

--不要在意這道題的結(jié)果,因?yàn)檫@個(gè)查詢需求根本就是個(gè)奇葩

select a1.student_id, a1.course_id,a2.student_id,a2.course_id ,a2.num from score as a1 ,score asa2where (a1.student_id = a2.student_id and a1.course_id < a2.course_id and a1.num = a2.num )or(a1.student_id!= a2.student_id and a1.course_id != a2.course_id and a1.num =a2.num)ORDER BY a1.course_id asc;

View Code

35.查詢每門課程成績(jī)最好的前兩名

selectA.course_id,

A.student_id,

A.numfrom score asAwhere num >= (select num from score where course_id = A.course_id ORDER BY num desc LIMIT 1,1)ORDER BY A.course_id asc ,A.num desc;SELECTscore.course_id,score.student_id,score.numfromscoreleft JOIN(selectA.course_id,

(select num from score where score.course_id = A.course_id ORDER BY num desc LIMIT 1,1) asnumfrom score asAGROUP BYcourse_id

)as B on score.course_id =B.course_idwhere score.num >=B.numORDER BY score.course_id asc ,score.num desc;

View Code

36.檢索至少選修兩門課程的學(xué)生學(xué)號(hào)

select student_id fromscoreGROUP BY student_id having count(course_id) >=2;

View Code

37.查詢?nèi)繉W(xué)生都選修的課程的課程號(hào)和課程名

select score.course_id,course.cname fromscoreleft JOIN course on course.cid =score.course_idgroup by course_id having count(student_id) = (select count(1) from student);

View Code

38.查詢沒學(xué)過 葉平 老師講授的任意一門課程的學(xué)生姓名

select sname fromstudentwhere sid not in(select student_id fromscorewhere course_id in(select cid fromcourseleft JOIN teacher on teacher.tid =course.teacher_idwhere tname like '李平%')

);

View Code

39.查詢兩門以上不及格課程的學(xué)生的學(xué)號(hào)及平均成績(jī)

select student_id,avg(num) fromscorewhere num <60

GROUP BY student_id having count(1)>=2 ;

View Code

40.檢索 004 課程分?jǐn)?shù)小于60,按分?jǐn)?shù)降序排列的同學(xué)學(xué)號(hào)

select student_id,num fromscorewhere course_id = 4 and num < 60

order by num desc;

View Code

41刪除 002 同學(xué)的 001 課程成績(jī)

delete fromscorewhere student_id = 2 and course_id = 1;

View Code

終于吐血整理完了,撒花? ??ヽ(°▽°)ノ?

這些題目參考自?武沛齊老師博客園: https://www.cnblogs.com/ wupeiqi

答案均是我解答出來(lái)的,如有錯(cuò)誤,歡迎提出指正。轉(zhuǎn)載請(qǐng)標(biāo)明出處!

總結(jié)

以上是生活随笔為你收集整理的mysql查询选课最少成绩最高_MySQL 练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。