### SQL查询语句知识点解析 #### 1. 查询Student表中的所有记录的Sname、Ssex和Class列。 - **SQL语句**:`SELECT Sname, Ssex, Class FROM Student;` - **知识点**:这里用到了基本的`SELECT`语句来选择指定的列。`FROM`关键字用来指定数据来源表。 #### 2. 查询教师所有的单位即不重复的Depart列。 - **SQL语句**:`SELECT DISTINCT depart FROM Teacher;` - **知识点**:`DISTINCT`关键字用于去除重复项,确保结果集中的Depart列每一项都是唯一的。 #### 3. 查询Student表的所有记录。 - **SQL语句**:`SELECT Sno AS '学号', Sname AS '姓名', Ssex AS '性别', Sbirthday AS '出生日期', Class AS '班号' FROM Student;` - **知识点**:`AS`关键字可以用来重命名输出的列名,使得结果更易于理解。 #### 4. 查询Score表中成绩在60到80之间的所有记录。 - **SQL语句**:`SELECT * FROM Score WHERE Degree BETWEEN 60 AND 80;` - **知识点**:`BETWEEN`关键字用来指定一个范围内的值。这里表示查询成绩在60到80之间的记录。 #### 5. 查询Score表中成绩为85,86或88的记录。 - **SQL语句**:`SELECT * FROM Score WHERE Degree IN (85, 86, 88);` - **知识点**:`IN`关键字用于匹配一组特定的值。这里表示查询成绩为85、86或88的记录。 #### 6. 查询Student表中“95031”班或性别为“女”的同学记录。 - **SQL语句**:`SELECT * FROM Student WHERE Class = '95031' OR Ssex = '女';` - **知识点**:`OR`运算符用于组合多个条件,只要满足其中一个即可。 #### 7. 以Class降序查询Student表的所有记录。 - **SQL语句**:`SELECT * FROM Student ORDER BY Class DESC;` - **知识点**:`ORDER BY`关键字用来对结果进行排序。`DESC`表示降序排列。 #### 8. 以Cno升序、Degree降序查询Score表的所有记录。 - **SQL语句**:`SELECT * FROM Score ORDER BY Cno ASC, Degree DESC;` - **知识点**:可以使用多个`ORDER BY`子句对不同的列进行排序。`ASC`表示升序排列。 #### 9. 查询“95031”班的学生人数。 - **SQL语句**:`SELECT COUNT(*) FROM Student WHERE Class = '95031';` - **知识点**:`COUNT(*)`函数用来统计行的数量。这里表示统计95031班的学生总数。 #### 10. 查询Score表中的最高分的学生学号和课程号。 - **SQL语句**:`SELECT Sno, Cno FROM Score WHERE Degree = (SELECT MAX(Degree) FROM Score);` - **知识点**:子查询用于获取Score表中的最高分,然后通过`WHERE`子句匹配这个最高分对应的记录。 #### 11. 查询‘3-105’号课程的平均分。 - **SQL语句**:`SELECT AVG(Degree) FROM Score WHERE Cno = '3-105';` - **知识点**:`AVG()`函数用于计算指定列的平均值。 #### 12. 查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。 - **SQL语句**:`SELECT Cno, AVG(Degree) FROM Score WHERE Cno LIKE '3%' GROUP BY Cno HAVING COUNT(*) >= 5;` - **知识点**:`LIKE`关键字用于模式匹配,`GROUP BY`关键字将结果按照某一列分组,`HAVING`子句则用于筛选这些分组。 #### 13. 查询最低分大于70,最高分小于90的Sno列。 - **SQL语句**:`SELECT Sno FROM Score GROUP BY Sno HAVING MIN(Degree) > 70 AND MAX(Degree) < 90;` - **知识点**:`MIN()`和`MAX()`函数分别用来获取每组的最低分和最高分,`HAVING`子句用于过滤这些分组。 #### 14. 查询所有学生的Sname、Cno和Degree列。 - **SQL语句**:`SELECT Sname, Cno, Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno;` - **知识点**:`JOIN`操作用于连接两个表,基于共同的列(这里是指`Sno`)。 #### 15. 查询所有学生的Sno、Cname和Degree列。 - **SQL语句**:`SELECT s.Sno, c.Cname, sc.Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN Course c ON sc.Cno = c.Cno;` - **知识点**:这里使用了两次`JOIN`操作,第一次连接Student表和Score表,第二次连接Score表和Course表。 #### 16. 查询所有学生的Sname、Cname和Degree列。 - **SQL语句**:`SELECT s.Sname, c.Cname, sc.Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN Course c ON sc.Cno = c.Cno;` - **知识点**:这个查询和上一个类似,但是输出的是Sname而不是Sno。 #### 17. 查询“95033”班所选课程的平均分。 - **SQL语句**:`SELECT AVG(sc.Degree) FROM Student s JOIN Score sc ON s.Sno = sc.Sno WHERE s.Class = '95033';` - **知识点**:这里使用了`JOIN`操作来连接Student表和Score表,并通过`WHERE`子句筛选出特定班级的学生。 #### 18. 使用grade表查询所有同学的Sno、Cno和rank列。 - **SQL语句**:`SELECT s.Sno, sc.Cno, g.rank FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN Grade g ON sc.Degree BETWEEN g.low AND g.upp;` - **知识点**:这里使用了三次`JOIN`操作,连接Student表、Score表和Grade表。`BETWEEN`关键字用于匹配成绩范围。 #### 19. 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 - **SQL语句**:`SELECT * FROM Score WHERE Cno = '3-105' AND Degree > (SELECT Degree FROM Score WHERE Sno = '109' AND Cno = '3-105');` - **知识点**:子查询用于获取特定同学的成绩,外层查询则筛选出成绩更高的记录。 #### 20. 查询score中选学一门以上课程的同学中分数为非最高分成绩的记录。 - **SQL语句**:`SELECT * FROM Score WHERE Degree < (SELECT MAX(Degree) FROM Score WHERE Sno = sc.Sno) GROUP BY Sno HAVING COUNT(Cno) > 1;` - **知识点**:这里首先使用`GROUP BY`对学号进行分组,然后使用`HAVING`子句筛选出选修了多门课程的同学,最后使用子查询找到这些同学中的非最高分成绩。 #### 21. 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 - **SQL语句**:`SELECT * FROM Score WHERE Degree > (SELECT Degree FROM Score WHERE Sno = '109' AND Cno = '3-105');` - **知识点**:这个查询类似于第19条,也是使用子查询来获取特定同学的成绩,并在外层查询中进行比较。 #### 22. 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 - **SQL语句**:`SELECT Sno, Sname, Sbirthday FROM Student WHERE YEAR(Sbirthday) = (SELECT YEAR(Sbirthday) FROM Student WHERE Sno = '108');` - **知识点**:`YEAR()`函数用于提取日期中的年份,`WHERE`子句用于匹配同年出生的学生。 #### 23. 查询“张旭“教师任课的学生成绩。 - **SQL语句**:`SELECT s.Sno, sc.Cno, sc.Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN Course c ON sc.Cno = c.Cno JOIN Teacher t ON c.Tno = t.Tno WHERE t.Tname = '张旭';` - **知识点**:这里使用了多次`JOIN`操作来连接多个表,最终筛选出由“张旭”教师任教的课程的成绩。 #### 24. 查询选修某课程的同学人数多于5人的教师姓名。 - **SQL语句**:`SELECT t.Tname FROM Teacher t JOIN Course c ON t.Tno = c.Tno JOIN Score sc ON c.Cno = sc.Cno GROUP BY t.Tname HAVING COUNT(sc.Sno) > 5;` - **知识点**:这里使用了`JOIN`操作连接Teacher表、Course表和Score表,通过`GROUP BY`和`HAVING`子句筛选出符合条件的教师。 #### 25. 查询95033班和95031班全体学生的记录。 - **SQL语句**:`SELECT * FROM Student WHERE Class IN ('95033', '95031');` - **知识点**:这里使用了`IN`关键字来匹配多个值,筛选出特定班级的学生记录。 #### 26. 查询存在有85分以上成绩的课程Cno. - **SQL语句**:`SELECT DISTINCT Cno FROM Score WHERE Degree >= 85;` - **知识点**:这里使用`DISTINCT`关键字去除重复的Cno,`WHERE`子句用于筛选成绩在85分以上的记录。 #### 27. 查询出“计算机系“教师所教课程的成绩表。 - **SQL语句**:`SELECT s.Sno, sc.Cno, sc.Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN Course c ON sc.Cno = c.Cno JOIN Teacher t ON c.Tno = t.Tno WHERE t.Depart = '计算机系';` - **知识点**:这里同样使用了多次`JOIN`操作来连接多个表,并通过`WHERE`子句筛选出由“计算机系”教师任教的课程的成绩。 #### 28. 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 - **SQL语句**:`SELECT t.Tname, t.Prof FROM Teacher t WHERE t.Depart IN ('计算机系', '电子工程系') GROUP BY t.Prof, t.Tname HAVING COUNT(t.Prof) = 1;` - **知识点**:这里使用`GROUP BY`对职称和教师名字进行分组,并通过`HAVING`子句筛选出每个职称只有一个教师的情况。 #### 29. 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 - **SQL语句**:`SELECT Cno, Sno, Degree FROM Score WHERE Cno = '3-105' AND Degree > (SELECT MAX(Degree) FROM Score WHERE Cno = '3-245') ORDER BY Degree DESC;` - **知识点**:这里使用子查询获取编号为“3-245”的课程的最高分,并在外层查询中进行比较,最后按成绩降序排列。 #### 30. 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. - **SQL语句**:`SELECT Cno, Sno, Degree FROM Score WHERE Cno = '3-105' AND Degree > (SELECT MAX(Degree) FROM Score WHERE Cno = '3-245');` - **知识点**:这个查询与上一个类似,只是没有指定排序。 #### 31. 查询所有教师和同学的name、sex和birthday. - **SQL语句**:`SELECT name, sex, birthday FROM (SELECT Tname AS name, Tsex AS sex, Tbirthday AS birthday FROM Teacher UNION ALL SELECT Sname AS name, Ssex AS sex, Sbirthday AS birthday FROM Student);` - **知识点**:这里使用`UNION ALL`操作来合并Teacher表和Student表的结果。 #### 32. 查询所有“女”教师和“女”同学的name、sex和birthday. - **SQL语句**:`SELECT name, sex, birthday FROM (SELECT Tname AS name, Tsex AS sex, Tbirthday AS birthday FROM Teacher WHERE Tsex = '女' UNION ALL SELECT Sname AS name, Ssex AS sex, Sbirthday AS birthday FROM Student WHERE Ssex = '女');` - **知识点**:这个查询在上一个的基础上增加了`WHERE`子句来筛选出性别为“女”的教师和学生。 #### 33. 查询成绩比该课程平均成绩低的同学的成绩表。 - **SQL语句**:`SELECT s.Sno, sc.Cno, sc.Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN (SELECT Cno, AVG(Degree) AS avg_degree FROM Score GROUP BY Cno) avg_scores ON sc.Cno = avg_scores.Cno WHERE sc.Degree < avg_scores.avg_degree;` - **知识点**:这里使用了子查询来获取每个课程的平均成绩,并在外层查询中比较单个学生的成绩是否低于该课程的平均成绩。 #### 34. 查询所有任课教师的Tname和Depart. - **SQL语句**:`SELECT t.Tname, t.Depart FROM Teacher t JOIN Course c ON t.Tno = c.Tno;` - **知识点**:这里使用`JOIN`操作来连接Teacher表和Course表,筛选出任课教师的信息。 #### 35. 查询所有未讲课的教师的Tname和Depart. - **SQL语句**:`SELECT t.Tname, t.Depart FROM Teacher t LEFT JOIN Course c ON t.Tno = c.Tno WHERE c.Cno IS NULL;` - **知识点**:这里使用`LEFT JOIN`操作来连接Teacher表和Course表,并通过`WHERE`子句筛选出未讲课的教师。 #### 36. 查询至少有2名男生的班号。 - **SQL语句**:`SELECT Class FROM Student WHERE Ssex = '男' GROUP BY Class HAVING COUNT(*) >= 2;` - **知识点**:这里使用`GROUP BY`对班号进行分组,并通过`HAVING`子句筛选出至少有两个男生的班级。 #### 37. 查询Student表中不姓“王”的同学记录。 - **SQL语句**:`SELECT * FROM Student WHERE Sname NOT LIKE '王%';` - **知识点**:`NOT LIKE`关键字用于排除模式匹配,这里的模式`'王%'`表示以“王”开头的名字。 #### 38. 查询Student表中每个学生的姓名和年龄。 - **SQL语句**:`SELECT Sname, (YEAR(CURDATE()) - YEAR(Sbirthday)) AS age FROM Student;` - **知识点**:这里使用`YEAR()`函数和当前日期`CURDATE()`函数来计算每个学生的年龄。 #### 39. 查询Student表中最大和最小的Sbirthday日期值。 - **SQL语句**:`SELECT MAX(Sbirthday) AS max_birthday, MIN(Sbirthday) AS min_birthday FROM Student;` - **知识点**:这里使用`MAX()`和`MIN()`函数来获取最大和最小的生日日期。 #### 40. 以班号和年龄从大到小的顺序查询Student表中的全部记录。 - **SQL语句**:`SELECT *, (YEAR(CURDATE()) - YEAR(Sbirthday)) AS age FROM Student ORDER BY Class DESC, age DESC;` - **知识点**:这里使用`ORDER BY`对班号和年龄进行排序,并通过`DESC`关键字实现降序排列。 #### 41. 查询“男”教师及其所上的课程。 - **SQL语句**:`SELECT t.Tname, c.Cname FROM Teacher t JOIN Course c ON t.Tno = c.Tno WHERE t.Tsex = '男';` - **知识点**:这里使用`JOIN`操作来连接Teacher表和Course表,并通过`WHERE`子句筛选出男性教师。 #### 42. 查询最高分同学的Sno、Cno和Degree列。 - **SQL语句**:`SELECT Sno, Cno, Degree FROM Score WHERE Degree = (SELECT MAX(Degree) FROM Score);` - **知识点**:这里使用子查询获取最高分,然后通过`WHERE`子句匹配这个最高分对应的记录。 #### 43. 查询和“李军”同性别的所有同学的Sname. - **SQL语句**:`SELECT Sname FROM Student WHERE Ssex = (SELECT Ssex FROM Student WHERE Sname = '李军');` - **知识点**:这里使用子查询获取“李军”的性别,并在外层查询中进行匹配。 #### 44. 查询和“李军”同性别并同班的同学Sname. - **SQL语句**:`SELECT Sname FROM Student WHERE Ssex = (SELECT Ssex FROM Student WHERE Sname = '李军') AND Class = (SELECT Class FROM Student WHERE Sname = '李军');` - **知识点**:这里使用了两个子查询来获取“李军”的性别和班级,并在外层查询中进行匹配。 #### 45. 查询所有选修“计算机导论”课程的“男”同学的成绩表 - **SQL语句**:`SELECT s.Sno, sc.Cno, sc.Degree FROM Student s JOIN Score sc ON s.Sno = sc.Sno JOIN Course c ON sc.Cno = c.Cno WHERE s.Ssex = '男' AND c.Cname = '计算机导论';` - **知识点**:这里使用了多次`JOIN`操作来连接多个表,并通过`WHERE`子句筛选出选修“计算机导论”课程的男性学生。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- assets-v8.1.0-yolov8s-worldv2.zip
- 基于Python实现手写数字识别 (期末大作业&课程设计).zip
- AP2533GY-HF-VB一款2个N+P-Channel沟道SOT23-6的MOSFET晶体管参数介绍与应用说明
- C# winform 定时自动删除文件夹,多少天删除一次文件夹(含exe导出文件双击即可使用+源码)
- AP2532GY-VB一款2个N+P-Channel沟道SOT23-6的MOSFET晶体管参数介绍与应用说明
- AFSim2.9.0 Linux编译指南
- 微信小程序毕业设计-基于SSM的新生报到系统PPT.ppt
- VID_20240810_150805_344.mp4
- 简单国庆主题HTML示例
- 微信小程序毕业设计-基于SSM的新生报到系统论文.docx