本文共 3853 字,大约阅读时间需要 12 分钟。
针对学生课程选课数据库进行以下操作
create table t_student(
Sno CHAR(7) primary key,
Sname CHAR(10) ,
Ssex CHAR(2),
Sage int DEFAULT 20,
Sdept CHAR(20)
);
insert into t_student(Sno,Sname,Ssex,Sage,Sdept)
values(“0804601”,”lily”,”m”,12,”jk”),
(“0804602”,”mary”,”f”,17,”jk19”),
(“0804603”,”bob”,”m”,18,”jk18”),
(“0804604”,”hani”,”m”,10,”jk”),
(“0804605”,”job”,”m”,13,”jk”);
create table t_course(
Cno Char(10) PRIMARY KEY,
Cname Char(20) NOT NULL,
Ccredit int CHECK(Ccredit>0),
Semester int CHECK(Semester>0),
Period int CHECK(Period>0),
);
mysql不支持check,
insert into t_course(Cno,Cname,Ccredit,Semester,Period)
values(“TX4601”,”sjk”,3,1,2),
(“TX4602”,”java”,4,2,2),
(“TX4603”,”jw”,3,1,2),
(“TX04604”,”web”,2,1,2),
(“TX04605”,”mks”,2,1,2);
create table t_SC(
Sno CHAR(7) NOT NULL,
Cno CHAR(10) NOT NULL,
Grade int,
PRIMARY KEY (Sno,Cno),
FOREIGN KEY(Sno) REFERENCES t_student(Sno),
FOREIGN KEY(Cno) REFERENCES t_course(Cno)
);
insert into t_SC(Sno,Cno,Grade) values(“0804601”,”TX4601”,99),
(“0804602”,”TX4602”,98),
(“0804603”,”TX4603”,97),
(“0804604”,”TX4604”,96),
(“0804605”,”TX4605”,95);
1、以Cno升序、Grade降序查询Sc表的所有记录。
select * from t_SC order by Cno asc,Grade desc;
2、查询所有学生的Sname、Cname和Grade列。(连接查询,嵌套查询)
select Sname,Cname,Grade from t_student s,t_course c,t_sc sc where s.Sno=sc.Sno and sc.Cno=c.Cno;
3、查询所有选修“计算机导论”课程的同学的成绩。(连接查询,嵌套查询)
此处查询的课程名为jw
select sname,grade from t_sc sc,t_student s,t_course c where c.Cname=“jw” and sc.cno=c.cno and s.Sno=sc.Sno;
4、查询和“李军”同性别的同学Sname. (自身连接查询,嵌套查询)
此处查询的同学姓名为lily
select Sname from t_student s where s.ssex=(select ssex from t_student where sname=“lily”) ;
5、查询所有同学的基本情况和选课情况,包括未选课的同学。(外连接查询)
select s.Sno,Sname,Ssex,Sage,Sdept,Grade,c.Cno,Cname,Ccredit,Semester,Period
from t_student s
right join t_sc sc
on s.sno=sc.sno
right join t_course c
on sc.cno=c.cno;
6、查询选修c05号课程且成绩高于80分的同学的名字。(连接查询,嵌套查询,集合查询)
select sname from t_student s join t_sc sc on s.sno=sc.sno join t_course c on sc.cno=c.cno and c.cno = “TX4601”where grade>80 ;
7、查询和学号为0608002的同学同年出生的所有学生的Sno、Sname列。(自身连接查询,嵌套查询)
select distinct a.sno,a.sname from t_student a join t_student b on a.sage=(select sage from t_student where Sno=“0804601”);
8、查询王位同学所有的成绩。(连接查询,嵌套查询)
select sname,grade from t_student s join t_sc sc on s.sno=sc.sno join t_course c on sc.cno=c.cno where s.sname=“lily” ;
9、查询非计算机系的不超过计算机系所有学生的年龄的学生姓名。(用ANY,ALL)
由于数据过少,出现空值。
select sname from t_student a where a.sage<any(select sage from t_student where sdept = “jk”) and a.sdept!=“jk”;
10、查询存在有85分以上成绩的课程Cno.(用exists)
select distinct sc.Cno from t_sc sc join t_course c on exists(select grade from t_sc) where sc.grade>85;
11、查询计算机系同学的人数。
select count(sno) from t_student where sdept=“jk”;
为方便做题,在此插入几条数据。
insert into t_sc(Sno,Cno,Grade) values
(“0804601”,”TX4602”,55),
(“0804601”,“TX4603”,66), (“0804603”,”TX4602”,77);12、查询数学系统学所选课程的平均分。(java)
select avg(grade) from t_sc sc join t_course c on sc.cno= c.cno where c.cname=“java”;
13、查询Student表中年龄最大和最小的同学的具体情况。
select * from t_student where sage>=all(select sage from t_student) or sage<=all(select sage from t_student);
14、查询最高分同学的Sno、Cno列
select Sno,Cno from t_sc where grade>=all(select grade from t_sc);
15、查询c08号课程的平均分。
select avg(grade) from t_sc sc where sc.cno=“TX4602”;
16、查询选修了c08号课程且成绩比该课程平均成绩低的同学的学号和成绩。
select sno,grade from t_sc sc where(select avg(grade) from t_sc sc where sc.cno=“TX4602”)>grade and sc.cno=“TX4602”;
17、查询选修了c06号课程或1号课程的同学的学号。(复合条件查询,集合查询)
select sno from t_sc sc where sc.cno=“TX4602” or sc.cno=“TX.4603”;
18、查询各个课程号及相应的选课人数。
select cno,count(*) from t_sc group by cno ;
19、查询选修了3门以上课程且总分大于200分的同学的学号。
select sno from t_sc where sno=(select sno,count() from t_sc group by sno having count()>2) group by sno having sum(grade)>200;
20、查询比自己的平均分高的课程的课程号。
select cno from t_sc where (select avg(grade) from t_sc sc where sno=“0804601”)<grade and sno=“0804601”;
转载地址:http://enmz.baihongyu.com/