对学生数据库进行查询等操作
学生数据库中有3张数据表,关系模型如下:
1、学生信息
字段名 | 数据类型 | 备注 |
---|---|---|
学号 | char(10) | primary key |
姓名 | nvarchar(10) | |
性别 | nchar(2) | |
出生日期 | date | |
专业 | nvarchar(10) |
2、课程信息
字段名 | 数据类型 | 备注 |
---|---|---|
课程序号 | char(10) | primary key |
课程名称 | nvarchar(20) | |
开课学期 | char(1) | |
学分 | smallint |
3、成绩信息
字段名 | 数据类型 | 备注 |
---|---|---|
学号 | char(10) | primary key, foreign key |
课程序号 | char(10) | primary key, foreign key |
成绩 | tinyint |
查询“计算机科学与技术”专业的学生人数,显示字段名为学生人数
select count(*) 学生人数 from 学生信息
where 专业 = "计算机科学与技术"
group by 专业
查询与“刘晨”在同一个专业学习的学生,显示学号、姓名。
注意:结果中不包括刘晨
select 学号,姓名 from 学生信息
where 专业 in (select 专业 from 学生信息 where 姓名 = "刘晨") and 姓名!="刘晨"
查询选修了课程名为“操作系统”的学生,显示学号,姓名
select a.学号,a.姓名 from 学生信息 a
inner join 成绩信息 b on a.学号 = b.学号
inner join 课程信息 c on b.课程序号 = c.课程序号
where c.课程名称 = "操作系统"
建立一个计算机科学与技术专业,且年龄不大于19岁的学生的视图,字段包括学生学号,姓名,出生日期,视图名字为 学生年龄视图
提示1 :如何利用出生日期结合系统函数计算年龄
DATEDIFF(datepart,startdate,enddate)
返回两个指定日期的日期和时间边界数(差值),datepart 规定了用日期的哪一部分(year、month、day、week、hour等)来计算差额。
提示2 :获得当前时间GETDATE()
create view 学生年龄视图 as
select 学号,姓名,出生日期 from 学生信息
where DATEDIFF(yy,出生日期,GETDATE())<=19 and 专业 = "计算机科学与技术"
通过刚建立的 学生年龄视图,查询计算机科学与技术专业年龄不大于19岁的学生学号,姓名
select 学号,姓名 from 学生年龄视图
建立一个既选修了课程1又选修了课程2的学生视图,名为 学生课程视图 ,包含字段学号、姓名、专业
create view 学生课程视图 as
select a.学号,a.姓名,a.专业 from 学生信息 a
inner join 成绩信息 b on a.学号 = b.学号
where b.课程序号 = "1"
union
select a.学号,a.姓名,a.专业 from 学生信息 a
inner join 成绩信息 b on a.学号 = b.学号
where b.课程序号 = "2"
通过刚建立的学生课程视图,查询学生学号,姓名
select 学号,姓名 from 学生课程视图