当前位置:首页 >> IT/计算机 >>

SQL语句练习及答案


sql 语句练习题 1

数据库有如下四个表格: student(sno,sname,sage,ssex,sdpt) 学生表 系表(dptno,dname) course(cno,cname, gradet, tno) 课程表 sc(sno,cno,score) 成绩表 teacher(tno,tname) 教师表 要求:完成以下操作 1. 查询姓"欧阳"且全名为三个汉字的学生的姓名。 select sname from student where sname like “欧阳__?;

2. 查询名字中第 2 个字为"阳"字的学生的姓名和学号。 select sname,sno from student where sname like '_阳%';

3. 查询所有不姓刘的学生姓名。 select sname,sno,ssex from student where sname not like “刘%”;

4. 查询 db_design 课程的课程号和学分。 select cno,ccredit like from course

where cname

'db_design'

5. 查询以"db_"开头,且倒数第 3 个字符为 i 的课程的详细情况。 select * from course where cname like 'db%i_ _';

6. 某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查 询缺少成绩的学生的学号和相应的课程号。

select sno,cno

from

sc

where

grade

is

null;

7. 查所有有成绩的学生学号和课程号。 select sno,cno from sc where grade is not null;

8. 查询计算机系年龄在 20 岁以下的学生姓名。 select sname from student where sdept= 'cs' and sage<20;

9. 查询选修了 3 号课程的学生的学号及其成绩,查询结果按分数降序排列。 select sno, grade from sc

where

cno=

'

3

'

order

by

grade

desc;

10. 查询学生总人数。 select count(*) from student;

11. 查询选修了课程的学生人数。 select count(distinct sno) from sc;

12. 计算 1 号课程的学生平均成绩。 select avg(grade) from sc where cno= ' 1 ';

13. 查询选修 1 号课程的学生最高分数。 select max(grade) from sc where cno= ' 1 ';

14. 查询学生 200215012 选修课程的总学分数。 select sum(grade) where sno= ' from sc,course ' and sc.cno=course.cno;

200215012

15. 查询选修了 3 门以上课程的学生学号。 select sno from sc group by sno having count(*) >3;

16. 查询每个学生及其选修课程的情况。 select student.*,sc.*, course.* from student,sc , course where student.sno=sc.sno and sc.cno=course.cno;

17. 查询每个学生及其选修课程的情况包括没有选修课程的学生 18. 查询选修 2 号课程且成绩在 90 分以上的所有学生的学号、姓名 select student.sno, student.sname from student,sc where student.sno=sc.sno and sc.cno=”2?and sc.grade>90;

19. 查询每个学生的学号、姓名、选修的课程名及成绩。 select student.sno,sname,ssex,sage,sdept,cno,grade from student left outjoin sco on(student.sno=sc.sno);

20. 查询与“刘晨”在同一个系学习的学生。 selectsno,sname,sdept from student where sdept in (select sdept from student where sname=”刘晨?);

21. 查询选修了课程名为“信息系统”的学生学号和姓名 select sno,sname from student where sno in (select sno from sc where cno in

(select cno from course where cname=”信息系统?));

22. 找出每个学生超过他选修课程平均成绩的课程号。 select sno,cno from sc x where grade>= where y.sno=x.sno);

(select avg(grade) from sc y

23. 将一个新学生记录(学号:200215128;姓名:陈冬;性别:男;所在系: is;年龄:18 岁)插入到 student 表中。 insert into student values ('200215128','陈冬','男','is',18);

24. 将学生 200215121 的年龄改为 22 岁。 update student setsage=22 where sno='200215121';

25. 将所有学生的年龄增加 1 岁。 update student setsage=sage+1;

26. 将计算机科学系全体学生的成绩置零。 update sc set grade=0 where exits

(selete * from student where student.sno=sc.sno and sdept=” 计算机科 学系”);

27. 删除学号为 20021528 的学生记录 delete from student where sno=”200215128';

28. 删除所有的学生选课记录。 delete from sc;

29. 删除 2 号课程的所有选课记录。

delete from sc where cno='2';

30. 删除计算机科学系所有学生的选课记录。 delete from sc where sno in (selete sno from student where sdept=” 计算机科学系”);

31. 建立信息系学生的视图。 create view is_student as where sdept='is';

select sno,sname,sage from student

sql 语句练习题 2
设教学数据库 education,有三个关系:

学生关系 s(sno,sname,age,sex,sdept) ; 学习关系 sc(sno,cno,grade) ; 课程关系 c(cno,cname,cdept,tname) 查询问题: 1:查所有年龄在 20 岁以下的学生姓名及年龄。 select sname,sage from s where sage<20;(not age>=20);

2:查考试成绩有不及格的学生的学号 select distinct sno from sc where grade<60;

3:查所年龄在 20 至 23 岁之间的学生姓名、系别及年龄。 select sname,sdept,sage from s where sage between 20 and 23;

4:查计算机系、数学系、信息系的学生姓名、性别。 select sname,ssex from s where sdept in(‘cs’,’is’,’math’);

5:查既不是计算机系、数学系、又不是信息系的学生姓名、性别 select sname,ssex from s where sdept (‘cs’,’is’,’math’); not in

6:查所有姓“刘”的学生的姓名、学号和性别。 select sname,sno,ssex from s where sname like‘刘%’;

7:查姓“上官”且全名为 3 个汉字的学生姓名。 select sname from s where sname like ‘上官__’;

8:查所有不姓“张”的学生的姓名。 select sname,sno,ssex from s where sname not like ‘张%’;

9:查 db_design 课程的课程号。 select cno from c where cname like ‘db_design’;

10:查缺考的学生的学号和课程号。 select sno,cno from sc where grade is null;

11:查年龄为空值的学生的学号和姓名。 select sno,sname from s where sage is null;

12:查计算机系 20 岁以下的学生的学号和姓名。 select sno,sname from s where sdept=’cs’ and sage<20;

13:查计算机系、数学系、信息系的学生姓名、性别。

select sname,ssex from s where sdept=’cs’ or sdept=’is’ or sdept=’math’;

14:查询选修了 c3 课程的学生的学号和成绩,其结果按分数的 降序排列。 select sno,grade from sc where cno=’c3’ order by grade desc;

15:查询全体学生的情况,查询结果按所在系升序排列,对同一系中的学生按年 龄降序排列。 select * from s order by sdep,sage desc;

16:查询学生总人数。 select count(*) from s;

17:查询选修了课程的学生人数。 select count(distinct sno) from sc

18:计算选修了 c1 课程的学生平均成绩。 select avg(grade) from sc where cno=’c1’;

19:查询学习 c3 课程的学生最高分数。 select max(grade) from sc where cno=’c3’;

20:查询各个课程号与相应的选课人数。 select cno, count(sno) from sc group by cno;

21:查询计算机系选修了 3 门以上课程的学生的学号。 select sno from sc where sdept=’cs’ group by sno having count(*)>3;

22:求基本表 s 中男同学的每一年龄组(超过 50 人)有多少人? 要求查询结果按人数升序排列,人数相同按年龄降序排列。 select sage,count(sno) from s where ssex='m' group by sage having count(*)>50 order by 2,sage desc;

23:查询每个学生及其选修课程的情况。 select s.sno, sname, sage, ssex, sdept, cno, grade from s, sc where s.sno=sc.sno;

24:查询选修了 c2 课程且成绩在 90 分以上的所有学生。 select s.sno,sname from s,sc where s.sno=sc.sno and sc.cno=’c2’ and sc.grade>90;

25:查询每个学生选修的课程名及其成绩。 select s.sno,sname,cname,sc.grade from s,sc,c where s.sno=sc.sno and sc.cno=c.cno

26:统计每一年龄选修课程的学生人数。 select sage,count(distinct s.sno) from s,sc where s.sno=sc.sno group by sage;

27:查询选修了 c2 课程的学生姓名。 select sname from s where sno in(

select sno from sc where cno=’c2’);

28:查询与“张三”在同一个系学习的学生学号、姓名和系别。 select sno,sname,sdept from where sdept=( select sdept from s where sname=’张三’);

29:查询选修课程名为“数据库”的学生学号和姓名。 select sno,sname from s where sno in ( select sno from sc where cno in ( select cno from c where cname=’db’));

30:查询与“张三”在同一个系学习的学生学号、姓名和系别。 select sno,sname,sdept from s where sdept=( select sdept from s where sname=‘张三’);

31:查询选修课程名为“数据库”的学生学号和姓名。 select sno,sname from s where sno in (select sno from sc where cno= (select cno from c where cname=’db’));

32:查询选修了 c2 课程的学生姓名。 1. select sname from s where sno in (select sno from sc where cno=’c2’); 2. select sname from s where exists (select * from sc where sc.sno=s.sno and cno=’c2’);

33:查询选修了全部课程的学生姓名。 select sname from s where not exists (select * from c where not exists (select * from sc where sc.sno=s.sno and sc.cno=c.cno));

36:查询所学课程包含学生 s3 所学课程的学生学号 select distinct sno from sc as x where not exists (select * from sc as y where y.sno=’s3’ and not exists

(select * from sc as z where z.sno=x.sno and z.cno=y.cno));

sql 语句练习题 3
一、简单查询 1、列出全部学生的信息。 select * from 学生 2、列出软件专业全部学生的学号及姓名。 select 学号,姓名 from 学生 where 专业="软件" 3、列出所有必修课的课号。 select distinct 课号 from 必修课 4、求 1 号课成绩大于 80 分的学生的学号及成绩,并按成绩由高到低列出。 select 学号,成绩 from 选课 where 课号="1"and 成绩>80 order by 成绩 desc 5、列出非软件专业学生的名单。 方法一:select 姓名 from 学生 where 专业<>"软件" 方法二:select 姓名 from 学生 where not 专业="软件" 方法三:select 姓名 from 学生 where 专业!="软件" 6、查询成绩在 70~80 分之间的学生选课得分情况 方法一:select*from 选课 where 成绩>=70and 成绩<=80 方法二:select*from 选课 where 成绩 between70and80 不在此范围内的查询:(注意写出和以下语句等价的语句) select * from 选课 where 成绩 not between70and80 7、列出选修 1 号课或 3 号课的全体学生的学号和成绩。 方法一:select 学号,成绩 from 选课 where 课号="1"or 课号="3" 方法二:select 学号,成绩 from 选课 where 课号 in("1","3") 相反条件查询:select 学号,成绩 from 选课 where 课号 notin("1","3")

8、列出所有 98 级学生的学生成绩情况。 select*from 选课 where 学号 like"98%" select*from 选课 where 学号 like"98____" 相反条件查询:select*from 选课 where 学号 notlike"98%" 9、列出成绩为空值(或不为空值)的学生的学号和课号。 答案一:select 学号,课号 from 选课 where 成绩 isnull 答案二:select 学号,课号 from 选课 where 成绩 isnotnull 10、求出所有学生的总成绩。 select sum(成绩) as 总成绩 from 选课 11、列出每个学生的平均成绩。 select 学号,avg(成绩) as 平均成绩 from 选课 group by 学号 12、列出各科的平均成绩、最高成绩、最低成绩和选课人数。 select 课号,avg(成绩)as 平均成绩,max(成绩)as 最高分,; min(成绩)as 最低分,count(学号) as 选课人数 from 选课 group by 课号 二、连接查询 (一)简单连接 1、列出选修 1 号课的学生姓名及成绩。 select 姓名,成绩 from 学生,选课 where 学生.学号=选课.学号 and 课号="1" 2、列出选修 1 号课的学生的学号、姓名及成绩。 select 学生.学号,姓名,成绩 from 学生 s,选课 xwheres.学号=x.学号 and 课号 ="1" 3、求出总分大于 150 的学生的学号、姓名及总成绩。 select 学生.学号,姓名,sum(成绩)as 总成绩 from 学生,选课; where 学生.学号=选课.学号 groupby 选课.学号 havingsum(成绩)>150

(二)自连接查询 1、列出那些专业相同的学生相应的姓名及专业信息。 select a.姓名,b.姓名,专业 from 学生 a,学生 bwherea.学号<>b.学号 anda.专 业=b.专业 2、求至少选修 1 号课和 2 号课的学生的学号。 selectx.学号 from 选课 x,选课 ywherex.学号=y.学号 andx.课号="1"andy.课号 ="2" 3、有以下表 rate.dbf 币种 1 代码 c(2)、币种 2 代码 c(2)、买入价 n(8,4)、卖出价 n(8,4) 外汇汇率.dbf 币种 1c(4)、币种 2c(4)、买入价 n(8,4)、卖出价 n(8,4) 外汇代码.dbf 外汇名称 c(10)、外汇代码 c(10) 要求:将所有“外汇汇率”表中的数据插入 rate 表中并且顺序不变,由于“外 汇汇率”中的币种 1 和币种 2 存放的是外币名称,而 rate 表中的币种 1 代码和 币种 2 代码应该存放外币代码,所以插入时要做相应的改动,外币名称与外向 代码的对应关系存储在“外汇代码”表中。 selecta.外币代码 as 币种 1 代码,b.外币代码 as 币种 2 代码,; 买入价,卖出价 from 外汇代码 a,外汇汇率,外汇代码 b; wherea.外币名称=外汇汇率.币种 1andb.外币名称=外汇汇率.币种 2intotablerate 4、假定有“雇员”表(雇员号 c(2),雇员姓名 c(6),经理号 c(2)), 根据雇员关系列出上一级经理及其所领导的职员清单。(教案中的例题) select"领导",s.雇员姓名,"雇员",e.雇员姓名 from 雇员 s,雇员 ewheres.雇员 号=e.经理 (三)超连接 1、列出选修 1 号课的学生姓名及成绩。

方法一:(使用简单连接查询格式) select 姓名,成绩 from 学生,选课 where 学生.学号=选课.学号 and 课号="1" 方法二:(使用内部连接格式) select 姓名,成绩 from 学生 innerjoin 选课 on 学生.学号=选课.学号 where 课 号="1" 方法三:内部连接的 inner 短语可以省略。(与方法二等价) select 姓名,成绩 from 学生 join 选课 on 学生.学号=选课.学号 where 课号="1" 2、查询订货管理数据库中数据的仓库号、城市、供应商名和地址信息。 方法一:使用简单连接格式。 select 仓库.仓库号,城市,供应商名,地址 from 供应商,订购单,职工,仓库; where 供应商.供应商号=订购单.供应商号 and 订购单.职工号=职工.职工号; and 职工.仓库号=仓库.仓库号 方法二:使用超连接的内部连接格式。(注意连接条件的顺序) select 仓库.仓库号,城市,供应商名,地址 from 供应商 join 订购单 join 职工 join 仓库; on 职工.仓库号=仓库.仓库号 on 订购单.职工号=职工.职工号 on 供应商.供应商 号=订购单.供应商号 3、查询没有选修任何课程的学生姓名。 方法一:使用嵌套查询 select 姓名 from 学生 where 学号 notin(select 学号 from 选课) 方法二:使用超连接的右连接。 select 姓名 from 选课 rightjoin 学生 on 选课.学号=学生.学号 where 选课.学 号<>学生.学号 方法三:使用超连接的左连接。(注意表名顺序和方法二的不同) select 姓名 from 学生 leftjoin 选课 on 选课.学号=学生.学号 where 选课.学号 <>学生.学号

三、嵌套查询 (一)普通嵌套与谓词 exists 1、列出选修汇编语言课的学生的学号。 方法一: select 学号 from 选课 where 课号=(select 课号 from 课程 where 课名="汇编语 言") 方法二:使用谓词 exists。注意和方法一格式上的不同。 select 学号 from 选课 whereexist(select*from 课程; where 课名="汇编语言"and 选课.课号=课程.课号) 2、求软件专业所有必修课的课程信息。 方法一: select*from 课程 where 课号 in;(select 课号 from 必修课 where 必修专业="软 件") 方法二: select*from 课程 whereexist(select*from 必修课 where 必修专业="软件"; and 课程.课号=必修课.课号) (二)量词 any、some、all 1、求选修 2 号课的学生中,成绩比选修 1 号课的最低成绩要高的学生的学号和 成绩。 方法一: select 学号,成绩 from 选课 where 课号="2"and 成绩>; (selectmin(成绩)from 选课 where 课号="1") 方法二:any 等价于 some,所以可将 any 换成 some。 select 学号,成绩 from 选课 where 课号="2"and 成绩>any; (select 成绩 from 选课 where 课号="1")

2、求选修 2 号课的学生中,成绩比选修 1 号课的任何学生的成绩都要高的那些 学生的学号和成绩。 方法一: select 学号,成绩 from 选课 where 课号="2"and 成绩>; (selectmax(成绩)from 选课 where 课号="1") 方法二: select 学号,成绩 from 选课 where 课号="2"and 成绩>all; (select 成绩 from 选课 where 课号="1") (三)内外层互相关嵌套(外层依赖于内层的查询结果,内层依赖于外层来进 一步查询) 1、列出每门课程中成绩最高的选课信息。 select*from 选课 awhere 成绩=(selectmax(成绩)from 选课 bwherea.课号=b.课 号) 2、列出每个学生中成绩低于本人平均成绩的选课信息。 select*from 选课 awhere 成绩<(selectavg(成绩)from 选课 bwherea.学号=b.学 号) 3、 列出表“订购单 2.dbf”(其内容就是在订购单表的基础上增加一个总金额字 段)中每个职工经手的具有最高总金额的订购单信息。(教案中例题) selectout.职工号,out.供应商号,out.订货单号,out.订货日期,out.总金额; from 订购单 outwhere 总金额=(selectmax(总金额)from 订购单 inner1; whereout.职工号=inner1.职工号) 四、操作功能 1、在课程表中插入新的元组(5,大学英语)。 insertinto 课程(课号,课名)values("5","大学英语") 2、给学生表中男生的记录加上删除标记。 deletefrom 学生 where 性别="男"

3、将选课表中所有课程的成绩分别提高 5 分。将课号为“4”的课程的成绩置 为空值。 update 选课 set 成绩=成绩+5 update 选课 set 成绩=nullwhere 课号="4" 五、定义表结构 1、建立研究生表,该表不属于任何数据库,其结构如表所示: 字段名 字段类型 字段长度 小数位数 特殊要求 学号 c 6 姓名 c 8 性别 c 2 年龄 n 3 0 入学年月 d 允许空值 createtable 研究生 free(学号 c(6),姓名 c(8),性别 c(2),年龄 n(3,0),入学年 月 dnull) 2、假设已经建立了 xsk 数据库,在 xsk 中建立“学生 1”表,其结构如表所示 字段名 字段类型 字段长度 小数位数 特殊要求 学号 c 6 主索引 姓名 c 8 不能为空 性别 c 2 年龄 n 3 0 年龄大于 10 小于 45 是否党员 l 默认值为 1999 年 9 月 1 入学年月 d 日 createtable 学生 1(学号 c(6)primarykey,姓名 c(8)notnull,性别 c(2),; 年龄 n(3,0)check 年龄>10and 年龄<45error"年龄必须大于 10 小于 45",是否党 员 l,; 入学年月 ddefault{^1999-9-1}) 3、在 xsk 数据库建立“课程 1”表,其结构如表所示: 字段名 课号 课程名 字段类型 字段长度 小数位数 特殊要求 c 4 主索引 c 10 不能为空

学分

n

2

createtable 课程 1(课号 c(4)primarykey,课程名 c(10)notnull,学分 n(2)) 4、在 xsk 数据库建立“选课 1”表,其结构如表所示: 字段名 学号 课号 成绩 字段类型 字段长度 小数位数 特殊要求 c 6 外索引与学生表建立关系 c 4 外索引与课程表建立关系 n 5 2

createtable 选课 1(学号 c(6)reference 学生,课号 c(4)reference 课程,成绩 n(5,2)) 六、修改表结构 1、为“课程 1”表添加一个开课学期字段,字段类型为数值型,长度为 1。 altertable 课程 1addcolumn 开课学期 n(1) 2、修改开课学期字段为字符型,合法值为 1 或 2。 altertable 课程 1altercolumn 开课学期 c(1)check 开课学期="1"or 开课学期 ="2" 3、删除“课程 1”表中对开课学期字段的合法值约束,设置默认值为 1。 altertable 课程 1alter 开课学期 dropcheck altertable 课程 1alter 开课学期 setdefault"1" 4、删除“课程 1”表中的开课学期字段。修改课程名字段为“课名”字段。 altertable 课程 1drop 开课学期 rename 课程名 to 课名 5、在“学生 1”表的“年龄”字段上建立候选索引。 altertable 学生 1addunique 年龄 tag 年龄 6、在“学生 1”表中添加一个出生日期字段,删除年龄字段。 altertable 学生 1add 出生日期 d altertable 学生 1dropuniquetag 年龄 drop 年龄


相关文章:
sql语句练习题及答案.doc
sql语句练习题及答案_从业资格考试_资格考试/认证_教育专区。一 在数据库 s
SQL语句练习及参考答案.doc
SQL语句练习及参考答案 - SQL 语句练习 1.设学生选课数据库有关系 S(
SQL语句练习及答案.doc
SQL语句练习及答案 - sql 语句练习题 1 数据库有如下四个表格: stu
sql语句练习题及答案.doc
sql语句练习题及答案 - 一 在数据库 school 中建立 student
SQL语句练习及答案.doc
SQL语句练习及答案 - 现在有一教学管理系统,具体的关系模式如下: Stude
SQL语句练习题及答案.pdf
SQL语句练习题及答案 - 一 在数据库 school 中建立 student
SQL语句强化练习题及答案.doc
SQL 语句强化练习题及答案 一、简单查询 1、列出全部学生的信息。 SELEC
SQL语句练习题答案.doc
篇三:sql 语句强化练习题及答案 sql 语句强化练习题及答案 一、简单查询
SQL语句练习题及答案.doc
SQL语句练习题及答案 - ---...
SQL语言习题及答案(好).ppt
SQL语言习题及答案(好)_理学_高等教育_教育专区。数据库(第一大题) 第一大
SQL语句-补充练习及答案.txt
SQL语句-补充练习及答案 - 1.查询tblStudent表中所有学生的学号、
SQL语句强化练习题及答案.doc
SQL语句强化练习题及答案 - SQL 语句强化练习题及答案 一、简单查询 1、
SQL语句强化练习题及答案1.doc
SQL语句强化练习题及答案1_理学_高等教育_教育专区。SQL语句强化练习题及答案 一、简单查询 1、列出全部学生的信息。 列出全部学生的信息。 SELECT * FROM 学生 ...
SQL语句练习题.doc
SQL语句练习题 - 一、 设有一数据库,包括四个表:学生表(Student)、
SQL语句练习及答案3.doc
SQL语句练习及答案3 - 数据库结构如下: 仓库(仓库号, 城市, 面积) 订
Oracle的sql语句练习题含答案.doc
Oracle的sql语句练习题含答案 - Oracle 的 sql 语句练习题含答案 --1、选择部门 30 中的雇员 select * from emp where deptno=30; -...
SQL语句与关系代数习题--答案已做.doc
SQL语句与关系代数习题--答案已做 - 1 一、选择题 1、SQL 语言是( 答案:C 2、SQL 语言具有两种使用方式,分别称为交互式 SQL 和( )。(SQL 语言使用...
SQL查询语句练习.doc
SQL查询语句练习 - Sql 查询练习测试 (1)、查询 Student 表中
SQL语言习题及答案.doc
数据库原理之关系数据库 SQL 语言课后习题及答案 http://www.edu
经典SQLserver语句练习及标准答案.doc
标签: 语句| 经典SQLserver语句练习及标准答案_计算机软件及应用_IT/计算机_专业资料。SQLserver语句练习及标准答案 学生成绩表(stuscore):姓名:name 张三 张三 ...