设教学数据库Education有三个关系:
学生关系S(SNO,SNAME,AGE,SEX,SDEPT);学号,名字,年龄,性别,系
学习关系SC(SNO,CNO,GRADE);学号,课程号,成绩
课程关系C(CNO,CNAME,CDEPT,TNAME)课程编号,课程名,课程部门,老师名
查询问题:
1:查所有年龄在20岁以下的学生姓名及年龄。
Select sname,age from s where age<20
2:查考试成绩有不及格的学生的学号
Select s.sno from s join sc on s.sno=sc.sno where grade<60
3:查所年龄在20至23岁之间的学生姓名、系别及年龄。
select sname,age,sdept from s where age BETWEEN 20 AND 23
4:查计算机系、数学系、信息系的学生姓名、性别。可以用in
select sname,sex from s where sdept=’计算机’ or sdept=’数学’ or sdept=’软工’
5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别
Select sname,sex from s where not (sdept=’计算机’) and not (sdept=’数学’) and not (sdept=’建筑’)
6:查所有姓“刘”的学生的姓名、学号和性别。
Select sname,sno,sex from s where sname LIKE ‘刘%’
7:查姓“上官”且全名为3个汉字的学生姓名。
Select sname from s where sname LIKE ‘上官_’
8:查所有不姓“张”的学生的姓名。
Select sname from s where sname NOT LIKE ‘张%’
9:查DB_Design课程的课程号。
select cno from c WHERE cname=’db_design’
补
10:查缺考的学生的学号和课程号。
select sno,cno from sc where grade=’缺考’
11:查年龄为空值的学生的学号和姓名。(看)
Select sno,sname from s where age is null
12:查计算机系20岁以下的学生的学号和姓名。
Select sno,sname from s where sdept=’计算机’ AND age <20
13:查计算机系、数学系、信息系的学生姓名、性别。Where in
Select sex,sname from s where sdept=’计算机’ or sdept=’软工’ or sdept=’数学’
14:查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
select sc.sno,grade from sc join c on sc.cno=c.cno where c.cname=’c2′ GROUP BY grade desc
15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
select * from s ORDER BY sdept,age DESC
16:查询学生总人数。
SELECT count(sno) from s
17:查询选修了课程的学生人数。 Distinct 去重
select count(DISTINCT(sno)) from sc
18:计算选修了C1课程的学生平均成绩。
select avg(grade) from sc JOIN c on sc.cno=c.cno where c.cname=’c1′
19:查询学习C3课程的学生最高分数。字段为int类型
select max(grade) from sc JOIN c on sc.cno=c.cno where c.cname=’c3′
20:查询各个课程号与相应的选课人数。
select COUNT(sno) from sc group by cno
21:查询计算机系选修了3门以上课程的学生的学号。(没做完) having 在结果集中删选
#SELECT s.sno from s,sc where sdept=’1502′ and s.sno = sc.sno HAVING COUNT(cno)>3
22:求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
#SELECT COUNT(sage) from s where ssex=’男’ GROUP BY sage HAVING COUNT(sage)>50 ORDER BY count(sage),sage desc
23:查询每个学生及其选修课程的情况。
select sname,cname,grade from sc join s on sc.sno=s.sno join c on sc.cno=c.cno
24:查询选修了C2课程且成绩在90分以上的所有学生。
select sname from sc join s on sc.sno=s.sno join c on sc.cno=c.cno where grade >90 AND cname=’c2′
25:查询每个学生选修的课程名及其成绩。
select sname,cname,grade from sc join s on sc.sno=s.sno join c on sc.cno=c.cno
26:统计每一年龄选修课程的学生人数。
27:查询选修了C2课程的学生姓名。
select sname from sc join s on sc.sno=s.sno join c on sc.cno=c.cno WHERE cname=’c2′
28:查询与“张三”在同一个系学习的学生学号、姓名和系别。
select sname,sno,sdept from s WHERE sdept=(SELECT sdept from s where sname=’张三’)
29:查询选修课程名为“数据库”的学生学号和姓名。
select sname,s.sno from s JOIN sc on s.sno=sc.sno join c on sc.cno=c.cno where cname=’数据库’
33:查询所有未选修C2课程的学生姓名。
select sname from sc join s on sc.sno=s.sno where sc.sno not in (select sc.sno from sc join c on sc.cno=c.cno where c.cname in (‘c2’))
35:查询选修了全部课程的学生姓名。
36:查询所学课程包含学生S3所学课程的学生学号
select sc.sno from sc where sc.cno in(select sc.cno from sc join s on sc.sno=s.sno where sname=’赵六’)
#查DB_Design课程的课程号。
#ESCAPE 自定义转义符 也可以使用\来转义
#SELECT cno,cname from c where cname like ‘DB_Design’ ESCAPE ”
#查询选修了C3课程的学生的学号和成绩,其结果按分数的降序排列。
#SELECT sno,grade from sc where cno =1 ORDER BY grade desc
#查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年龄降序排列。
#SELECT * from s ORDER BY sdept asc ,sage desc
#查询选修了课程的学生人数。
#SELECT count(DISTINCT(sno)) from sc
#查询各个课程号与相应的选课人数。
#SELECT COUNT(sno),cno from sc GROUP BY cno
#查询计算机系选修了3门以上课程的学生的学号。 HAVING 在结果集中筛选
#SELECT s.sno from s,sc where sdept=’1502′ and s.sno = sc.sno HAVING COUNT(cno)>3
#求基本表S中男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。
#SELECT COUNT(sage) from s where ssex=’男’ GROUP BY sage HAVING COUNT(sage)>50 ORDER BY count(sage),sage desc
#查询每个学生及其选修课程的情况。
#SELECT * from s,sc where s.sno = sc.sno
#查询选修了C2课程且成绩在90分以上的所有学生。(第二种形式的两表联查)
#SELECT * FROM sc,c where sc.cno = c.cno and grade>80 and cname=’php’
#查询每个学生选修的课程名及其成绩。(第二种形式的三表联查)
SELECT sname,cname,grade from s,sc,c where sc.cno = c.cno and s.sno = sc.sno