1. 在表中插入符合主键
[sql] 
/*成绩表*/ 
CREATE TABLE SC  
(  
Sid INT REFERENCES Student(Sid), /*学生学号*/ 
Cid INT REFERENCES Course(Cid), /*课程编号*/ 
Score INT NOT NULL, /*课程分数*/ 
PRIMARY KEY(Sid,Cid) /*将学生学号和课程编号设为复合主键*/ 
)  
 
2. 查询各科成绩最高分,最低分以及平均分
[sql] 
SELECT c.Cname, MAX(s.Score) AS Max, MIN(s.Score) AS Min, AVG(s.Score) AS Average   
FROM Course c JOIN SC s ON c.Cid = s.Cid   
GROUP BY c.Cname   
/*此处应注意,若不按照c.Cname进行分组,SQL语句会报错,c.Cname在SELECT语句中不合法,因为它  
并未出现在聚合函数中也没有出现在GROUP BY语句中*/ 
 
 
3. 查询平均成绩大于80分的学生姓名以及平均成绩
[sql] 
SELECT Sname, AVG(Score) AS Average FROM Student JOIN SC   
ON Student.Sid=SC.Sid   
GROUP BY Sname  
HAVING AVG(Score)>80   
/*以聚合函数为条件进行删选只能在HAVING语句中进行,WHERE语句不支持聚合函数*/ 
 
 
4. 查询各学生都选了多少门课
[sql] 
SELECT Sname, COUNT(Cid) AS TOTAL_COURSE FROM Student   
LEFT JOIN SC ON Student.Sid=SC.Sid  
GROUP BY Sname  
/*使用LEFT JOIN可以将一门课也没有选的学生也查询出来,  
若不加LEFT查不出DAISY和SHERRY*/ 
 
 
5. 查询没有选JANE老师课的学生信息
[sql] 
SELECT s.Sid,s.Sname,s.Sage,s.Sage FROM Student s   
WHERE s.Sid NOT IN  
(SELECT s.Sid FROM SC s JOIN Course c ON s.Cid=c.Cid   
JOIN Teacher t ON c.Tid=t.Tid   
WHERE t.Tname='JANE')  
/*子查询中查询出所有选择JANE老师课的学生学号,  
主查询去查询在学生表中但不在子查询结果集中的学生信息*/ 
 
 
6. 查询既选择了COMPUTER课程,又选择了MATH课程的学生信息
[sql] 
SELECT s.Sid,s.Sname,s.Sage,s.Ssex FROM STUDENT s   
JOIN SC ss ON s.Sid=ss.Sid  
JOIN Course c ON ss.Cid=c.Cid WHERE c.Cname='COMPUTER' 
INTERSECT 
SELECT s.Sid,s.Sname,s.Sage,s.Ssex FROM STUDENT s   
JOIN SC ss ON s.Sid=ss.Sid  
JOIN Course c ON ss.Cid=c.Cid WHERE c.Cname='MATH' 
/*第一个查询查询出选择COMPUTER课程的学生信息,  
第二个查询查询出选择MATH课程的学生信息,  
用INTERSECT关键字取交集*/ 
 
 
7. 查询COMPUTER课程比MATH课程分数高的学生学号
[sql] 
SELECT a.Sid FROM  
(SELECT s.Sid,s.Score FROM SC s JOIN Course c ON s.Cid=c.Cid WHERE c.Cname='COMPUTER') a  
JOIN 
(SELECT s.Sid,s.Score FROM SC s JOIN Course c ON s.Cid=c.Cid WHERE c.Cname='MATH') b  
ON a.Sid=b.Sid  
WHERE a.Score>b.Score  
/*将选了COMPUTER课的学生学号和成绩和选了MATH课的学生学号和成绩连接  
WHERE语句限制COMPUTER课的成绩高于MATH课*/ 
 
 
8. 查询和JOHN选的课相同的学生信息
[sql] 
SELECT Student.Sname FROM Student JOIN SC ON Student.Sid=SC.Sid  
WHERE SC.Cid IN 
(SELECT SC.Cid FROM SC JOIN Student ON SC.Sid=Student.Sid WHERE Student.Sname='JOHN') /*查询选了的课JOHN也都选了的学生的姓名*/ 
AND Student.Sname<>'JOHN' /*限制该学生不能是JOHN本人*/ 
GROUP BY Student.Sname   
HAVING COUNT(SC.Cid)=  
(SELECT COUNT(*) FROM SC JOIN Student ON SC.Sid=Student.Sid WHERE Student.Sname='JOHN') /*该学生选的课程总数与JOHN选的课程总数相同*/ 
 
 
9. 按总分为学生排名,总分相同名次相同
[sql] 
SELECT RANK() OVER (ORDER BY SUM(ss.Score) DESC) AS Rank, s.Sname, ISNULL(SUM(ss.Score),0)   
FROM Student s LEFT JOIN SC ss   
ON s.Sid = ss.Sid   
GROUP BY s.Sname   
ORDER BY SUM(ss.Score) DESC 
/*RANK()是SQL Server的一个built-in函数,语法为  
RANK() OVER ( [ partition_by_clause ] order_by_clause ).*/ 
 
 
10. 查询总分在100至200之间的学生姓名及总分
[sql] 
SELECT s.Sname,SUM(ss.Score) FROM Student s JOIN SC ss ON s.Sid=ss.Sid  
GROUP BY s.Sname HAVING SUM(ss.Score) BETWEEN 100 AND 200  
 
 
11. 查询总分第六到十名的学生姓名以及总分
[sql] 
SELECT * FROM 
(SELECT TOP(5) * FROM 
(SELECT TOP(10) SC.Sid,SUM(SC.Score) AS SUM FROM SC GROUP BY SC.Sid ORDER BY SUM(SC.Score)) a  
ORDER BY a.SUM) b  
ORDER BY b.SUM DESC 
/*SELECT TOP(10) SC.Sid,SUM(SC.Score) AS SUM FROM SC GROUP BY SC.Sid ORDER BY SUM(SC.Score)查询出总分前十名  
SELECT TOP(5) FROM (...) a ORDER BY a.SUM查询出成绩六到十名  
SELECT * FROM (...) b ORDER BY b.SUM DESC将结果倒序按照从高分到低分排列*/ 
 
 
12. 查询各科成绩的前三名以及分数
[sql] 
SELECT s.Sid,s.Cid,s.Score FROM SC s   
WHERE s.Score IN  
(SELECT TOP(3) Score FROM SC WHERE s.Cid= Cid ORDER BY score DESC)   
ORDER BY s.Cid;  
/*从SC表中查询出学生学号,课程编号以及成绩,WHERE子句限制了查询出的记录成绩必须在子查询集合内  
子查询查询出了各科成绩的前三名并通过课程编号和主查询关联*/  
 
 
13. 查询有不及格科目的学生的姓名,不及格科目以及不及格科目成绩
[sql] 
SELECT s.Sname,c.Cname,ss.Score FROM Student s JOIN SC ss ON s.Sid=ss.Sid JOIN Course c ON ss.Cid=c.Cid  
WHERE ss.Score<60  
 
 
14. 查询所有学生都选修的课程
[sql] 
SELECT c.Cname FROM SC s JOIN Course c ON s.Cid=c.Cid   
GROUP BY c.Cname HAVING COUNT(s.Sid)=(SELECT COUNT(*) FROM Student)  
 
15. 查询选修了两门或以上的学生姓名及选修总科目
[sql] 
SELECT s.Sname,COUNT(ss.Cid) AS TOTAL FROM Student s JOIN SC ss ON s.Sid=ss.Sid   
GROUP BY s.Sname HAVING COUNT(ss.Cid)>1

学生表/教师表/课程表/成绩表常见SQL查询相关推荐

  1. mysql建立班级表_mysql数据表设计-班级表 学生表 老师表 课程表 成绩表

    mysql数据表设计- 班级表 学生表 老师表 课程表 成绩表 image.png /* Navicat Premium Data Transfer Source Server : localhost ...

  2. 学生表课程表成绩表教师表

    . Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...

  3. mysql成绩表_mysql--学生课程成绩表

    创建表student: CREATE TABLE `student` ( `sid` INT(11) NOT NULL AUTO_INCREMENT, `sname` VARCHAR(20) NOT ...

  4. 学生表 成绩表 课程表 教师表

    学生表: Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 课程表: Course(c_id,c_name,t_id) – –课程编号, ...

  5. MySQL三表查询(学生表、课程表、成绩表)查询出语文成绩比数学成绩高的学生信息

    有三张表 学生表 课程表 成绩表 要求查处语文成绩低于数学成绩的学生信息 先去课程表中查出课程cid select cid from course where cname='语文'; select c ...

  6. mysql面试题学校三表查询_mysql经典面试题之学生成绩表

    需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID, ...

  7. python给成绩表加上姓名列_成绩表

    mysql 查询语句的使用2020-12-17 17:32:24 DISTINCT 去重关键字 -- 查询哪些学生参加了考试 -- 思路:在成绩表中查询学生id 再看学生表 中的id 是否存在于成绩表 ...

  8. mysql查询成绩表中课程编号升序,Python 之 MySql 每日一练 232——查询每门课程的平均成绩...

    一.表名和字段 –1. 学生表 student (s_id,s_name,s_birth,s_sex) –学生编号,学生姓名,出生年月,学生性别 –2. 课程表 course (c_id,c_name ...

  9. access统计班级人数_Excel中怎么快速统计成绩表中分数段人数 - 卡饭网

    Excel 五个函数统计学生期末考试分数段 Excel 五个函数统计学生期末考试分数段 考试结束,老师们都要对学生的考试成绩进行分析.各分数段人数的统计是其中一项必做的工作.在Excel中,怎样快速准 ...

最新文章

  1. python第七周答案_马哥2016全新Linux+Python高端运维班第七周作业
  2. win下打包成tar.gz
  3. boost::interprocess::ipcdetail::private_adaptive_node_pool用法的测试程序
  4. Linux如何在栈上分配内存,Java堆与栈内存分配及String小记
  5. RT-Thread设备框架学习感悟
  6. Written English-书面-一般现在时
  7. python嵌套列表操作方法_python中多层嵌套列表的拆分方法
  8. 今天开始写一些内容,留作备份。
  9. Python 为何能成最强编程语言?!
  10. gatling系列教程(翻译)-第三节(快速开始)
  11. 入门不简单(《Beginning C# Objects中文版》书评)
  12. 2019年一线城市程序员工资大调查
  13. 如果不明白该用组合关系还是依赖关系,就来看这一篇!
  14. js 下拉层级多选_Jquery实现select二级联动多选下拉菜单
  15. 制作一个浪漫的表白网页
  16. 医学图像分割之Attention U-Net
  17. MongoDB多层嵌套查询
  18. LaTex论文排版 | (4) LaTex的字体设置
  19. java课程设计-文本编辑器
  20. 分享最新版的 INTELWIFI 驱动包

热门文章

  1. 空间站WiFi覆盖 高性价比无线路由方案的WiFi模块
  2. mybatis的left join多条件操作
  3. 笔记36 笨办法学python练习43面向对象OOP的文字理解(一)
  4. java时间规范化_Java日期时间使用总结
  5. 【EI快速高录用】这可能是近2年发表SCI论文的最好机会!
  6. oracle_day5_程序包
  7. 中国软考2006年各地报名方式和咨询地址
  8. 利用ajax实现织梦dedecms瀑布流无限加载功能
  9. 基于蜉蝣优化算法的函数寻优算法
  10. PLC SECS/GEM解决方案,设计与应用