任务要求如下:
给出xxgl数据库以及学生表、课程表和选课表。进行以下查询:
Student(sno char(12),sname char(10),ssex char(2),sage tinyint ,sdept nchar(20))
Course(cno char(3),cname nchar(20),credit tinyint)
Sc(sno char(12),cno char(3),grade tinyint)
(1)查询学生的学号、姓名、课程名和成绩。
(2)查询选修C1号课程且成绩在60分以上的所有学生的学号和姓名。
(3)查询选修了课程名为“计算机网络”的学生的学号和姓名。
(4)查询与“计算机网络”学分相同的课程的课程名和学分,用自身连接查询完成。
(5)查询与“程晓晴”年龄相同的学生的信息,用自身连接查询完成。
(6)查询与“程晓晴”在同一个系学习的学生的学号、姓名和系别。要求分别用自身连接查询和嵌套查询完成。
(7)查询选课成绩大于60分以上的学生的学号和姓名。
(8)查询成绩至少比学号为S3的学生选修的某一门课成绩要高的学生的学号、课程号和成绩。
(9)查询成绩比学号为S3的学生选修的任一门课成绩都要高的学生的学号、课程号和成绩。
(10)找出超过所有学生选修课程平均成绩的学号、课程号和成绩。
student表
sno |
sname |
ssex |
sage |
snat |
sdept |
S1 |
赵无言 |
男 |
18 |
汉族 |
计算机系 |
S2 |
蒋洪 |
男 |
19 |
回族 |
通信系 |
S3 |
汪艳 |
女 |
18 |
汉族 |
自动化 |
S4 |
张拟 |
女 |
18 |
汉族 |
通信系 |
S5 |
孙瑶 |
男 |
19 |
汉族 |
电子系 |
S6 |
张军军 |
男 |
20 |
回族 |
计算机系 |
course表
cno |
cname |
credit |
001 |
C语言程序设计 |
2 |
002 |
高数 |
3 |
003 |
大学英语 |
2 |
004 |
计算机网络 |
3 |
005 |
数据库原理 |
2 |
sc表
sno |
cno |
grade |
S1 |
001 |
80 |
S1 |
003 |
75 |
S2 |
002 |
54 |
S2 |
003 |
90 |
S3 |
002 |
70 |
S3 |
003 |
30 |
主要代码如下:
create database JXGL1
on
(name=JXGL,
filename='D:\sql\JXGL1.mdf',//选择自己的文件保存位置
size=10MB,
maxsize=30MB,
filegrowth=5MB)
log on
(name=xxgl_log,
filename='D:\sql\JXGL1_log.ldf',
size=4MB,
maxsize=10MB,
filegrowth=2MB)
use JXGL1
go
create table S(sno char(12)primary key,
sname char(10),
sex char(2),
age tinyint,
sdept nchar(20)
)
create table C
(cno char(3)primary key,
cname nchar(20),
Tname varchar(20),
credit tinyint
)
create table SC
(sno char(12)references S(sno),
cno char(3)references C(cno),
grade float,
primary key(sno,cno),
)
insert into S values
('S1','程晓晴','女',21,'CS'),
('S2','吴玉江','男',20,'CS'),
('S3','姜云','女',18,'CS'),
('S4','张峰','男',19,'CS'),
('S5','张丽丽','女',21,'MA'),
('S6','李文','女',25,'MA'),
('S7','李文远','女',19,'MA'),
('S8','张峰名','男',20,'IS'),
('S9','王大力','男',21,'IS'),
('S10','张姗姗','女',22,'IS')
insert into c values
('C1','C语言程序设计','殷老师',4),
('C2','计算机网络','王老师',4),
('C3','数据结构','詹老师',4),
('C4','数据库系统','詹老师',3),
('C5','Jave Web','支老师',3)
insert into SC values
('S1','C1',96),
('S1','C2',55),
('S1','C3',84),
('S1','C5',52),
('S2','C1',84),
('S2','C2',90),
('S2','C4',85),
('S3','C5',73),
('S3','C4',Null),
('S4','C1',50)
use JXGL1
select s.sno,s.sname,c.cname,SC.grade
from S join Sc
on s.sno=SC.sno
join C on c.cno=SC.cno
select s.sno,s.sname
from s join (SC join C on SC.cno=c.cno)
on s.sno=SC.sno and grade>60 and c.cno=sc.cno and sc.cno='c1'
select s.sno,s.sname
from S
where sno in
(select sno
from sc
where cno='c2')
select cname,credit
from C
where cno in
(select cno
from SC
where credit=4)
select *
from S
where age in
(select age
from S
where age=21)
--自身连接--
select b.sno,b.sname,b.sdept
from S as a join s as b
on a.sdept=b.sdept and a.sname='程晓晴'
--嵌套连接--
select sno,sname,sdept
from S
where sdept in
(select sdept
from s
where sname='程晓晴')
select s.sno,s.sname
from s join (SC join C on SC.cno=c.cno)
on s.sno=SC.sno and grade>60
select s.sno,c.cno,grade
from s join (SC join C on SC.cno=c.cno)
on s.sno=SC.sno
where grade > any
(select grade
from sc
where sno>'s3')
select s.sno,c.cno,grade
from s join (SC join C on SC.cno=c.cno)
on s.sno=SC.sno
where grade > any
(select grade
from sc
where sno='s3')
select sno,cno,grade
from SC as a
where grade>=
(select avg(grade)
from SC as b
where a.sno=b.sno)