SQL查询语句复习题
新建学生-课程数据库的三个表:
学生表:Student(Sno,Sname,Ssex,Sage,Sdept) Sno为主码;
课程表:Course(Cno,Cname,Cpno,Credeit) Cno为主码;
学生选修表:SC(Sno,Cno,Grade) Sno,Cno,为主码;
Student
学号
Sno姓名
Sname性别
Ssex年龄
Sage所在系
Sdept
95001李勇男20CS
95002刘晨女19IS
95003王敏女18MA
95004张立男19IS
课程号
Sno课程名
Cname先行课
Cpno学分
Credit
1数据库54
2数学2
3信息系统14
4操作系统63
5数据结构74
6数据处理2
7Pascal语言64
Course:
SC:
学号
Sno课程号
Cno成绩
Grade
95001192
95001285
95001388
95002290
95002380
一:查询表中的列和行
1:查询全体学生的学与姓名
sele sno,sname from student
2:查询全体学生的姓名、学号、所在系。
sele sno,sname,sdept from student
3:查询全体学生的详细记录
sele * from student
4:查询全体学生的姓名及出生年份
sele sno,sage from student
5:查询全体学生的姓名,出生年份及所在系,要用小写字母表示系名
6:查询选修了课程的学生学号
sele sno,cno from sc
7:查询选修了课程的学生姓名
sele distinct sname from student,sc where student.sno=sc.sno
二:条件查询:
常用的查询条件
查询条件谓词
比较=,<,>,>=,<=,!=,<>,!>,!<;
not+上述比较运算符
确定范围Between and,Not between And,
确定集合IN,not IN
字符匹配Like,Not Like
空值IsNull,ISNOTNULL
多重条件AND,OR
1:查询计算机系全体学生的姓名
sele sname from student where sdept=”CS”
2:查询所有年龄在20岁以下的学生姓名及其年龄
sele sname,sage from student where sage<20
3:查询考试成绩有不及格的学生的学号
sele student.sno from student,sc where student.sno=sc.sno and grade<60
4:查询年龄在20到23间的学生的姓名,系别及年龄
sele sname,sdept,sage from student where sage between 20 and 23
5: 查询年龄不在20到23间的学生的姓名,系别及年龄
sele sname,sdept,sage from student where sage not between 20 and 23
6:查询信息系(IS),数学系(MA)和计算机系(CS)学生的姓名和性别
sele sname,ssex from student where sdept in(\"IS\
7:查询不是信息系(IS),数学系(MA)和计算机系(CS)学生的姓名和性别
sele sname,ssex from student where sdept not in(\"IS\
8:查询学号为”95001”的学生详细情况
sele * from student where sno=95001
9:查询所有姓刘的学生的姓名,学号和性别(where name like „刘%‟)
sele sname,sno,ssex from student where sname like '刘%'
10:查询姓”欧阳”且命名为三个汉字的学生的姓名
sele sname from student where sname like '欧阳_'
11:查询名字中第2个字为”阳”字的学生姓名和学号(where sname like „_ _阳%‟)
sele sname,sno from student where sname like '_ _阳%'
12:查询所有不姓刘的学生姓名
sele sname from student where sname not like '刘%'
13:查询DB_Design课程的课程号和学分(where cname like „Db_Design‟Escape‟‟)
sele cno,gredit from course where cname like „Db_Design‟Escape‟‟
14:查询以”DB_”开头,且倒数第3个字符为i的课程的详细情况(where cname like „DB_%i__‟escape‟‟)
„DB_%i__‟escape‟‟) sele cno,gredit from course where cname like „Db_%i__‟escape‟‟
15:查询缺少成绩的学生的学号和相应的课程号
sele student.sno,cno from student,sc where grade is null
16:查询所有成绩的学生学号和课程号(where grade is not null)
sele student.sno,cno from student,sc where grade is not null
17:查询计算机系年龄在20岁以下的学生姓名 sele sname from student where sdept=”CS” and sage<20 18:查询选修了3号课程的学生的学号及其成绩,分数降序排列
sele student.sno,grade from student,sc where student.sno=sc.sno and sc.cno=3 order by grade desc
19:查询全体学生情况,结果按所在系的号升序排列,同一系中的学生按年龄降序 sele * from student order by sdept,sage desc
三:使用集函数
count,sum,avg,max,min 1:查询学生的总人数
2:查询选修了课程的学生人数(select count(distinct sno)) 3:计算1号课程的学生平均成绩 4:查询选修1号课程的学生最高分数
5:求各个课程号及相应的选课人数( selsect cno,count (sno); from sc; group by cno) 6:查询选修了3门以上的课程的学生学号 select sno from sc group by sno having count(*)>3 四:连接查询:
<1>等值与非等值的连接查询
在连接查询中用来连接两个有的条件称为连接条件或连接谓词,,当连接运算符号为”=”时,称为等值连接,使用如,=,<,>,<=,>=,!=连接时称非等值连接 1:查询每个学生及其选修课程的情况 select student.*,sc.* from student,sc
where student.sno=sc.sno <2>自身连接
连接操作在同一个表中进行连接查询
2:查询每一门课的间接先修课(即先修课的先修课) select first .cno,second.cno from course first ,course second where first.cno=second.cno 五:复合条件连接
1:查询选修2号课程且成绩在90分以上的所有学生。 Select student,sname form student, sc
Where student.sno=sc.sno And Sc.cno=‟2‟ and sc.grade>90 六:嵌套查询
1:带有谓词in的子查询
<1>查询与“刘晨”在同一个系学习的学生 select sno,sname,sdept from student where sdept in( select sdept from student
where sname=”刘晨”) 或:select s1.sname,s1.sdept from student s1,student s2
where s1.dept=s2.dept and s2.name=”刘晨”
<2>查询选修了课程名为“信息系统”的学生学号和姓名 select sno,sname from student where sno in ( select sno from sc where cno in (select cno from course
where cname-“信息系统”) 或:select sno,sname from student,sc,course where student.sno=sc.sno and sc.cno=course.cno and course.cname=‟信息系统‟) 2:带有Any 或all谓词的子查询
<1>查询其他系中比信息系中某一学生年龄小的学生姓名和年龄 select sname, sage from student
where sage 或用集函数:select sname, sage from student where sage< (select max(sage) from student where sdept=‟is‟) and sdept<>‟is‟ <2> 查询其他系中比信息系所有学生年龄都小的学生姓名及年龄 select sname, sage from student where sage 3 带有Exitst谓词的子查询 <1>查询所有选修了1号课程的学生姓名 select sname from student where exists (select * from sc where sno=student.sno and cno=‟1‟) <2>查询没有选修1号课程的学生姓名 select sname form student where not exists (select * form sc where sno=stuedent.sno and cno=‟1‟) <2>查询选修所有全部课程的学生姓名 select sname from student where not exists (select * from course where not exists (select * from sc where sno=student.sno and cno=course.cno) <3>查询到少选修了学生95002选修的全部课程的学生号码 select distinct sno from sc scx where not exists ( select * from sc scy where scy.sno=‟95002‟ and not exists ( select * from sc scz where scz.sno=scx.sno and scz.cno=scy.cno) 因篇幅问题不能全部显示,请点此查看更多更全内容