学生-课程数据库练习
1 select Sno,Sname from Student where Ssex='女'and Sage>25;
2 --查询选修了“数据库”课程的学生姓名。
3 select Sname from Student where Sno in(select Sno from SC where Cno in(select Cno
4 from Course where Cname='数据库'));
5
6 select Sname from Student,Course,SC Where
7 Student.Sno=SC.Sno and Course.Cno=SC.Cno and Cname='数据库';
8
9 --统计选修2号课程的人数。
10 select count(*) from Student where Sno in(select Sno from SC where Cno='2');
11
12 --查询平均成绩大于80分的学生的学号。
13 select Sno,Sname from Student where Sno in
14 (select Sno from SC group by Sno having avg(grade)>80);
15
16 --统计每个系的学生人数。
17 select Count(*)from Student group by Sdept;
18
19 --查询选修数据库课程并且成绩不及格的学生学号和姓名
20 select Student.Sno,Student.Sname
21 from Student,SC,Course
22 where Course.Cname='数据库' and SC.Grade<60 and SC.Cno=Course.Cno and Student.Sno=SC.Sno;
23
24 --自身链接查询
25 --查询每门课程先修课的学分。
26 select first.Cno,second.Ccredit from Course first,Course second
27 where first.Cpno=second.Cno;
28
29 --查询成绩在60到80之间的所有记录。
30 select * from SC where Grade between 60 and 80;
31 --查询成绩为85,86或88的记录
32 select * from SC where Grade='85'or Grade='86' or Grade='88';
33 -- 查询所有不姓“王”的学生记录。
34 select * from Student where Sname not like '王%';
35 --以系别和年龄从大到小的顺序查询Student表中的全部记录。
36 select * from Student order by Sdept,Sage Desc;
37 --- 统计男女生分别有多少人。
38 select Ssex,count(*) from Student group by Ssex;
39 -- 查询姓名的第二个字为“小”字的女生信息。
40 select *from Student where Sname like '_小%' and Ssex='女';
41 select *from Student where Sname like '%小%';
42 -- 查询成绩最高的三个学生的学号和成绩。
43 select top(3) Sno,SUM(Grade)from SC group by Sno order by SUM(Grade) desc;
44 -- 查询学生的成绩信息,先按学号升序排序,再按成绩降序排序。
45 Select Student.Sno,Student.Sname,Grade from Student,SC
46 where Student.Sno=SC.Sno order by Sno asc, Grade desc;
47
48 --查询至少选修了两门课的学生的学号,选修课程数和选修的平均分数
49 select Sno,COUNT(*),AVG(Grade) from sc group by Sno having count(*)>=2;
50 -- 查询所有比刘晨大的学生的学号,姓名,年龄。
51 select Sno,Sname,Sage from Student where Sage>(select Sage from Student where Sname='刘晨');
52 -- 求出总分大于150的学生的学号、姓名。
53 select Sno,Sname from Student where sno in(
54 select Sno from SC group by Sno having SUM(Grade)>150);
55
56 select Student.Sno,Student.Sname from Student,SC where
57 Student.Sno=SC.Sno group by SC.Sno,Student.Sno,Student.Sname having sum(Grade)>150
58
59 --实验数据----select SUM(Grade)from SC group by Sno;
60 --列出那些专业相同的学生相应的姓名及专业信息
61 --实验数据----select * from Student group by Sdept having COUNT(*)>=2;
62 select * from Student where Sdept in
63 (select Sdept from Student group by Sdept having COUNT(*)>=2)
64
65 --求至少选修1号课和2号课的学生的学号。
66 select Sno from SC where Sno in (select Sno from SC where Cno=1) and Cno=2;
67
68 --求出所有学生的总成绩 SELECT SUM(成绩) AS 总成绩 FROM 选课
69 select SUM(Grade) as g from SC group by Sno;
70
71 ---列出非电院的所有学生
72 select * from Student where Sdept!='IS';
73 select * from Student where Sdept<>'IS';
74 select * from Student where not Sdept='IS';
75 --列出那些专业相同的学生相应的姓名及专业信息。
76 select a.Sname,b.Sname,a.Sdept
77 from Student a,Student b
78 where a.Sno<>b.Sno and a.Sdept=b.Sdept;
79
80 --、求至少选修1号课和2号课的学生的学号
81 --SELECT X.学号 FROM 选课 X,选课 Y WHERE
82 -- X.学号=Y.学号AND X.课号="1" AND Y.课号="2"
83 select a.Sno from SC a,SC b
84 where a.Sno=b.Sno and a.Cno='1' and b.Cno='2';
85 --、求选修2号课的学生中,成绩比选修1号课的
86 --最低成绩要高的学生的学号和成绩。
87 select sno,sname from Student where sno in
88 (select Sno from SC where Cno='2' and Grade>(
89 select MIN(Grade)from SC where Cno='1'));
90
91
92 --打开查询分析器用sql语句给u1授予student的查询权限。
93 grant select on Student to u1;
94 -- 把对表SC的查询授予所有用户
95 grant select on SC to public ;
96
97 --给用户u1授予对sc表的查询权限并具有给其他用户授权的权利。
98
99 grant select on SC to u1 with grant option;
100
101 ---让用户u1对用户u2授予对sc表的查询权限。
102
103 grant select on SC to u2;
104
105 --分别回收u2和u1所拥有的权限。
106 revoke all privileges to u2,u1
107 grant select on Student to r1