数据库SQL语句的练习
练习数据库操作
1 1.查询学生选课表中的全部数据1 2 select * from SC 3 2.查询计算机系的学生的姓名、年龄。 4 select Sname, Sage from Student 5 where Sdept = '计算机系' 6 3.查询成绩在70~80分之间的学生的学号、课程号和成绩。 7 select Sno, Cno, Grade from SC 8 where 70<= Grade and Grade<= 80 9 4.查询计算机系年龄在18~20之间且性别为“男”的学生的姓名、年龄。 10 select Sname, Sage, Ssex from Student 11 where Sdept = '计算机系' and Sage between 18 and 20 and Ssex = '男' 12 5.查询课程号为“c001”的课程的最高的分数 13 select top 1 Grade from SC 14 where Cno = 'c001' 15 6.查询计算机系学生的最大年龄和最小年龄。 16 select max(Sage) 最大年龄, min(Sage) 最小年龄 from Student 17 where Sdept = '计算机系' 18 7.统计每个系的学生人数。 19 select Sdept, count(Sno) 学生人数 from Student 20 group by Sdept 21 8.统计每门课程的选课人数和考试最高分。 22 select Cno,count(Sno) 选课人数, max(Grade) 考试最高分 from SC 23 group by Cno 24 9.统计每个学生的选课门数和考试总成绩,并按选课门数升序显示结果。 25 select Sno, count(*) 选课门数, sum(Grade) 考试总成绩 from SC 26 group by Sno 27 order by count(*) 28 10.查询总成绩超过200分的学生,要求列出学号、总成绩。 29 select Sno, sum(Grade) 总成绩 from SC 30 group by Sno 31 having sum(Grade)> 200 32 11.查询选修了“c002”号课程的学生的姓名和所在系。 33 select Sname, Sdept from Student 34 join SC on Student.Sno = SC.Sno 35 where Cno = 'c002' 36 12.查询成绩80分以上的学生的姓名、课程号和成绩,并按成绩降序排列结果。 37 select Sname, Cno, Grade from SC 38 join Student S on S.Sno = SC.Sno 39 where Grade>= 80 40 order by Grade desc 41 13.查询哪些学生没有选课,要求列出学号、姓名和所在系。 42 select S.Sno, Sname, Sdept from Student S 43 left join SC on S.Sno = SC.Sno 44 where SC.Sno is NULL 45 14.查询与Java在同一学期开设的课程的课程名和开课学期。 46 select distinct C1.Cname, C1.Semester from Course C1 47 join Course C2 on C1.Semester = C2.Semester 48 where C2.Semester = 3 49 15.查询与李勇年龄相同的学生的姓名、所在系和年龄。 50 子查询 51 select Sname, Sdept, Sage from Student 52 where Sage in( 53 select Sage from Student 54 where Sname = '李勇') 55 and Sname != '李勇' 56 自连接 57 select S1.Sname, S1.Sdept, S1.Sage from Student S1 58 join Student S2 on S1.Sage = S2.Sage 59 where S2.Sname = '李勇' and S1.Sname != '李勇' 60 16.用子查询实现如下查询: 61 (1)查询选修了“c001”号课程的学生的姓名和所在系。 62 select Sname, Sdept from Student 63 where Sno in( 64 select Sno from SC 65 where Cno = 'c001') 66 (2)查询数学系成绩80分以上的学生的学号、姓名、课程号和成绩。 67 select S.Sno, Sname, Cno, Grade from Student S 68 join SC on S.Sno = SC.Sno 69 where S.Sno in( 70 select Sno from Student 71 where Sdept = '数学系'and Grade>= 80) 72 (3)查询计算机系考试成绩最高的学生的姓名。 73 select Sname from Student S 74 join SC on S.Sno = SC.Sno 75 where Sdept = '计算机系' 76 and Grade in( 77 select max(Grade) from SC 78 where Sdept = '计算机系') 79 80 (4)查询数据结构考试成绩最高的学生的姓名、所在系、性别和成绩。 81 select Sname, Sdept, Ssex, Grade from Student S 82 join SC on S.Sno = SC.Sno 83 join Course C on SC.Cno = C.Cno 84 where C.Cname = '数据结构' 85 and Grade in( 86 select max(Grade) from SC 87 where Cname = '数据结构') 88 17.查询没有选修Java课程的学生的姓名和所在系。 89 select Sname, Sdept from Student 90 where Sno not in( 91 select Sno from SC 92 join Course on SC.Cno = Course.Cno 93 where Cname = 'Java') 94 18.查询计算机系没有选课的学生的姓名和性别。 95 select Sname, Ssex from Student S 96 left join SC on S.Sno = SC.Sno 97 where Sdept = '计算机系' and SC.Cno is NULL 98 19.创建一个新表,表名为test_1,其结构为(COL1,COL2,COL3),其中: 99 COL1:整型,允许空值。 100 COL2:字符型,长度为10,不允许空值。 101 COL3:字符型,长度为10,允许空值。 102 试写出按行插入如下数据的语句(空白处表示空值)。 103 Create table test_1( 104 COL1 int, 105 COL2 char(10) not null, 106 COL3 char(10), 107 ) 108 109 insert into test_1(COL2) values('B1') 110 insert into test_1 values(1, 'B2', 'C2') 111 insert into test_1 values(2, 'B3', NULL) 112 20.删除考试成绩低于50分的学生的选课记录。 113 delete from SC 114 where Grade< 50 115 还原数据 116 insert into SC values(1531101, 'c007', 45) 117 21.删除没有人选的课程记录。 118 delete from Course 119 where Cno not in(select Cno from SC) 120 还原数据 121 insert into Course values('c004','大学英语',6,2) 122 insert into Course values('c010','计算机网络',5,6) 123 22.删除计算机系Java成绩不及格学生的Java选课记录。 124 delete from SC 125 where Grade< 60 and Sno in( 126 select Sno from Student 127 where Sdept = '计算机系') 128 and Cno in( 129 select Cno from Course 130 where Cname = 'Java') 131 23.将第2学期开设的所有课程的学分增加2分。 132 update Course set Credit = Credit+ 2 133 where Semester in( 134 select Semester from Course 135 where Semester = '2') 136 还原数据 137 update Course set Credit = Credit- 2 138 where Semester = '2' 139 24.将Java课程的学分改为3分。 140 update Course set Credit = 3 141 where Cname = 'Java' 142 还原数据 143 update Course set Credit = 2 144 where Cname = 'Java' 145 25.将计算机系学生的年龄增加1岁。 146 update Student set Sage = Sage+ 1 147 where Sdept = '计算机系' 148 还原数据 149 update Student set Sage = Sage- 1 150 where Sdept = '计算机系' 151 26.将信息系学生的“计算机文化学”课程的考试成绩加5分。 152 子查询 153 update SC set Grade = Grade+ 5 154 where Sno in( 155 select Sno from Student 156 where Sdept = '信息系') 157 and Cno in( 158 select Cno from Course 159 where Cname = '计算机文化学') 160 多表连接 161 update SC set Grade = Grade+ 5 162 from SC join Student S on SC.Sno = S.Sno 163 join Course C on SC.Cno = C.Cno 164 where Sdept = '信息系' and Cname = '计算机文化学' 165 还原数据 166 update SC set Grade = 82 167 where Sno = '1521102' and Cno = 'c001' 168 27.查询每个系年龄大于等于20的学生人数,并将结果保存到一个新永久表Dept_ Age中。 169 select Sdept, count(*) 学生人数 into Dept_Age from Student 170 where Sage>= 20 171 group by Sdept