SQL语句习题汇总Word下载.docx
- 文档编号:3408157
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:17
- 大小:24.22KB
SQL语句习题汇总Word下载.docx
《SQL语句习题汇总Word下载.docx》由会员分享,可在线阅读,更多相关《SQL语句习题汇总Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
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='
ANDPRICE<
100));
40.解:
SELECTC.G#,GNAME,SUM(QUANTITY)ASSUM_QUANTITY,
PRICE*SUM(QUANTITY)ASSUM_VALUE
WHEREA.S#=B.S#ANDB.G#=C.G#ANDAREA='
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题的基本表中,检索存储全部种类商品的仓库的编号及名称。
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)
SELECTS#,SNAME
FROMSTORE
WHERENOTEXISTS
(SELECT*
FROMSG
WHERESG.S#=STORE.S#
ANDSG.G#=GOODS.G#));
33.解:
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.课程号='
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)。
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
离散数学
1128
1137
管理学
1156
英语
6
高等数学
1111
体育
3
学生选课表SC
Sno
Grade
2000012
80
2000113
89
2000256
93
2000014
88
77
2000278
90
78
70
成绩类别表
type
Lowest_grade
Highest_grade
优秀
85
100
良
75
84
及格
60
74
不及格
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!
第四章课件:
组函数
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 语句 习题 汇总
![提示](https://static.bingdoc.com/images/bang_tan.gif)