SQL语句习题汇总.docx
- 文档编号:1798778
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:17
- 大小:24.22KB
SQL语句习题汇总.docx
《SQL语句习题汇总.docx》由会员分享,可在线阅读,更多相关《SQL语句习题汇总.docx(17页珍藏版)》请在冰点文库上搜索。
SQL语句习题汇总
数据库试题集
汇总
设某商业集团关于商店销售商品的数据库中有三个基本表:
商店SHOP(S#,SNAME,AREA,MGR_NAME)
其属性是商店编号,商店名称,区域名,经理姓名。
销售SALE(S#,G#,QUANTITY)
其属性是商店编号,商品编号,销售数量。
商品GOODS(G#,GNAME,PRICE)
其属性是商品编号,商品名称,单价。
36.试写出下列查询的关系代数表达式、元组表达式和关系逻辑规则:
检索销售“冰箱”的商店的编号和商店名称。
37.试写出上面第36题的SELECT语句表达形式。
并写出该查询的图示形式。
38.试写出下列操作的SQL语句:
从SALE表中,把“开开商店”中销售单价高于1000元的商品的销售元组全部删除。
39.写一个断言,要求区域名为“EAST”的商店里销售商品的单价不能低于100元。
40.试写出下列操作的SQL语句:
统计区域名为“EAST”的所有商店销售的每一种商品的总数量和总价值。
要求显示(G#,GNAME,SUM_QUANTITY,SUM_VALUE),其属性为商品编号、商品名称、销售数量、销售价值。
37.解:
SELECT语句如下:
SELECTA.S#,SNAME
FROMSHOPA,SALEB,GOODSC
WHEREA.S#=B.S#ANDB.G#=C.G#ANDGNAME='冰箱';
38.解:
DELETEFROMSALE
WHERES#IN(SELECTS#
FROMSHOP
WHERESNAME='开开商店')
ANDG#IN(SELECTG#
FROMGOODS
WHEREPRICE>1000);
39.解:
CREATEASSERTIONASSE8CHECK
(100<=ALL(SELECTPRICE
FROMSHOPA,SALEB,GOODSC
WHEREA.S#=B.S#ANDB.G#=C.G#ANDAREA='EAST'));
或CREATEASSERTIONASSE8CHECK
(NOTEXISTS(SELECT*
FROMSHOPA,SALEB,GOODSC
WHEREA.S#=B.S#ANDB.G#=C.G#
ANDAREA='EAST'ANDPRICE<100));
40.解:
SELECTC.G#,GNAME,SUM(QUANTITY)ASSUM_QUANTITY,
PRICE*SUM(QUANTITY)ASSUM_VALUE
FROMSHOPA,SALEB,GOODSC
WHEREA.S#=B.S#ANDB.G#=C.G#ANDAREA='EAST'
GROUPBYC.G#,GNAME;
(注:
SELECT子句中的属性C.G#,GNAME应在分组子句中出现)
36.设数据库中有两个基本表:
职工表EMP(E#,ENAME,AGE,SALARY,D#),
其属性分别表示职工工号、姓名、年龄、工资和工作部门的编号。
部门表DEPT(D#,DNAME,MGR#),
其属性分别表示部门编号、部门名称和部门经理的职工工号。
试指出每个表的主键和外键。
并写出每个表创建语句中的外键子句。
37.在第36题的两个基本表中,写出下列查询的关系代数表达式和SQL语句:
检索每个部门经理的工资,要求显示其部门编号、部门名称、经理工号、经理姓名和经理工资。
36.答:
EMP表的主键为E#,外键为D#。
DEPT表的主键为D#,外键为MGR#
在EMP表的创建语句中,可写一个外键子句:
FOREIGNKEYD#REFERENCESDEPT(D#);
在DEPT表的创建语句中,可写一个外键子句:
FOREIGNKEYMGR#REFERENCESEMP(E#);
MGR#=E#
37.答:
关系表达式为:
πDEPT.D#,DNAME,MGR#,ENAME,SALARY(DEPT⋈EMP)
SELECT语句为:
SELECTDEPT.D#,DNAME,MGR#,ENAME,SALARY
FROMDEPT,EMP
WHEREMGR#=E#;
31.设某商业集团为仓库存储商品设计了三个基本表:
仓库STORE(S#,SNAME,SADDR),其属性是仓库编号、仓库名称和地址。
存储SG(S#,G#,QUANTITY),其属性是仓库编号、商品编号和数量。
商品GOODS(G#,GNAME,PRICE),其属性是商品编号、商品名称和单价
现检索仓库名称为“莘庄”的仓库里存储的商品的编号和名称。
试写出相应的关系代数表达式、元组表达式、关系逻辑规则和SELECT语句。
32.在第31题的基本表中,检索存储全部种类商品的仓库的编号及名称。
试写出相应的关系代数表达式、元组表达式、关系逻辑规则和SELECT语句。
33.在第31题的基本表中,检索每个仓库存储商品的总价值。
试写出相应的SELECT语句。
要求显示(S#,SUM_VALUE),其属性为仓库编号及该库存储商品的总价值。
34.在第31题的基本表中,写一个断言,规定每个仓库存储商品的单价为1万元以上的商品种类最多为20种。
31.解:
关系代数表达式为:
πG#,GNAME(σSNAME='莘庄'(STORE⋈SG⋈GOODS))
元组表达式为:
{t|(u)(v)(w)(GOODS(u)∧SG(v)∧STORE(w)
∧u[1]=v[2]∧v[1]=w[1]∧w[2]='莘庄'∧t[1]=u[1]∧t[2]=u[2])}
关系逻辑规则如下:
W(x,y)GOODS(x,y,a)∧SG(b,x,c)∧STORE(b,'莘庄',d)
SELECT语句为:
SELECTA.G#,GNAME
FROMGOODSASA,SGASB,STOREASC
WHEREA.G#=B.G#ANDB.S#=C.S#ANDSNAME='莘庄';
32.解:
关系代数表达式为:
πS#,SNAME(STORE⋈(πS#,G#(SG)÷πG#(GOODS)))
元组表达式为:
{t|(u)(v)(w)(STORE(u)∧GOODS(v)∧SG(w)∧w[1]=u[1]∧w[2]=v[1]∧t[1]=u[1]∧t[2]=u[2])}
关系逻辑规则如下:
W(x,y)←STORE(x,y,a)∧┐GOODS(b,c,d)∧┐SG(x,b,e)
SELECT语句为:
SELECTS#,SNAME
FROMSTORE
WHERENOTEXISTS
(SELECT*
FROMGOODS
WHERENOTEXISTS
(SELECT*
FROMSG
WHERESG.S#=STORE.S#
ANDSG.G#=GOODS.G#));
33.解:
SELECT语句为:
SELECTS#,SUM(QUANTITY*PRICE)ASSUM_VALUE
FROMSG,GOODS
WHERESG.G#=GOODS.G#
GROUPBYS#;
34.解:
CREATEASSERTIONASSE6CHECK
(20>=ALL(SELECTCOUNT(SG.G#)
FROMSG,GOODS
WHERESG.G#=GOODS.G#ANDPRICE>10000
GROUPBYS#));
现有关系数据库如下:
部门(部门编号,部门名称,电话)
员工(员工编号,姓名,性别,部门编号,职务)
项目(项目编号,项目名称,预算)
施工(员工编号,项目编号,工时)
用关系代数表达式实现下列1—2小题:
1.检索“王小毛”的员工的部门编号和职务;
2.检索工时超过100小时的项目名称和员工的姓名;
用SQL语言实现下列3—7小题:
3.查询每个员工的姓名,并按职称降序排列;
4.查询总工时在480小时以上(含480小时)的员工编号和总工时;
5.检索职称为“高级工程师”,同时至少参加了一预算在100万以上的项目的员工的姓名和部门名称;
6.定义一个工作量视图,包含的属性有员工编号、姓名、项目名称和工时。
7.对项目名称为“高教新区项目”的施工工时增加50小时;
1.π部门编号,职务(σ姓名=‘王小毛’(员工))
2.π项目名称,姓名(σ工时)100(施工)
项目
员工))
3.SELECT姓名FROM员工ORDERBY职称DESC
4.SELECT员工编号,SUM(工时)FROM施工
GROUPBY员工编号HAVINGSUM(工时)>=480
5.SELECT姓名,部门名称
FROM员工,部门,项目,施工
WHERE部门.部门编号=员工.部门编号AND员工.员工编号=施工.员工编号
AND施工.项目编号=项目.项目编号AND职称=‘高级工程师’AND预算>1000000
6.CREATEVIEW工作量(员工编号,姓名,项目名称,工时)
ASSELECT员工.员工编号,姓名,项目名称,工时
FROM员工,项目,施工
WHERE员工.员工编号=施工.员工编号AND施工.项目编号=项目.项目编号
7.UPDATE施工SET工时=工时+50WHERE项目编号IN
(SELECT项目编号FROM项目WHERE项目名称=‘高教新区项目’)
37.图书出版管理数据库中有两个基本表:
图书(书号,书名,作者编号,出版社,出版日期)
作者(作者编号,作者名,年龄,地址)
试用SQL语句写出下列查询:
检索年龄低于作者平均年龄的所有作者的作者名、书名和出版社。
39.学校有多名学生,财务处每年要收一次学费。
为财务处收学费工作设计一个数据库,包括两个关系:
学生(学号,姓名,专业,入学日期)
收费(学年,学号,学费,书费,总金额)
假设规定属性的类型:
学费、书费、总金额为数值型数据;学号、姓名、学年、专业为字符型数据;入学日期为日期型数据。
列的宽度自定义。
试用SQL语句定义上述表的结构。
(定义中应包括主键子句和外键子句)
37.SELECT作者名,书名,出版社FROM图书,作者WHERE图书.作者编号=作者.作者编号AND年龄<=(SELECTAVG(年龄)FROM作者);
39.CREATETABLE学生
(学号CHAR(8),姓名CHAR(8),专业CHAR(13),入学日期DATE,PRIMARYKEY(学号));
CREATETABLE收费
(学年CHAR(10),学号CHAR(8),学费NUMERIC(4),书费NUMERIC(5,2),总金额NUMERIC(7,2),PRIMARYKEY(学年,学号),FOREIGNKEY(学号)REFERENCES学生(学号));
现有关系数据库如下:
学生(学号,姓名,性别,专业,奖学金)课程(课程号,名称,学分)学习(学号,课程号,分数)
5.检索不学课程号为“C135”课程的学生信息,包括学号,姓名和专业;
6.检索至少学过课程号为“C135”和“C219”的学生信息,包括学号、姓名和专业;
7.从学生表中删除成绩出现过0分的所有学生信息;
8.定义“英语”专业学生所学课程的信息视图AAA,包括学号、姓名、课程号和分数。
5.SELECT学号,姓名,专业
FROM学生WHERE学号NOTIN(SELECT学号FROM学习WHERE课程号='C135')
6.SELECT学号,姓名,专业FROM学生WHERE学号IN(SELECTX.学号
FROM学习 X,学习YWHEREX.学号=Y.学号ANDX.课程号='C135'ANDY.课程号=’C219’)
7.DELETEFROM学生WHERE学号IN(SELECT学号FROM学习WHERE分数=0)
8.CREATEVIEWAAA(学号,姓名,课程号,分数)ASSELECT学号,姓名,课程号,分数FROM学生,学习WHERE学生.学号=学习.学号AND专业=’英语’
1.用SQL的有关语句定义
1)学生关系Student,包括学号Sno、姓名SN、年龄SA;
2)课程关系Course,包括课程号Cno、课程名CN、任课教师CT;
3)学生选课关系,包括Sno、Cno和成绩G。
注意:
说明主键码和外键码(如果有的话),并在键码属性上建立索引。
(12分)
2.按题1的学生关系模式,用SQL的有关语句
1)授予赵华对学生关系Student的插入和修改权限;
2)插入任意3个学生的完整信息;
3)修改所有学生的年龄(加1)。
(12分)
3.结合题1定义的学生选课数据库,用SQL语句查询计算机系学生数据库课的成绩,输出学生姓名和成绩,按成绩排序(降序),若成绩相同,再按学号排序(升序)。
(6分)
1.1)CREATETABLEStudent(
SnoINTPRIMARYKEY,
SNCHAR(30),
SAINT
);
2)CREATETABELCourse(
CnoINTPRIMARYKEY,
CNCHAR(30),
CTCHAR(30)
);
3)CREATETABELSC(
SnoINT,
CnoINT,
GINT,
PRIMAYRKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
);
2.1)GRANTINSERT,UPDATE,ONStudentTO赵华;
2)INSERTINTOStudent
(TABLE(01001,’赵华’,19),
(01002,’李芳’,18),
(01003,’刘红’,20),
);
3)UPDATEStudentSETSA=SA+1;
3.SELECTSN,GFROMStudent,Course,SC
WHEREStudent.Sno=SC.SnoANDCourse.Cno=SC.Cno
ANDCourse.CN=’数据库’ORDERBYGDESC,Sno;
2000011
李刚
男
22
计算机
课程表Course
Cno
Cname
Cpno
Ccredit
1024
数据库原理
1136
4
1136
离散数学
1128
4
1137
管理学
4
1156
英语
6
1128
高等数学
6
1111
体育
3
学生选课表SC
Sno
Cno
Grade
2000012
1156
80
2000113
1156
89
2000256
1156
93
2000014
1156
88
2000256
1137
77
2000278
1137
89
2000012
1024
80
2000014
1136
90
2000012
1136
78
2000012
1137
70
2000014
1024
88
成绩类别表
type
Lowest_grade
Highest_grade
优秀
85
100
良
75
84
及格
60
74
不及格
0
59
第一章课件:
编写基本的SQL语句。
1.查询所有学生情况。
2.Select*fromstudent;
3.查询所有学生的姓名,性别以及年龄。
4.Selectsname,ssex,sagefromstudent;
5.查询所有学生10年后的年龄。
6.Selectsage+1010年后fromstudent;
7.查询所有课程(列名用中文显示)。
8.Selectcname课程名fromcourse;
9.查看竟有那些学生选课(重复学号显示一次)。
10.Selectdistinctsnofromcoursewherecnoisnotnull;
11.显示课程表的边结构。
12.Desccourse;
第二章课件:
约束和排序数据。
01.查询计算机系的所有学生的姓名和年龄。
Selectsname,sagefromstudentwheresdept=’计算机’;
02.查询体育课的学分。
Selectccreditfromcoursewherecname=’体育’;
03.查询年龄小于18的学生。
Select*fromstudentwheresage<18;
04.查询年龄大于20的学生。
Select*fromstudentwheresage>20;
05.查询年龄介于18和20之间的学生(包括18和20)。
Select*fromstudentwheresagebetween18and20;
06.查询年龄不在18和20之间的学生。
Select*fromstudentwheresagenotbetween18and20
07.查询年龄为18,20,22的学生。
Select*fromstudentwheresagein(18,20,22);
08.查询年龄不是18,20,22的学生。
Select*fromstudentwheresagenotin(18,20,22);
09.查询所有姓张的学生。
Select*fromstudentwheresnamelike‘张%’
10.查询所有没有先行课的课程。
Selectcnamefromcoursewherecpnoisnull;
11.查询有先行课的课程。
Selectcnamefromcoursewherecpnoisnotnull;
12.在计算机系中找,姓张的男生。
Select*fromstudentwheresnamelike‘张%’andcdept=’计算机’
13.在计算机系中找,姓张的或者姓李的男生并且按照年龄从大到小排序。
Selectsname,ssex,sage,sdeptfromstudentwheresnamelike'张%'orsnamelike'李%'orderbysagedesc;
14.查询所有学生信息,显示结果先按系从大到小排序,再按年龄排序。
Select*fromstidentorderbysdeptdesc,sagedesc;
第三章课件:
多表查询
1.查询每个学生(学号)选了哪门课(课程)得了多少分?
Selectsc.sno,ame,sc.gradefromsc,coursecwhereo=o;
2.查询每个学生(姓名)选了哪门课(课程号)得了多少分?
selects.aname,o,sc.gradefromsc,coursec,studentswhereo=oands.sno=sc.sno;
3.查询每个学生(姓名)选了哪门课(课程名)得了多少分?
selects.aname,ame,sc.gradefromsc,coursec,studentswhereo=oands.sno=sc.sno;
4.查询一下王林选可哪门课得了多少分。
selects.aname,ame,sc.gradefromsc,coursec,studentswhereo=oands.sno=sc.snowheres.sname=‘王林’;
5.查询每个学生的成绩类别(优、良还是及格)。
Selectsc.sno,type.typefromsc,typewheresc.gradebetweenLowest_gradeandHighest_grade;
6.查询哪个学生没有选课(用外查询)。
selects.snofromstudentswheres.snonotin(selectsnofromscwheregrade!
=0);
7.查询哪门课没有人选(用外查询)。
selectofromcoursecwhereonotin(selectcnofromscwheregrade!
=0);
第四章课件:
组函数
1.查询一下所有课程的平均分,最高分,最低分和总分数。
Selectavg(grade),max(grade),min(grade),sum(grade)fromsc;
2.查询一下有多少个学生参加选课。
Selectcount(grade)from(selectdistinctsnofromsc);
3.查询一下计算机系有多少人过20岁。
Selectcount(sname)from(Selectsnamefromstudentwheresage>20andsdept=’计算机’);
4.统计一下计算机系的男生多少人。
Selectcount(sname)from(Selectsnamefromstudentwheressex=’男’andsdept=’计算机’);
5.查询一下每个学生考试的最高分和最低分。
Selectsno,max(grade),min(grade)fromscgroupbysno;
6.查询每门课(课程号)的最高分和最底分。
Selectcno,max(grade),min(grade)fromscgroupbycno;
7.查询每门课(课程名)的最高分和最底分。
Selectcname,max(hgrade),min(lgrade)fromcoursec,(Selectcno,max(grade)hgrade,min(grade)lgradefromscgroupbycno)awhereo=ogroupbycname;
8.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL 语句 习题 汇总