数据库--高级查询

任务要求如下:

给出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)

你可能感兴趣的:(数据库,数据库,mysql)