时间:2021-07-01 10:21:17 帮助过:10人阅读
drop table student cascade
118 119 120 121 -- ********************************索引******************************** 122 123 --建立索引 124 create unique index Stusno ON student(Sno); 125 --删除索引 126 drop index Stusno on student --//按照书上的不行 drop index <索引名> 127 128 --建立索引(按照多个属性)按照Sno升序,Cno降序 129 create unique index SCno on SC(Sno ASC,Cno DESC); 130 --删除索引 131 drop index SCno on SC; 132 133 134 135 136 137 -- ****************************查询************************* 138 --单表查询: 139 140 --查询学生学号,姓名 141 select Sno,Sname 142 from student; 143 144 --查询全体学生详细记录 145 select * 146 from student; 147 148 --(查询经过计算的值):查询出生年份 149 select Sname,2016-Sage 150 from student; 151 152 --(可以指定别名) --//lower可将相应的英文字符串转换成小写,记住select后跟的永远是显示的,别名写在后面是标题 153 select Sname NAME,‘Year Of Birth‘Birth,2016-Sage BIRTHDAY,LOWER(Sdept)DEPARTMENT 154 from student; 155 156 --(取消重复) --//在查询的属性前加distinct可取消重复属性 157 select distinct Sno 158 from SC; 159 160 161 162 163 164 --查询满足条件元组: 165 166 --查询计算机学生名单 167 select * 168 from student 169 where Sdept = ‘计算机系‘; 170 171 --查询20岁以下学生信息 (< > = >= <= != !> !< 不大小于 !>) 172 select * 173 from student 174 where Sage < 20; 175 176 177 --查询年龄在20~23岁之间的学生 (between....and....) 178 select * 179 from student 180 where Sage between 20 and 23; 181 182 --查询年龄不在20~23岁之间的学生(not between... and....) 183 select * 184 from student 185 where Sage not between 20 and 23; 186 187 --查询计算机系和数学系的学生 (在确定集合之中,in的用法) 188 select * 189 from student 190 where Sdept in (‘计算机系‘,‘数学系‘); 191 192 --查询学号为9512101学生详细情况 193 select * 194 from student 195 where Sno like ‘9512101‘; 196 197 --查询张姓学生情况 (通配符%, 代表任意长度(可以=0)的字符串,a%b表示以a开头b结尾任意长度字符串acb,addgb 198 select * 199 from student 200 where Sname like ‘张%‘; 201 202 --查询姓”钱小“且全名为3个汉字的学生情况(下划线代表任意单个字符,字符集GBK一个_代表一个汉字,字符集ASCII两个__代表一个汉字) //也可以代表空字符吗? 203 select * 204 from student 205 where Sname like ‘钱小_‘; 206 207 --查询第二个字为“小”的学生 (如果查询的对象中有% _等通配符使用逃逸字符,where Sname like ‘张\_‘escape ‘\‘;这里的_不再当成通配符 208 select * 209 from student 210 where Sname like ‘__小%‘; 211 212 --查询不姓钱学生 213 select * 214 from student 215 where Sname not like ‘钱%‘; 216 217 --查询没有成绩学生学号 (涉及空值查询) 218 select Sno 219 from SC 220 where Grade is NULL; 221 222 --查询有成绩学生学号 223 select Sno 224 from SC 225 where Grade is not null; 226 227 --查询计算机系且男的学生 (多重条件查询,用and 或 or来连接条件 228 select * 229 from student 230 where Sdept = ‘计算机系‘ and Ssex = ‘男‘; 231 232 --查询选修1号课程的学号和成绩,按分数降序 (order by 子句,使用order by子句对查询结果一个多个属性升序ASC降序DESC排列缺省为升 233 select Sno,Grade 234 from SC 235 where Cno = ‘C01‘ 236 order by Grade desc; 237 238 --查询选修一号课程学号和成绩,按成绩降序,按学号升序 239 select Sno,Grade 240 from SC 241 where Cno = ‘C01‘ 242 order by Grade desc,Sno; 243 244 --查询学生总人数(聚集函数 count sum avg max min) 245 select COUNT(*) 246 from student; 247 248 --查询选修了课程的学生人数(给聚集函数指定distinct短语,表示取消指定列重复值) 249 select COUNT(distinct Sno) 250 from SC; 251 252 --计算1号课程学生平均成绩 253 select AVG(Grade) AverageScore 254 from SC 255 where Cno = ‘C01‘; 256 257 --查询每个课程号对应选课人数(group by 语句 加上group by语句将会对分组中的项进行统计,而不是对所有表中对象 258 select Cno,COUNT(Sno) 259 from SC 260 group by Cno; 261 262 --查询选修了3门课程以上学生学号 (having 短句与where区别在于作用对象不同,where作用于基本表或试图,having作用于groupby中的组,从组中选择满足条件的组 263 select Sno 264 from SC 265 group by Sno 266 having COUNT(*)>3; 267 268 269 --*********连接查询********** 270 --查询学生的信息和他的选课情况 271 select student.*,SC.* 272 from student,SC 273 where student.Sno = SC.Sno; 274 275 --对上例用自然连接 (去掉了连接表中的相同属性) 276 select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade 277 from student,SC 278 where student.Sno = SC.Sno; 279 280 --使用自身连接(表可以连接自己,使用first,second区分) 281 --select first.cno,second.cpno 282 --from course first,course second 283 --where first.cpno = second.Cno; 284 285 --列出全部学生基本情况和选课情况,NULL也要列出(此处即为外连接,此处以student主体,若选课没选该生信息也列出) 286 select student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade 287 from student left OUTer JOIN SC on (student.Sno = SC.Sno); 288 289 290 --查询选修二号课程且成绩在90分以上学生 (复合条件连接) 291 select student.Sno,Sname 292 from student,SC 293 where student.Sno = SC.Sno and 294 SC.Cno = ‘C02‘and 295 SC.Grade > 90; 296 297 --查询与李勇在同一个系的学生(嵌套查询) 298 select * 299 from student 300 where student.Sdept in 301 (select Sdept 302 from student 303 where student.Sname = ‘李勇‘); 304 305 --查询选修了数据结构的学生信息 (三重嵌套) 306 select * 307 from student 308 where student.Sno in 309 (select Sno 310 from SC 311 where SC.Cno in 312 (select Cno 313 from course 314 where course.Cname = ‘数据结构‘) 315 ); 316 317 --查询每个学生超过他选修课程平均成绩的课程号 (相关子查询,因为要查课程号和学生,所以select sno,cno 从SC表中,呢么什么情况下的课程呢 318 --分数大于他的平局分,他的平均分是什么?再次求他的平均分,select avg(grade) from sc;是谁的平均分是外层循中的所以用X,Y来代表) 319 select Sno,Cno 320 from SC x 321 where Grade > ( 322 select AVG(grade) 323 from SC y 324 where x.Sno = y.Sno); 325 326 --带有any all谓词的查询,any表示某一个,all表示所有 327 --查询其他系中比计算机系中某一学生年龄小的学生姓名年龄 328 select Sname,Sage 329 from student 330 where Sage < any (select Sage 331 from student 332 where Sdept = ‘计算机系‘); 333 334 --带有exits的子查询 335 --查询所有选修了1号课程的学生姓名 (因为子查询返回BOOL值,所以子查询通常用*, 336 select Sname 337 from student 338 where exists (select * 339 from SC 340 where Sno = student.Sno and Cno= ‘C01‘); 341 342 343 --查询选修了全部课程的学生姓名 (不存在这样的课程该学生没有选修) ****************难点,运用到离散数学知识(找时间复习,) 344 select Sname 345 from student 346 where not exists( 347 select * 348 from course 349 where not exists ( 350 select * from SC 351 where Sno = student.Sno 352 and Cno = course.Cno) 353 ); 354 --查询至少选修了学生选修的全部课程的学生号码(不存在这样的课程Y,学生200215122选修了Y,而学生X没有选 *********难点 355 select distinct Sno 356 from SC SCX 357 where not exists 358 (select * 359 from SC SCY 360 where SCY.Sno = ‘200215122‘ and 361 not exists 362 (select * 363 from SC SCZ 364 where SCZ.Sno = SCX.Sno AND 365 SCZ.Cno = SCY.Cno)