
学生表:学生ID(主键) 学生姓名 性别 。。。。
课程表:课程ID(主键) 课程名称 。。。
选课表:学生ID(外键关联学生表的学生ID)选课ID(关联课程表课程ID)。。。
1、SELECT
课程号,
课程名,
课程学分
FROM
课程
WHERE
课程号
IN(SELECT
课程号
FROM
选课
GROUP
BY
课程号
HAVING
COUNT(学生号)
BETWEEN
2
AND
4
)
2、SELECT
MAX(成绩)
-
MIN(成绩)
AS
分数之差
FROM
选课
倘若要每门课程相差
SELECT
课程,
MAX(成绩)
-
MIN(成绩)
AS
分数之差
FROM
选课
GROUP
BY
课程
1,从学生SELECT DISTINCT Sdept;
2,SELECT COUNT(DISTINCT Cpno)
课程
WHERE CNAME ='英语';
3,CREATE TABLE Student2
(SNO CHAR(9)PRIMARY KEY,
SNAME CHAR(20)UNIQUE,
Ssex CHAR(2),
Sbirthday SMALLINT,
Sdept CHAR(20)
);
用LINQ(语言集成查询)完成你说的这些任务很方便,具体的细节问题还得你自己做。下面举出两个例子供你参考,这两个例子用数组代替数据库,对数据库也可用同样的方法。
例1,用bool值作关键字区分两组的结果,注意group子句中的表达式产生的结果。
public class Student
{
public string Name { get; set; }
public int ID { get; set; }
public List<int> Scores;
}
public static List<Student> GetStudents()
{
//实例化数据源,注意各成员内部成绩序列的初始化
List<Student> students = new List<Student>
{
new Student {Name="张勇", ID=1, Scores= new List<int> {97, 72, 81, 60}},
new Student {Name="王磊", ID=2 Scores= new List<int> {75, 84, 91, 39}},
new Student {Name="孙敏", ID=3, Scores= new List<int> {88, 94, 65, 85}},
new Student {Name="刘晓", ID=4, Scores= new List<int> {97, 89, 85, 82}},
new Student {Name="扬帆", ID=5, Scores= new List<int> {35, 72, 91, 70}}
};
return students;
}
static void Main()
{
List<Student> students = GetStudents();
//用true或false分组,查询变量是IEnumerable<IGrouping<bool, Student>>类型
var booleanGroupQuery = from student in students
group student by studentScoresAverage() >= 80;
foreach (var studentGroup in booleanGroupQuery)
{
ConsoleWriteLine(studentGroupKey == true "平均分高于80" : "平均分低于80");
foreach (var student in studentGroup)
ConsoleWriteLine("{0,4} {1} {2}", studentID, studentName, studentScoresAverage());
}
}
输出:
平均分低于80
1 张勇 775
2 王磊 7225
5 扬帆 67
平均分高于80
3 孙敏 83
4 刘晓 8825
例2,查询人名先排序再分组,可以用姓作为分组关键字。
string[] Name = {"张明","刘新","王宏","刘洋","张媛","张宝","王金贵","刘东","王凯","刘芳"};
var sortedGroups = from name in Name
orderby name
group name by name[0] into newGroup
select newGroup;
foreach (var nameGroup in sortedGroups)
{
ConsoleWriteLine(nameGroupKey);
foreach (var name in nameGroup)
ConsoleWriteLine(" "+name);
}
输出:
刘
刘东 刘芳 刘新 刘洋
王
王宏 王金贵 王凯
张
张宝 张明 张媛
输出结果按姓分类,组内排序。
《C#编程指南》(清华大学出版社2011年1月出版,可网购)第5章和第17章专门讨论LINQ查询更新数据库。
假设这3个表的结构如下:
学生表(学号,姓名,年龄,出生日期)
选课表(学号,课程号,课程名称)
成绩表(学号,课程号,成绩)
以上述表结构为前提,T-SQL语句如下:
delete 成绩表 where 学号 in (select 学号 from 学生表 where 年龄>18)
delete 选课表 where 学号 in (select 学号 from 学生表 where 年龄>18)
如果学生表中没有‘年龄’字段,只有‘出生日期’字段的话,T-SQL语句如下:
delete 成绩表 where 学号 in (select 学号 from 学生表 where datediff(yy,出生日期,getdate())>18)
delete 选课表 where 学号 in (select 学号 from 学生表 where datediff(yy,出生日期,getdate())>18)
select aSno as 学号,Sname as 姓名,avg(Score) as 平均分
from 学生表 a inner join 选课表 b on aSno=bSno
inner join 课程表 c on bCno=cCno
group by aSno,Sname
having avg(Score) > 70 and count(cCno) > 2
order by 平均分
您好,您这样:
--1
select Sname,Sage from Student where Sage<(select Sage from Student where Sno='某一学生') and Sdept='数学系'
--2
select Sname from Student where Sno in (select Sno from SC)
--3
select Sname from Student where Sno in (select Sno from SC group by Sno having count()=(select count() from Course ))
以上就是关于数据库中建立学生表课程表选课表及其联系全部的内容,包括:数据库中建立学生表课程表选课表及其联系、数据库中包含学生表、课程表、学生选课表3个表,分别是什么、SQL创建学生表(Student)、课程表(Course)、班级表(Class)、选课表(XK),写对的我可以奖励QB等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)