50道MySQL練習題

一、前提條件
1:數據表介紹
--1.學生表
Student(SId,Sname,Sage,Ssex)
--SId 學生編號,Sname 學生姓名,Sage 出生年月,Ssex 學生性別
--2.課程表
Course(CId,Cname,TId)
--CId 課程編號,Cname 課程名稱,TId 教師編號
--3.教師表
Teacher(TId,Tname)
--TId 教師編號,Tname 教師姓名
--4.成績表
SC(SId,CId,score)
--SId 學生編號,CId 課程編號,score 分數
2:表中數據
學生表 Student
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '趙雷' , '1990-01-01' , '男');
insert into Student values('02' , '錢電' , '1990-12-21' , '男');
insert into Student values('03' , '孫風' , '1990-12-20' , '男');
insert into Student values('04' , '李云' , '1990-12-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吳蘭' , '1992-01-01' , '女');
insert into Student values('07' , '鄭竹' , '1989-01-01' , '女');
insert into Student values('09' , '張三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2012-06-06' , '女');
insert into Student values('12' , '趙六' , '2013-06-13' , '女');
insert into Student values('13' , '孫七' , '2014-06-01' , '女');

科目表 Course
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '語文' , '02');
insert into Course values('02' , '數學' , '01');
insert into Course values('03' , '英語' , '03');

教師表 Teacher
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '張三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');

成績表 SC
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);
二、題目(含解析)
1.查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數【分別取出 01、02 課成績,內連接確保兩門課都有成績只保留 01 > 02 的學生】


image.png

1.1查詢同時存在" 01 "課程和" 02 "課程的情況【內連接 = 必須同時選兩門課】


image.png

1.2查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )【以 01 課為主表左連接 02 課 沒選 02 課自動為 NULL】


image.png

1.3查詢不存在" 01 "課程但存在" 02 "課程的情況【子查詢查出所有學過 01 課的學生 外層排除他們,只保留 02 課記錄】


image.png

2.查詢平均成績大于等于 60 分的同學的學生編號和學生姓名和平均成績【按學生分組,過濾平均分 ≥60】


image.png

3.查詢在 SC 表存在成績的學生信息【內連接自動過濾無成績學生 DISTINCT 去重(一個學生多門課)】
image.png

4.查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 null )【LEFT JOIN 保留所有學生 GROUP BY 學生主鍵 + 姓名】


image.png

4.1 查有成績的學生信息【EXISTS 效率高,大表優(yōu)先用】


image.png

5.查詢「李」姓老師的數量【模糊匹配姓李,COUNT 統(tǒng)計人數】
image.png

6.查詢學過「張三」老師授課的同學的信息【四表連接:學生→成績→課程→教師DISTINCT 去重】


image.png

7.查詢沒有學全所有課程的同學的信息【總課程數:3 門
選課數 < 3 即為沒學全】


image.png

8.查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信【子查詢:01 號選的課 外層:選過這些課的學生】


image.png

9.查詢和" 01 "號的同學學習的課程 完全相同的其他同學的信息【把課程 ID 拼接成字符串比較 完全一致才算相同】


image.png

10.查詢沒學過"張三"老師講授的任一門課程的學生姓名【子查詢:學過張三課的學生 外層取不在其中的學生】


image.png

11.查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績【先過濾不及格,再按學生分組 至少 2 門不及格才保留】


image.png

12.檢索" 01 "課程分數小于 60,按分數降序排列的學生信息【限定課程、分數,直接排序】


image.png

13.按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績【子查詢先算每人平均分
連接回成績表,按平均分排序】


image.png

14.查詢各科成績最高分、最低分和平均分:
以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優(yōu)良率,優(yōu)秀率
及格為>=60,中等為:70-80,優(yōu)良為:80-90,優(yōu)秀為:>=90
要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列【SUM (條件) 統(tǒng)計符合條件人數】


image.png

15.按各科成績進行排序,并顯示排名, Score 重復時保留名次空缺【窗口函數 RANK ():同分同排名,下一名跳號】


image.png

15.1 按各科成績進行排序,并顯示排名, Score 重復時合并名次【DENSE_RANK ():同分同排名,下一名連續(xù)】


image.png

16.查詢學生的總成績,并進行排名,總分重復時保留名次空缺【先算總分,再窗口排名】


image.png

16.1 查詢學生的總成績,并進行排名,總分重復時不保留名次空缺


image.png

17.統(tǒng)計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所占百分比【用 SUM (條件) 分段統(tǒng)計】


image.png

18.查詢各科成績前三名的記錄【窗口排名后過濾前 3】


image.png

19.查詢每門課程被選修的學生數


image.png

20.查詢出只選修兩門課程的學生學號和姓名


image.png

21.查詢男生、女生人數


image.png

22.查詢名字中含有「風」字的學生信息


image.png

23.查詢同名同性學生名單,并統(tǒng)計同名人數


image.png

24.查詢 1990 年出生的學生名單


image.png

25.查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列


image.png

26.查詢平均成績大于等于 85 的所有學生的學號、姓名和平均成績


image.png

27.查詢課程名稱為「數學」,且分數低于 60 的學生姓名和分數


image.png

28.查詢所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)


image.png

29.查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數


image.png

30.查詢不及格的課程


image.png

31.查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名


image.png

32.求每門課程的學生人數


image.png

33.成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績


image.png

34.成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績


image.png

35.查詢不同課程成績相同的學生的學生編號、課程編號、學生成績【CId1 < CId2 避免重復配對(1&2 / 2&1)】


image.png

36.查詢每門功成績最好的前兩名


image.png

37.統(tǒng)計每門課程的學生選修人數(超過 5 人的課程才統(tǒng)計)。


image.png

38.檢索至少選修兩門課程的學生學號


image.png

39.查詢選修了全部課程的學生信息


image.png

40.查詢各學生的年齡,只按年份來算


image.png

41.按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一


image.png

42.查詢本周過生日的學生


image.png

43.查詢下周過生日的學生


image.png

44.查詢本月過生日的學生


image.png

45.查詢下月過生日的學生


image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容