实验5 SQL查询答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

内容1:基于表zgda,完成如下查询
1.查询zgda表中所有职工的信息。

sele * from zgda
2.查询zgda表中所有职工的职称字段值。

sele职称from zgda
3.查询zgda表中所有职工的职称种类,即去掉重复的职称信息。

sele dist 职称from zgda
4. 查询zgda表中所有职工的姓名、性别、年龄、职称字段的信息。

sele 姓名,性别,年龄,职称from zgda
5.查询zgda表中编号最大的前3条记录的信息。

sele top 3 * from zgda order by 编号desc
6.查询zgda表中年龄最大的前一半记录的信息。

sele top 50 perc * from zgda order by 年龄desc
7.查询zgda表中所有男职工的姓名、性别、年龄、职称字段的信息。

sele 姓名,性别,年龄,职称from zgda where 性别="男"
等价的命令还可写成:
sele 姓名,性别,年龄,职称from zgda where 性别!="女"
sele 姓名,性别,年龄,职称from zgda where 性别not in ("女")
sele 姓名,性别,年龄,职称from zgda where 性别in ("男")
8.查询zgda表中所有讲师的姓名、性别、年龄、职称字段的信息,并将查询的结果按性别升序,年龄降序排列。

sele 姓名,性别,年龄,职称from zgda where 职称="讲师" order by 性别,年龄desc
9.查询zgda表中年龄在40到50之间的职工(包括年龄为40和年龄为50的职工)信息,查询结果只包括姓名、性别、年龄、职称四个字段。

sele 姓名,性别,年龄,职称from zgda where 年龄between 40 and 50
等价于:
sele 姓名,性别,年龄,职称from zgda where between(年龄,40 ,50)
sele 姓名,性别,年龄,职称from zgda where 年龄>=40 and 年龄<=50
10.查询zgda表中年龄不在40到50之间的职工信息,查询结果只包括姓名、性别、年龄、职称四个字段。

sele 姓名,性别,年龄,职称from zgda where 年龄not between 40 and 50
sele 姓名,性别,年龄,职称from zgda where 年龄<40 or 年龄>50
11. 查询zgda表中所有姓刘的职工记录。

Sele * from zgda where 姓名=”刘”
Sele * from zgda where 姓名like "刘%"
Sele * from zgda where like("刘*",姓名)
Sele * from zgda where left(姓名,2)="刘"
Sele * from zgda where substr(姓名,1,2)="刘"
Sele * from zgda where at("刘",姓名,1)=1
12.查询所有姓王且姓名只有两个字符的职工信息。

Sele * from zgda where 姓名="王" and len(alltrim(姓名))=4
Sele * from zgda where 姓名like "王%" and len(alltrim(姓名))=4
Sele * from zgda where like("王*",姓名) and len(alltrim(姓名))=4
Sele * from zgda where left(姓名,2)="王" and len(alltrim(姓名))=4
Sele * from zgda where substr(姓名,1,2)="王" and len(alltrim(姓名))=4
Sele * from zgda where at("王",姓名,1)=1 and len(alltrim(姓名))=4
13.查询所有不姓王的职工信息,查询结果只包括姓名、性别、年龄、职称四个字段。

sele 姓名,性别,年龄,职称from zgda where 姓名not like "王%"
Sele * from zgda where like("刘*",姓名)=.f.
14.查询zgda表中所有姓“刘”和姓“王”的职工信息,查询结果只包括姓名、性别、年龄、职称四个字段。

sele 姓名,性别,年龄,职称from zgda where 姓名="刘" or姓名="王"
sele 姓名,性别,年龄,职称from zgda where 姓名in ("刘" ,"王")
sele 姓名,性别,年龄,职称from zgda where inlist(姓名,"刘" ,"王")
15.查询zgda表中所有职称为“讲师”和“副教授”的职工信息,查询结果只包括姓名、性别、年龄、职称四个字段。

sele 姓名,性别,年龄,职称from zgda where 职称="讲师" or 职称="副教授"
sele 姓名,性别,年龄,职称from zgda where 职称in ("讲师","副教授")
sele 姓名,性别,年龄,职称from zgda where inlist(职称,"讲师","副教授")
16. 统计zgda表中各种职称职工的平均年龄,查询结果只包括“职称”和“平均年龄”两列。

select 职称,avg(年龄) as平均年龄from zgda group by 职称
select 职称,avg(年龄) 平均年龄from zgda group by 职称
17. 统计zgda表中各种职称职工的年龄总和,查询结果只包括“职称”和“年龄总和”两列。

select 职称,sum(年龄) as年龄总和from zgda group by 职称
select 职称, sum(年龄) 年龄总和from zgda group by 职称
18. 统计zgda表中各种职称职工的平均年龄,查询结果只包括“职称”和“平均年龄”两
列,只显示平均年龄大于40的分组。

select 职称,avg(年龄) 平均年龄from zgda group by 职称having 平均年龄>40
19. 查询zgda表中年龄的最大值。

select max(年龄) from zgda
20.查询zgda表中年龄的最大值,查询结果中只包括“最大年龄”列。

select max(年龄) 最大年龄from zgda
select max(年龄) as 最大年龄from zgda
21. 查询zgda表中年龄的最小值。

select max(年龄) from zgda
22. 查询zgda表中年龄的最小值,查询结果中只包括“最小年龄”列。

select min(年龄) 最小年龄from zgda
select min(年龄) as 最小年龄from zgda
23. 查询zgda表中,各职称职工的最大年龄,查询结果中只包括“职称”和“最大年龄”两列。

select职称,max(年龄) 最大年龄from zgda group by 职称
24. 查询zgda表中的职工人数,查询结果中只包括“职工人数”列。

select count(*) 职工人数from zgda
25. 统计性别字段值的行数(计重复值)
select count(性别) from zgda
26. 统计性别字段值的行数(不计重复值)
select count(distinct 性别) from zgda
27. 按性别统计zgda表中的职工人数,查询结果中只包括“性别”和“职工人数”两列。

select 性别,count(*) 职工人数from zgda group by 性别
28. 查询zgda表中所有女职工的信息,把查询结果输出到表dagirl中。

select * from zgda where 性别='女' into table dagirl
29. 查询zgda表中所有男职工的信息,把查询结果输出到临时表temp中。

select * from zgda where 性别='男' into cursor temp
30. 查询zgda表中所有男职工的信息,把查询结果输出到数组AA中。

select * from zgda where 性别='男' into array AA
31. 查询zgda表中所有男职工的信息,把查询结果以追加方式存储于文本文件da.txt 中。

select * from zgda where 性别='男' to file da additive &&无additive,覆盖方式
内容2:基于学生信息、课程信息、成绩信息表完成如下查询
1.查询男生在1986年以前出生的学生(含1986)并显示所有字段。

select * from 学生信息where year(出生日期)<=1986 性别="男"
2.查询五月出生的学生,并显示所有字段。

select * from 学生信息where month(出生日期)=5
3.查询今天过生日的学生,并显示姓名、出生日期。

1)select 姓名,出生日期from 学生信息where;
month(date())=month(出生日期) and day(date())=day(出生日期)
2)select 姓名,出生日期from 学生信息where;
right(dtoc(date(),1),4)=right(dtoc(出生日期,1),4)
4.查询所有的记录,显示时男生用字符1表示;女生用字符0表示。

显示姓名、性别两个字段。

select 姓名,IIF(性别="男","1","0") as 性别from 学生信息
5.查询姓张的记录,显示姓名、性别(用5种方法)。

select 姓名,性别from 学生信息;
where subs(姓名,1,2)="张" &&解一
where left(姓名,2)="张" &&解二
where at("张",姓名)=1 &&解三
where 姓名="张" &&解四
where 姓名like "张%" &&解五
where like("张*",姓名) &&解六
6.查询单名单姓的记录,显示学号、姓名、性别。

select 学号,姓名,性别from 学生信息;
where 姓名like "__" &&解一
where len(alltrim(姓名))=4 &&解二
7.查询入学成绩在540~600闭区间所有记录(用3种方法),并显示所有字段。

select * from 学生信息;
where 入学成绩>=540 and 入学成绩<=600 &&解一
where 入学成绩between 540 and 600 &&解二
where between(入学成绩,540,600) &&解三
where not(入学成绩<540 or 入学成绩>600) &&解四
8.查询入学成绩在540分以下(不含540)或600分以上(不含600),并显示所有字段。

select * from 学生信息;
where 入学成绩<540 or 入学成绩>600 &&解一
where not(入学成绩>=540 and 入学成绩<=600) &&解二
where !入学成绩between 540 and 600 &&解三
where !between(入学成绩,540,600) &&解四
9.查询男性中既过了英语四级又过了计算机等级考试的记录,并显示所有字段。

select * from 学生信息where 性别="男" and;
四级通过否and 计算机等级is not null &&解一
四级通过否=.T. and 计算机等级is not null &&解二
四级通过否and !isnull(计算机等级) &&解三
10.查询女性中过了英语四级,但没有过了计算机等级考试的记录,并显示所有字段。

select * from 学生信息where ;
四级通过否and isnull(计算机等级) and 性别="女"
11.查询所有记录与显示所有字段,但入学成绩显示时,女生加10分,男生不加,并显示所有字段。

select 学号,姓名,性别,出生日期, ;
iif(性别="女",入学成绩+10,入学成绩) 新入学成绩, ;
四级通过否,计算机等级from 学生信息
12.查询所有记录与显示所有字段,但“学号”字段显示时更名为“学生学号”。

select 学号学生学号,姓名,性别,出生日期, ;
入学成绩,四级通过否,计算机等级from 学生信息
13.查询男生的入学成绩最高分、最低分和平均分,显示时用最高分、最低分和平均分作为输出列名。

select 性别,max(入学成绩) 最高分,min(入学成绩) 最低分, AVG(入学成绩) 平均分;
from 学生信息where 性别="男"
14.查询年龄最大并显示所有字段。

select 学号,姓名,性别from 学生信息;
where 出生日期= (select min(出生日期) from 学生信息)
15.查询女生入学成绩最高分,并输出学号、姓名、性别与入学成绩。

select 学号,姓名,性别,入学成绩from 学生信息where 性别="女" ;
and 入学成绩= (select max(入学成绩) from 学生信息where 性别="女")
16.检索选修了”02”或”01”课程的学号、姓名、课程号及成绩。

(11条记录)
1)select 学生信息.学号,姓名, 课程号,成绩from 成绩信息,学生信息;
where 学生信息.学号=成绩信息.学号And 课程号in ( "01" ,"02")
2) sele 学生信息.学号,姓名, 课程号,成绩from 成绩信息;
join 学生信息on 学生信息.学号=成绩信息.学号where 课程号in ;
(sele 课程号from 课程信息where 课程名="英语" or 课程名="程序设计")
3) sele 学生信息.学号,姓名, 成绩信息.课程号,成绩from 成绩信息;
join 学生信息on 学生信息.学号=成绩信息.学号;
join 课程信息on 课程信息.课程号=成绩信息.课程号;
where (课程名="英语" or 课程名="程序设计")
17.检索同时选修了”02”和”01”课程的学号、姓名。

(4条记录)
方法1:sele 学生信息.学号,姓名from 成绩信息,学生信息;
where 学生信息.学号=成绩信息.学号And 课程号in ;
(sele 课程号from 课程信息where 课程名="英语" or 课程名="程序设计");
group by 学生信息.学号havi count(姓名)>=2
方法2:sele 学生信息.学号,姓名from 成绩信息;
join 学生信息on 学生信息.学号=成绩信息.学号;
join 课程信息on 课程信息.课程号=成绩信息.课程号;
where (课程名="英语" or 课程名="程序设计") ;
group by 学生信息.学号havi count(姓名)>=2
18.检索男生中高于女生入学成绩的平均分的对应信息,并按入学成绩升序存于数据表AA.dbf中。

sele * from 学生信息where 性别=“男”and 入学成绩> ;
( sele avg(入学成绩) from 学生信息where 性别="女") order by 5 into table AA
19.检索男生中高于女生入学成绩的最大值对应的一条记录信息,并存于数据表BB.dbf中。

sele * from 学生信息where 性别=“男”and 入学成绩> ;
( sele max(入学成绩) from 学生信息where 性别="女") order by 5 into table BB
20.检索学号、姓名、课程名称及成绩并按成绩降序排列存入到临时表BBB.dbf中。

1)sele a.学号,姓名,课程名,成绩from 学生信息a, 成绩信息b, 课程信息c;
where a.学号=b.学号and b.课程号=c.课程号order by 成绩desc into cursor bbbb
2)SELECT 学生信息.学号,姓名,成绩,课程名;
FROM 学生信息JOIN 成绩信息JOIN 课程信息;
ON成绩信息.课程号= 课程信息.课程号ON 学生信息.学号= 成绩信息.学号;
order by 成绩desc into cursor bbbb
内容3: 基于数据表zg和dgd完成如下查询
1.检索出与供应商S7、S4和S6都有业务联系的职工的职工号和工资。

1)SELECT DISTINCT zg.职工号,zg.工资FROM zg;
join DGD on zg.职工号=DGD.职工号;
where 供应商号="S6" and 供应商号="S4" and 供应商号="S7”
2)SELECT DISTINCT zg.职工号,zg.工资from dgd a, dgd b ,dgd c , zg;
Where a.职工号=b.职工号and b.职工号=c.职工号and ;
c.职工号=zg.职工号and a.供应商号="S6" and b.供应商号="S4" and c.供应商号="S7";
2.检索出各个季度订购的总金额。

sele int((month(订购日期)-1)/3)+1 as 季度,sum(总金额) as 汇总金额from dgd;
group by int((month(订购日期)-1)/3)+1
sele int((month(订购日期)-1)/3)+1 as 季度, sum(总金额) as 汇总金额from dgd;
group by 季度
3.按仓库号顺序汇总每个职工订购的总金额(不允许使用排序短语)。

1)sele zg.仓库号,工资,zg.职工号,sum(总金额) ;
from zg join dgd on zg.职工号=dgd.职工号group by zg.仓库号,dgd.职工号
2)sele zg.仓库号,工资,zg.职工号,sum(总金额) ;
from zg , dgd WHERE zg.职工号=dgd.职工号group by zg.仓库号,dgd.职工号
4.检索各仓库的职工人数。

select 仓库号,count(*) as 职工人数from zg group by 仓库号
5.按仓库号汇总职工工资和平均工资。

select 仓库号,sum(工资) as 汇总工资, avg(工资) as 平均工资from zg group by 仓库号
6.按职工号汇总采购总金额。

select 职工号,sum(总金额) as 总金额汇总, from dgd group by 职工号
7.检索与两个以上供应商有联系的职工号。

sele 职工号from dgd group by 职工号having count(供应商号)>=2
8.检索各仓库每个职工采购的情况,并显示仓库号、职工号、订购日期与总金额。

Select 仓库号,zg.职工号,订购日期,总金额from zg, dgd where zg.职工号=dgd.职工号
9.检索与供应商S6有联系的仓库号、职工号与工资。

Select仓库号, zg.职工号, 工资from zg, dgd where 供应商号=”S6” and zg.职工号=dgd.职工号
10.检索总金额最高的职工号工资。

Select zg.职工号,工资from zg,dgd where zg.职工号=dgd.职工号and 总金额>=;
(select max(总金额) from dgd)
内容4:基于数据表wy和jsj完成后续4个查询
1.检索既参加了WY.dbf(文艺小组)又参加了JSJ.dbf (计算机小组)的记录并输出到数组WYJSJ 中(交集)。

sele jsj.学号, jsj.姓名from jsj ,wy where jsj.学号=wy.学号into array wyjsj
2.检索只参加了一个小组的记录并按学号升序输出到ABC.DBF中。

sele * from jsj where 学号not in (sele 学号from wy);
Union;
sele * from wy where 学号not in (sele 学号from jsj) into table abc
3.检索参加了文艺小组或计算机小组的同学(排除重复记录)并按学号降序,姓名降序输出到临时表CBA中(并集)
sele * from jsj union sele * from wy order by 1,2 desc into cursor cba
4.检索只参加了文艺小组而没有参加计算机小组的同学记录(差集) ,并将这些记录添加到计算机小组记录的后面(可用两条命令来完成)。

sele * from wy where 学号not in (sele 学号from jsj) into array a
Insert into JSJ from array a。

相关文档
最新文档