--CREATE DATABASE EXAM_1
--GO USE EXAM_1
--判断并删除表
IF OBJECT_ID('Scores') IS NOT NULL
DROP TABLE Scores;
GO IF OBJECT_ID('Courses') IS NOT NULL
DROP TABLE Courses;
GO IF OBJECT_ID('Students') IS NOT NULL
DROP TABLE Students;
GO IF OBJECT_ID('Teachers') IS NOT NULL
DROP TABLE Teachers;
GO CREATE TABLE Students
(
Id INT CONSTRAINT PK_SId PRIMARY KEY IDENTITY,
Name NVARCHAR(20) NOT NULL,
Age INT NOT NULL,
Sex BIT DEFAULT 1 NOT NULL
) CREATE TABLE Teachers
(
Id INT CONSTRAINT PK_TId PRIMARY KEY IDENTITY,
Name NVARCHAR(20) NOT NULL,
CradId CHAR(18) NOT NULL,
) CREATE TABLE Courses
(
Id INT CONSTRAINT PK_CId PRIMARY KEY IDENTITY,
Name NVARCHAR(20) NOT NULL,
TeacherId INT REFERENCES Teachers(Id)
) CREATE TABLE Scores
(
Id INT CONSTRAINT PK_ScoreId PRIMARY KEY IDENTITY,
Score NUMERIC NOT NULL CHECK(Score >= 0 AND Score <= 100.00),
StudentId INT REFERENCES Students(Id),
CourseId INT REFERENCES Courses(Id)
) GO --学生
INSERT INTO Students VALUES('张三',20,0)
INSERT INTO Students VALUES('李四',21,1)
INSERT INTO Students VALUES('王五',22,1)
INSERT INTO Students VALUES('赵六',23,0)
INSERT INTO Students VALUES('李七',24,1)
INSERT INTO Students VALUES('孙八',25,1) --老师
INSERT INTO Teachers VALUES('李响','')
INSERT INTO Teachers VALUES('梁茜','')
INSERT INTO Teachers VALUES('刘彬','')
INSERT INTO Teachers VALUES('刘青','')
INSERT INTO Teachers VALUES('魏能','')
INSERT INTO Teachers VALUES('段玉','') --课程
INSERT INTO Courses VALUES('C#',1)
INSERT INTO Courses VALUES('SQLSERVER',1)
INSERT INTO Courses VALUES('HTML',2)
INSERT INTO Courses VALUES('CSS',3)
INSERT INTO Courses VALUES('JAVASCRIPT',3)
INSERT INTO Courses VALUES('VUE',3) --分数
INSERT INTO Scores VALUES(90,1,1)
INSERT INTO Scores VALUES(96,1,2)
INSERT INTO Scores VALUES(95,1,3)
INSERT INTO Scores VALUES(70,2,4)
INSERT INTO Scores VALUES(50,2,5)
INSERT INTO Scores VALUES(66,3,5)
INSERT INTO Scores VALUES(88,3,4)
INSERT INTO Scores VALUES(66,4,4) --(1) 查询平均成绩大于90分的同学的学生编号和平均成绩。
SELECT StudentId,AVG(Score) AS 平均分 FROM Scores GROUP BY StudentId HAVING AVG(Score) > 90 --(2) 查询所有学生的学生编号、姓名、选课数、总成绩。
SELECT Students.Id AS 学生编号,Students.Name AS 姓名,COUNT(Scores.CourseId) AS 选课数,SUM(Score) AS 总成绩 FROM Students
INNER JOIN Scores ON Students.Id = Scores.StudentId
INNER JOIN Courses ON Scores.CourseId = Courses.Id
GROUP BY Students.Id,Students.Name --(3) 查询姓“李”的老师的个数。(3分)
SELECT COUNT(*) AS 李姓老师个数 FROM
(
SELECT * FROM Teachers WHERE Teachers.Name LIKE '李%'
)
AS T1 --(4) 查询没学过“梁茜”老师课的同学的学号、姓名。
SELECT Students.Id AS 学号,Students.Name AS 姓名 FROM Students
INNER JOIN Scores ON Students.Id = Scores.StudentId
WHERE Scores.CourseId NOT IN
(
SELECT Courses.Id AS CID FROM Courses
INNER JOIN Teachers ON Courses.TeacherId = Teachers.Id
WHERE Teachers.Name = '梁茜'
) --(5) 查询学过“C#”并且也学过“SQL Server”课程的同学的学号、姓名。(3分)
SELECT Students.Id AS 学号,Students.Name AS 姓名 FROM Students
INNER JOIN Scores ON Students.Id = Scores.StudentId
INNER JOIN Courses ON Scores.CourseId = Courses.Id
WHERE Courses.Name = 'C#' OR Courses.Name = 'SQLSERVER'
GROUP BY Students.Id,Students.Name
HAVING COUNT(Courses.Name) > 1 --(6) 查询学过“刘彬”老师所教的所有课的同学的学号、姓名。(3分)
SELECT Students.Id AS 学号,Students.Name AS 姓名 FROM Students
INNER JOIN Scores ON Students.Id = Scores.StudentId
WHERE Scores.CourseId IN
(
SELECT Courses.Id AS CID FROM Courses
INNER JOIN Teachers ON Courses.TeacherId = Teachers.Id
WHERE Teachers.Name = '刘彬'
) --(7) 查询课程“C#”的成绩比课程“SQL Server”课程低的所有同学的学号、姓名。
SELECT Students.Id AS 学号,Students.Name AS 姓名 FROM
(
SELECT StudentId,
SUM(CASE NAME WHEN 'C#' THEN Score END) AS C#,
SUM(CASE NAME WHEN 'SQLSERVER' THEN Score END) AS SQLSERVER
FROM
(
SELECT StudentId,Name,Score FROM Courses INNER JOIN Scores ON Courses.Id = Scores.CourseId
WHERE Name = 'C#' OR Name = 'SQLSERVER'
)
AS T1
GROUP BY T1.StudentId
)
AS T2
INNER JOIN Students
ON T2.StudentId = Students.Id
WHERE T2.C# < T2.SQLSERVER --(8) 查询所有课程成绩小于90分的同学的学号、姓名。(3分)
SELECT Students.Id AS 学号,Students.Name FROM Students
WHERE Students.Id IN
(
SELECT StudentId FROM Scores WHERE Score < 90
) --(9) 查询没有学全所有课的同学的学号、姓名。(3分)
SELECT Students.Id AS 学生编号,Students.Name AS 姓名 FROM Students
INNER JOIN Scores ON Students.Id = Scores.StudentId
INNER JOIN Courses ON Scores.CourseId = Courses.Id
GROUP BY Students.Id,Students.Name
HAVING COUNT(Scores.CourseId) < (SELECT COUNT(*) FROM Courses) --(10) 查询至少有一门课与学生编号为“2”的学生所学相同的学生的学号和姓名。
SELECT Students.Id AS 学生编号,Students.Name AS 姓名 FROM Scores
INNER JOIN Students ON Scores.StudentId = Students.Id
WHERE CourseId IN
(SELECT CourseId FROM Scores WHERE StudentId = 2)
GROUP BY Students.Id,Students.Name
HAVING COUNT(Students.Name) > 0 --(11) 查询至少学过学生编号为“1”的学生的其中一门课的其他学生的姓名和性别。
SELECT Students.Id AS 学生编号,Students.Name AS 姓名 FROM Scores
INNER JOIN Students ON Scores.StudentId = Students.Id
WHERE CourseId IN
(SELECT CourseId FROM Scores WHERE StudentId = 1)
AND StudentId != 1
GROUP BY Students.Id,Students.Name
HAVING COUNT(Students.Name) > 0 --(12) 把成绩表中“梁茜”老师教的课的成绩都更改为此课程的平均成绩。
SELECT Teachers.Name,Courses.Name AS 课程名称,AVG(Scores.Score) AS 平均成绩 FROM Teachers
INNER JOIN Courses ON Teachers.Id = Courses.TeacherId
INNER JOIN Scores ON Courses.Id = Scores.CourseId
WHERE Teachers.Name = '梁茜'
GROUP BY Teachers.Name,Courses.Name -- (13) 查询和学生编号为“2”的学生学习的课程完全相同的其他学生的姓名和性别。
select * from Students where id in
(
select studentId from Scores where StudentId not in
(
select StudentId from Scores s where CourseId not in
(
select CourseId from Scores where StudentId=2
)
)
group by StudentId having count(StudentId) =
(
select Count(0) from Scores where StudentId=2
)
) and Id!=2 --(14) 删除学习“刘彬”老师课的成绩表记录。(4分)
DELETE FROM Scores WHERE CourseId IN
(
SELECT Courses.Id FROM Teachers INNER JOIN Courses
ON Teachers.Id = Courses.TeacherId WHERE Teachers.Name = '刘彬'
) --(15) 按平均成绩从高到低显示所有学生的“C#”、“SQL Server”、“ASP.NET面向对象编程”三门的课程成绩。(4分)
SELECT * FROM
(
SELECT
ROW_NUMBER() OVER(PARTITION BY CourseId ORDER BY Score DESC) AS RANK,
Students.Id,Students.Name FROM Scores
INNER JOIN Courses ON Scores.CourseId = Courses.Id
INNER JOIN Students ON Scores.StudentId = Students.Id
)
AS T1
WHERE RANK <= 1 --(16) 查询不同老师所教不同课程平均分从高到低显示。
SELECT * FROM
(
SELECT Teachers.Name AS 老师姓名,Courses.Name AS 课程名称,AVG(Scores.Score) AS 平均分 FROM Teachers
INNER JOIN Courses ON Teachers.Id = Courses.TeacherId
INNER JOIN Scores ON Scores.CourseId = Courses.Id
GROUP BY Courses.Name,Teachers.Name
)
AS T1
ORDER BY T1.平均分 --(19) 查询出只选修了一门课程的全部学生的学号和姓名。
SELECT Students.Id AS 学生编号,Students.Name AS 姓名 FROM Students WHERE Id IN
(
SELECT StudentId FROM Scores
GROUP BY StudentId
HAVING COUNT(StudentId) = 1
)

SQLSERVER教师学生成绩课程四表联合各种SQL考题的更多相关文章

  1. 学生成绩管理系统(SSM+MySQL+JSP)

    开发工具:Eclipse前端技术:基础:html+css+JavaScript框架:JQuery+H-ui后端技术:Spring+SpringMVC+mybatis模板引擎:JSP数据库:mysql ...

  2. [LINQ2Dapper]最完整Dapper To Linq框架(六)---多表联合与匿名类型返回

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  3. 学生表sid,sname,结果表cid,cname,学生成绩表sid,cid,cscore,最高要求的分数输出候补课程专门命名

    --1.建表SQL: --学生表: -- Createtable createtable STUDENT ( SID   NUMBERnotnull, SNAME NVARCHAR2) ) table ...

  4. Oracle数据库作业-6 查询“张旭“教师任课的学生成绩。

    23.查询"张旭"教师任课的学生成绩. select * from score s where cno in ( select cno from course where tno ...

  5. Java课程设计—学生成绩管理系统(201521123005 杨雪莹)

    一.团队课程设计博客链接 学生成绩管理系统 二.个人负责模块或任务说明 学生成绩录入 显示所有学生信息 显示各科平均成绩 显示学生成绩(按降序排序) 三.自己的代码提交记录截图 四.自己负责模块或任务 ...

  6. Java课程设计—学生成绩管理系统(201521123004-林艺如)

    1.团队课程设计博客 团队课程设计博客链接 2.个人负责模块或任务说明 ①.Menu Menu.jsp 在页面中给出提示,用HTML的 MenuTeacher.jsp 利用Menu.jsp进行具体化完 ...

  7. Java课程设计报告——学生成绩管理系统

    一.需求分析 1.数据存储在数据库和文件中 2.分为"教师"模块和"学生"模块. 3.学生模块提供登陆功能,登陆成功后可查询数学.Java.体育成绩 (学生学号 ...

  8. Java课程设计--学生成绩管理系统

    一.团队名称: 团队成员 林艺薇 201721123032 网络1712 黄毓颖 201721123033 网络1712 唐川 201721123034 网络1712 梁才玉 201721123038 ...

  9. mysql经典面试题之学生成绩表

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

随机推荐

  1. unity 实现技能释放

    要实现技能释放其实很简单,说白了就是在指定的位置Instantiate一个对应的例子特效.我走的弯路主要在寻找这个指定位置上. 对于指向性技能就不多说了,因为是有确切目标的(当然首先判断下技能能不能对 ...

  2. selenium获取元素

    1.获取窗口titledriver.title2.获取urldriver.current_url3.获取窗口截图driver.get_screenshot_as_file('window.png')4 ...

  3. MySQL Charset--UTF8和UTF8MB4对比测试

    UTF8和UTF8MB4 在早期MySQL版本中,使用只支持最长三字节的UTF8字符集便可以存放所有Unicode字符.随着Unicode的完善,Unicode字符集收录的字符数量越来越多,最新版本的 ...

  4. echarts 饼状图调节 label和labelLine的位置

    原理 使用一个默认颜色为透明的,并且只显示labelLine的饼状图 然后通过调节这个透明的饼状图 以达到修改labelLine的位置 echarts地址 https://gallery.echart ...

  5. 05-jQuery介绍

    本篇主要介绍jQuery的加载.jquery选择器.jquery的样式操作.jQuery的事件.jquery动画等相关知识. 一.jQuery介绍 jQuery是目前使用最广泛的javascript函 ...

  6. Linux操作系统的进程管理和作业管理

    Linux操作系统的进程管理和信号 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lsof命令详解 1>.lsof概述 list open files查看当前系统文件的工 ...

  7. video基础介绍&封装react-video基础组件,ES6

    好几个月没有写博客了,人都赖了,今天抽了一点时间把最近项目react中video整理了一下(感觉这个以后用的活比较多) 1.前三部部分详细归纳了video的基础知识,属性和功能: 2.第四部分是封装了 ...

  8. Kotlin反射重要组件与流程详解

    继续学习Kotlin反射,我们知道对于Java的反射类是Class,而在Kotlin中的反射类是KClass,而在Java当中对于反射中的方法是用Method,而在Kotlin中是用KFunction ...

  9. shortcuts for contructor 创建对象捷径

  10. Failed to configure a DataSource: 'url' attribute is not specified and no embe...

    问题分析及解决方案 问题原因: Mybatis没有找到合适的加载类,其实是大部分spring - datasource - url没有加载成功,分析原因如下所示. DataSourceAutoConf ...