S(SNO, SNAME, AGE, SEX,Sdept)
1、查询学号为S3学生所学课程的课程名与任课教师名。
2、查询至少选修LIU老师所教课程中一门课的女生姓名。
5、查询选修课程中包含LIU老师所教全部课程的学生学号。
提示:根据学号分组,就得到每个学生所有的课程成绩,在某个学生这一组成绩里,如果他所有的课程成绩都大于60分则输出该组学生的学号
Select sno frome sc group by sno having(min(grade)>=60)
2、查询既有课程大于90分又有课程不及格的学生的学号
Select sno from sc where grade >90 and sno in (select sno from sc where grade<60)
Select cno , avg(GRADE) from sc group by cno having avg(grade)<60
Select C.cno , Cname from SC,C where C.cno=SC.cno group by C.cno having avg(grade)>=60
提示:不存在这样的课程y,学生2选修了y,而学生x没有选。
SELECT DISTINCT Sno
FROM SC as SCX
WHERE NOT EXISTS
(SELECT *
FROM SC as SCY
WHERE SCY.Sno =‘2’AND NOT EXISTS
(SELECT *
FROM SC SCZ
WHERE SCZ.Sno=SCX.Sno AND SCZ.Cno=SCY.Cno))
第一步,求所有成绩的平均分(去掉一个最高分和最低分)
select avg(GRADE) from SC
where GRADE not in (select top 1 GRADE from SC order by GRADE)
and GRADE not in (select top 1 GRADE from SC order by GRADE desc)
SELECT CNO avg(GRADE) from SC
where GRADE not in (select top 1 GRADE from SC order by GRADE)
and GRADE not in (select top 1 GRADE from SC order by GRADE desc) group by CNO
Select sno fromsc where cno='7' and grade is null
2、查询7号课程成绩在90分以上或60分以下的学生学号。
Select sno from sc where cno='7' and grade not between 60and 9
3、查询课程名以“数据”两个字开头的所有课程的课程号和课程名。
Select cno,cname from c where cname like '数据%'
4、查询每个学生所有课程的平均成绩,输出学生学号和平均成绩。
Select sno,avg(grade)from sc group by sno
5、查询每门课程的选修人数,输出课程号和选修人数。
Selectcno,count(*) from sc group by cno
Selects.sno,sname,ssex from s,sc where s.sno=sc.sno and cno='7'
Select sno,sname,ssex from s where sno in
( Select sno from sc where cno='7' )
Selectavg(sage) from s,sc where s.sno=sc.sno and cno='7'
Select avg(sage) from s where sno in
(Select sno from sc where cno='7' )
Select cno fromsc group by cno having count(*)>30
Select distinctsno from sc where sno not in
( Select sno from sc where grade<60 )
Select sno from sc group by sno havingmin(grade)>=60
Select sno,grade from sc where cno='C2'
Selects.sno,sname from s,sc where s.sno=sc.sno and cno='C4'
思考本题改为“找出选修课程号为C4的学生学号、姓名与成绩”后还能用嵌套做吗?
3、找出选修课程名为 Maths 的学生学号与姓名。
Selects.sno,sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno andcname='Maths'
Select distinctsno from sc where cno in ('C2','C4')
Select distinct sno from sc where cno='C2' or cno='C4'
Select sno fromsc where cno='C2' and sno in
( Select sno from sc where cno='C4' )
Select distinct sno from sc where cno=‘C2’ andcno='C4’正确吗?
Selectsname,sage from s where sno not in
( Selectsno from sc where cno='C2'
Select sname,sage from s where not exists
(Select * from sc where sno=s.sno and cno='C2' )
Select snamefrom s,sc,c
where s.sno=sc.snoand c.cno=sc.cno and cname='数据库'
连接:Select sname from s,sc,c
where s.sno=sc.sno andc.cno=sc.cno and cname='数据库'
and grade<60 and ssex='女'
嵌套:Select sname from s where ssex='女' and sno in
(Select sno from sc where grade<60 and cno in
( Select cno from c where cname='数据库' )
)
9、找出各门课程的平均成绩,输出课程名和平均成绩。
Selectcname,avg(grade) from sc,c
wherec.cno=sc.cno group by c.cno,cname
10、找出各个学生的平均成绩,输出学生姓名和平均成绩。
Selectsname,avg(grade) from s,sc
wheres.sno=sc.sno group by s.sno,sname
Select cnamefrom c where cno in
( Selectcno from sc group by cno having count(*)>=30 )
Select snamefrom s where sno in
( Selectsno from sc group by sno having count(*)>=3 )
13、找出各门课程的成绩均不低于90分的学生姓名。
Select snamefrom s,sc where s.sno=sc.sno
group bys.sno,sname having min(grade)>=90
Select sname from s where sno not in
( Selectsno from sc where grade<90 )
14、找出数据库课程成绩不低于该门课程平均分的学生姓名。
Select snamefrom s,sc,c
where s.sno=sc.sno and sc.cno=c.cno and cname='数据库' and grade>
( Selectavg(grade) from sc,c
where sc.cno=c.cnoand cname='数据库'
)
Selectsdept,ssex,avg(sage),count(*) from s group by sdept,ssex
16、找出计算机系(JSJ)课程平均分最高的学生学号和姓名。
Selects.sno,sname from s,sc where s.sno=sc.sno and sdept='JSJ'
group bys.sno,sname
havingavg(grade) >=ALL
( Selectavg(grade) from s,sc
wheres.sno=sc.sno and sdept='JSJ'
group bys.sno
)
createview v_all(cno,cnt)
as selectcno, count(*) from sc group by cno
createview v_pass(cno,cnt_pass)
as selectcno, count(*) from sc where grade>=60 group by cno
selectv_all.cno, cnt_pass*100/cnt from v_all, v_pass
where v_all.cno = v_pass.cno
18、查询平均分不及格的学生的学号,姓名,平均分。
Selectsc.sno,sname,avg(grade) from student,sc
wherestudent.sno=sc.sno
group bysc.sno,sname
havingavg(grade)<60
Select count(*)from student
where sno in
( selectsno from sc group by sno having avg(grade)<60 )
Select count(*) from sc group by sno havingavg(grade)<60
1、查询工资在1000到3000元之间的男性业务员的姓名和办公室编号。
SelectYname,Ono from YWY
where Salarybetween 1000 and 3000 and Ysex='男'
2、查询各个办公室的业务员人数,输出办公室编号和对应的人数。
SelectOno,count(*) from YWY group by Ono
3、查询每个客户在2002年5月购买的总金额,输出客户号和相应的总金额。
SelectKno,sum(Fmoney) from FP
where Fdatebetween '2002.5.1' and '2002.5.31'
group by Kno
4、查询2002年5月购买次数超过5次的所有客户号,且按客户号升序排序。
Select Kno fromFP
where Fdatebetween '2002.5.1' and '2002.5.31'
group by Kno
havingcount(*)>5
order by KnoASC
SelectOno,Ysex,avg(Salary) from YWY group by Ono,Ysex
6、查询2002年5月曾经在王海亮业务员手中购买过商品的客户号、 客户姓名和联系电话。
SelectKno,Kname,Phone from KH where Kno in
( SelectKno from FP
whereFdate between '2002.5.1' and '2002.5.31' and Yno in
( Select Yno from YWY where Yname='王海亮' )
)
7、查询所有工资比1538号业务员高的业务员的编号、姓名和工资。
SelectYno,Yname,Salary from YWY where Salary >
( SelectSalary from YWY where Yno='1538' )
8、查询所有与1538号业务员在同一个办公室的其他业务员的编号和姓名。
SelectYno,Yname from YWY where Yno!='1538' and Ono in
( SelectOno from YWY where Yno='1538' )
Select Yno fromFP group by Yno having sum(Fmoney) >=ALL
( Selectsum(Fmoney) from FP group by Yno )
10、查询所有业务员的编号、姓名、工资以及工资比他高的其他业务员的平均工资。
SelectY1.Yno,Y1.Yname,Y1.Salary,avg(Y2.Salary)
from YWY Y1, YWY Y2
where Y1.Salary < Y2.Salary
group by Y1.Yno
SelectBJDM,count(*),avg(CJ) from SC group by BJDM
2、找出每个学生的班级代码、学生姓名、考试科目数、总成绩。
SelectBJDM,XSXM,count(*),sum(CJ) from SC
group byBJDM,BNXH,XSXM
3、输出一张表格,每位学生对应一条记录,包括字段:班级代码、学生姓名、语文成绩、数学成绩、外语成绩。
SelectSC1.BJDM,SC1.XSXM,SC1.CJ,SC2.CJ,SC3.CJ
from SC SC1, SC SC2, SC SC3
whereSC1.BJDM=SC2.BJDM and SC1.BNXH=SC2.BNXH and
SC2.BJDM=SC3.BJDM and SC2.BNXH=SC3.BNXH and
SC1.KM='语文' and SC2.KM='数学' and SC3.KM='外语'
4、输出一张表格,有成绩低于60分的每位学生对应一条记录,包括字段:班级代码、学生姓名、最低成绩。
SelectBJDM,XSXM,min(CJ) from SC
where CJ<60 group by BJDM,BNXH,XSXM
或: SelectBJDM,XSXM,min(CJ) from SC
group byBJDM,BNXH,XSXM
havingmin(CJ)<60
5、输出一张表格,有成绩低于60分的每位学生对应一条记录,包括字段: 班级代码、学生姓名、最高成绩、平均成绩。
SelectBJDM,XSXM,max(CJ) from SC
group byBJDM,BNXH,XSXM
havingmin(CJ)<60
SelectBJDM,XSXM,max(CJ),avg(CJ) from SC
where CJ<60 group byBJDM,BNXH,XSXM
6、输出一张表格,所有成绩都不低于60分的每位学生对应一条记录,包括字段:班级代码、学生姓名、平均成绩。
SelectBJDM,XSXM,avg(CJ) from SC
group by BJDM,BNXH,XSXM
havingmin(CJ)>=60
7、输出一张表格,每一位学生对应一条记录,包括字段:班级代码、学生姓名、去掉一个最低分后的平均成绩。
SelectBJDM,XSXM,(sum(CJ)-min(CJ))/(count(*)-1) from SC
group byBJDM,BNXH,XSXM
8、输出一张表格,每门科目对应一条记录,包括字段: 科目、去掉一个最低分后的平均成绩。
Select KM,(sum(CJ)-min(CJ))/(count(*)-1)from SC
group by KM
1、查询年龄在19至21岁之间的女生的学号,姓名,年龄,按年龄从大到小排列。
Selectsno,sname,sage from student
where sagebetween 19 and 21 and ssex='女'
order by sagedesc
Select count(*)from student
where snamelike "%明%"
Select sno fromsc where cno='1001' and grade is null
4、查询JSJ、SX、WL系的学生学号,姓名,结果按系及学号排列。
Selectsno,sname,sdept from student
where sdept in( 'JSJ', 'SX', 'WL' )
order bysdept,sno
Selectcno,sum(grade),avg(grade),max(grade),min(grade)
from sc
group by cno
selectsc.sno,avg(grade) from student,sc
wherestudent.sno=sc.sno and ssex=’男’
group by sc.sno
havingavg(grade)>90
selectsno,avg(grade) from sc
where sno in (select sno from student where ssex='男')
group by sno
havingavg(grade)>90
select snamefrom student,sc
where student.sno=sc.sno
group bysc.sno,sname
havingcount(*)>2
Select distinctcno from student,sc
where student.sno=sc.sno and sdept='JSJ'
9、查询选修1002课程的学生的学生姓名(用连接和嵌套2种方法)
连接:Select sname from student,sc
wherestudent.sno=sc.sno and cno='1002'
嵌套:Select sname from student where sno in
(select sno from sc where cno='1002' )
Selectsname,cno,grade from student,sc
wherestudent.sno=sc.sno
11、查询选修“数据库原理”课且成绩 80 以上的学生姓名(用连接和嵌套2种方法)
连接:Select sname from student,sc,course
wherestudent.sno=sc.sno and sc.cno=course.cno and
cname='数据库原理' and grade>80
嵌套:Select sname from student where sno in
(select sno from sc where grade>80 and cno in
( select cno from course where cname='数据库原理' )
)
Select snamefrom student
where sno notin ( select sno from sc where cno='1002')
或: select sname from student
where notexists
(select * from sc where cno='1002' and sno=student.sno)
Selectsno,avg(grade)
from sc
group by sno
havingavg(grade) >=ALL ( Select avg(grade)
from sc
group by sno
)
16、查询每门课程成绩都高于该门课程平均分的学生学号。
create viewc_avg(cno,avg_grade)
as selectcno,avg(grade) from sc group by cno
再查询
Select distinctsno from sc
where sno notin ( Select sno from sc,c_avg
where sc.cno=c_avg.cno and grade<avg_grade
)
===========================================
SELECT DISTINCT Sno
FROM SC SC1
WHERE SC1.SnoNOT IN
( SELECT SC2.Sno
FROM SC SC2
WHERE SC2.Grade <=
( SELECT AVG(SC3.Grade)
FROM SC SC3
WHERE SC3.Cno=SC2.Cno
)
)
SELECT DISTINCTSno
FROM SC SC1
WHERE NOTEXISTS
(SELECT *
FROM SC SC2
WHERE SC2.Sno=SC1.Sno AND SC2.Grade <=
(SELECT AVG(SC3.Grade)
FROM SC SC3
WHERE SC3.Cno=SC2.Cno
)
)
(3)检索至少选修LIU老师所授课程中一门课程的女学生姓名。
SELECT SNAME
FROM S
WHERE SEX=‘F’ AND S
SELECT SNAME
FROM S,SC,C
WHERE SEX=‘F’ AND SC.S
SELECT DISTINCT X.SNO
FROM SC X,SC Y
WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO
Notice:对表SC进行自连接,X,Y是SC的两个别名。
要从语义上分解:(1)选择课程的课程号与课程名,不存在不选这门课的同学。
SELECT *
FROM S
WHERE NOT EXISTS
(SELECT *
FROM SC
WHERE S.S
(7)检索选修课程包含LIU老师所授课的学生学号。
3.3 设有两个基本表R(A,B,C)和S(D,E,F),试用SQL查询语句表达下列关系代数表达式:
(1)πA?(2)σB='17’?(3)R×S(4))πA,F(σC=D(R×S))
(2)SELECT * FROM R WHERE B=‘17’
(3)SELECT A,B,C,D,E,F FROM R,S
(4)SELECT A,F FROM R,S WHERE R.C=S.D
3.43.4 设有两个基本表R(A,B,C)和S(A,B,C)试用SQL查询语句表达下列关系代数表达式:
(1)R∪S (2)R∩S (3)R-S (4)πA,B?πB,C(S)
SELECT A,B,C
FROM R
UNION
SELECT A,B,C
FROM S
SELECT A,B,C
FROM R
INTERSECT
SELECT A,B,C
FROM S
SELECT A,B,C
FROM R
WHERE NOT EXISTS
(SELECT A,B,C
FROM S
WHERE R.A=S.A AND R.B=S.B AND R.C=S.C)
SELECT R.A,R.B,S.C
FROM R,S
WHERE R.B=S.B
3.5 试叙述SQL语言的关系代数特点和元组演算特点。
3.6 试用SQL查询语句表达下列对教学数据库中三个基本表S、SC、C的查询:
SELECT AVG(AGE)
FROM S
WHERE S
SELECT AVG(AGE)
FROM S,SC
WHERE S.S
(3)求LIU老师所授课程的每门课程的学生平均成绩。
SELECT CNAME,AVG(GRADE)
FROM SC ,C
WHERE SC.C
(4)统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列。
(5)检索学号比WANG同学大,而年龄比他小的学生姓名。
SELECT X.SNAME
FROM S AS X, S AS Y
WHERE Y.SNAME='WANG' AND X.S
(6)检索姓名以WANG打头的所有学生的姓名和年龄。
SELECT SNAME,AGE
FROM S
WHERE SNAME LIKE 'WANG%'
(8)求年龄大于女同学平均年龄的男学生姓名和年龄。
SELECT SNAME,AGE
FROM S AS X
WHERE X.SEX='男' AND X.AGE>(SELECT AVG(AGE)FROM S AS Y WHERE Y.SEX='女')
(9)求年龄大于所有女同学年龄的男学生姓名和年龄。
SELECT SNAME,AGE
FROM S AS X
WHERE X.SEX='男' AND X.AGE>ALL (SELECT AGE FROM S AS Y WHERE Y.SEX='女')
3.7 试用SQL更新语句表达对教学数据库中三个基本表S、SC、C的各个更新操作:
(1)往基本表S中插入一个学生元组(‘S9’,‘WU’,18)。
(2)在基本表S中检索每一门课程成绩都大于等于80分的学生学号、姓名和性别,并把检索到的值送往另一个已存在的基本表STUDENT(S#,SANME,SEX)。
DELETE FROM SC
WHERE GRADE IS NULL
UPDATE SC
SET GRADE=NULL
WHERE GRADE<60 AND C
UPDATE SC
SET GRADE=GRADE*1.05
WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S
(7)在基本表SC中修改C4课程的成绩,若成绩小于等于75分时提高5%,若成绩大于75分时提高4%(用两个UPDATE语句实现)。
UPDATE SC
SET GRADE=GRADE*1.05
WHERE C
零件 PART(P#,PNAME,COLOR,WEIGHT)
项目 PROJECT(J#,JNAME,DATE)
供应商 SUPPLIER(S#,SNAME,SADDR)
(1)试用SQLDDL语句定义上述五个基本表,并说明主键和外键。
(2)试将PROGECT、P_P、PART三个基本表的自然联接定义为一个视图VIEW1,PART、P_S、SUPPLIER 三个基本表的自然联接定义为一个视图VIEW2。
3.9 对于教学数据库中基本表SC,已建立下列视图:
CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE)
FROMSC
GROUPBYS#
试判断下列查询和更新是否允许执行。若允许,写出转换到基本表SC上的相应操作。
SELECT*
FROMS_GRADE
允许
SELECT S
SELECTS#,C_NUM
FROMS_GRADE
WHEREAVG_GRADE>80
允许
SELECT S
SELECTS#,AVG_GRADE
FROMS_GRADE
WHEREC_NUM>(SELECTC_NUM
FROMS_GRADE
WHERES#=‘S4’)
允许
SELECT S
UPDATES_GRADE
SETC_NUM=C_NUM+1
WHERES#=‘S4’
不允许
DELETEFROMS_GRADE
WHEREC_NUM>4
不允许
3.10 预处理方式对于嵌入式SQL的实现有什么重要意义?
预处理方式是先用预处理程序对源程序进行扫描,识别出SQL语句,并处理成宿主语言的函数调用形式; 然后再用宿主语言的编译程序把源程序编译成目标程序。这样,不用扩充宿主语言的编译程序, 就能处理SQL语句。
3.11 在宿主语言的程序中使用SQL语句有哪些规定?
(2)允许嵌入的SQL语句引用宿主语言的程序变量(称为共享变量),但有两条规定:
1)引用时,这些变量前必须加“:”作为前缀标识,以示与数据库中变量有区别。
2)这些变量由宿主语言的程序定义,并用SQL的DECLARE语句说明。
(3)SQL的集合处理方式与宿主语言单记录处理方式之间要协调。 需要采用游标机制,把集合操作转换成单记录处理方式。
3.12SQL的集合处理方式与宿主语言单记录处理方式之间如何协调?
由于SQL语句处理的是记录集合,而宿主语言语句一次只能处理一个记录, 因此需要用游标(cousor)机制,把集合操作转换成单记录处理方式。
2.13 嵌入式SQL语句何时不必涉及到游标?何时必须涉及到游标?
(1)INSERT、DELETE、UPDATE语句,查询结果肯定是单元组时的SELECT语句, 都可直接嵌入在主程序中使用,不必涉及到游标。
(2)当SELECT语句查询结果是多个元组时,此时宿主语言程序无法使用, 一定要用游标机制把多个元组一次一个地传送给宿主语言处理。
1.在Access数据库中,数据保存在( )对象中。
2.如果某一字段数据型为文本型,字段大小为8,该字段中最多可输入( )个汉字。
6.在设计Access数据表时,“索引”属性有( )取值。
8.在一个宏中要打开一个报表,应该使用的操作是( )。
A.OpenForm B.OpenReport C.OpenTable D.OpenQuery
9.可以通过Internet进行数据发布的对象是( )。
1.在人工管理和文件管理阶段,程序设计__依赖于 ___数据表示。
2.在文件系统中,存取数据的基本单位为___记录____,在数据库系统中,存取数据的基本单位为___数据项_____。
3.若实体A和B是多对多的联系,实体B和C是1对1的联系,则实体A和C是___多_____对___多_____的联系。
4.在一个关系中不允许出现重复的____元组____,也不允许出现具有相同名字的___属性_____。
5.数据库系统中的四类用户分别为____数据库管理员、数据库设计员、应用程序员、终端用户_____。
6.在存取数据库的数据的过程中,使用了两个数据缓冲区,分别为___系统_____缓冲区和____用户 ____缓冲区。
7.学生关系中的班级号属性与班级关系中的班级号主码属性相对应,则____班级号____为学生关系中的___外码___。
8.设一个关系A具有a1个属性和a2个元组,关系B具有b1个属性和b2个元组,则关系A′B具有___a1+b1____个属性和____ a2′b2 ____个元组。
9.设一个学生关系为S(学生号,姓名),课程关系为C(课程号,课程名),选课关系为X(学生号,课程号,成绩),求出所有选课的学生信息的运算表达式为_____?学生号(X)______与____S ____的自然连接。
10.在一个关系R中,若存在X→Y和X→Z,则存在_____ X→(Y,Z)_______,称此为函数依赖的合并性规则。
1.若一个关系的任何非主属性都不部分依赖依赖于任何候选码,则称该关系达到____第二____范式。
2.在SQL中,列级完整性约束分为__6__种情况,表级完整性约束分为__4__种情况。
-
在SQL中,每个视图中的列可以来自不同的___表___,它是在原有表的基础上____建立____的逻辑意义上的新关系。
-
在SQL的查询语句中,group by选项实现____分组统计______功能,order by选项实现对结果表的____排序_____功能。
5.对于较复杂的系统,概念设计阶段的主要任务是:首先根据系统的各个局部应用画出各自对应的____局部ER图______,然后再进行综合和整体设计,画出_____整体ER图_____。
6.机器实现阶段的目标是在计算机系统中得到一个满足______设计要求、功能完善、操作方便___的数据库应用系统。
7.Access的用户操作界面由 标题栏、菜单栏、工作区 、工具栏、状态栏等五个部分组成。
8.Access“表”结构设计窗口中上半部分的“表设计器”是由 字段名称、数据类型、说明 等三列组成。
9.Access中的窗体由 页眉、主体 和页脚等三个部分组成。
- 设一个关系为R(A,B,C,D,E),它的最小函数依赖集为FD={A→B,A→C,(C,D)→E},则该关系的候选码为_____(A,D)___,候选码函数决定E是___伪传递___性。
2.设一个关系为R(A,B,C,D,E),它的最小函数依赖集为FD={A→B,A→C,(A,D)→E},该关系只满足___第一_____范式,若要规范化为高一级的范式,则将得到____2____个关系。
3.在实际的数据库管理系统中,对数据库的操作方式有_____命令交互、程序执行、窗口界面______等三种。
4.在SQL中,主码约束的关键字为____ primary key________,外码约束的关键字为______foreignkey ______。
5.基本表属于全局模式中的表,它是____实表____,而视图则属于局部模式中的表,它是____虚表 ____。
- 在SQL新版的查询语句中,select选项实现投影运算,from选项实现____连接____运算,where选项实现____选择___运算。
7.数据字典是对系统工作流程中____数据____和____处理____的描述。
8.关系数据库系统中的全局模式由若干个基本表所组成,表与表之间的联系是通过定义的____主码____和____外码____实现的。
9.在旅店管理中,涉及到的基本表有四个,它们分别为客房表、住宿表、_旅客登记表、消费卡表。
10.在设置或撤消数据库密码的过程中,密码对于字母 大小写 是敏感的。
1.Access的用户操作界面由 标题栏、菜单栏、工作区 、工具栏、状态栏等五个部分组成。
2.Access“表”结构设计窗口中上半部分的“表设计器”是由 字段名称、数据类型 和说明等三列组成。
3.Access中的窗体由 页眉、主体、页脚 等三个部分组成。
4.在Access中模块分为 类模块 和 标准模块 两种类型。
六、根据主教材第四章所给的商品库和教学库,或者按照下列所给的每条SQL查询语句写出相应的功能,或者按照下列所给的每种功能写出相应的SQL查询语句。(每小题4分,共20分)
在名称为商品库的数据库中包含有商品表1和商品表2,它们的定义分别为:
商品表1(商品代号 char(8),分类名 char(8),单价 float,数量 int)
商品表2(商品代号 char(8),产地 char(6),品牌 char(6),)
在名称为教学库的数据库中包含有学生、课程和选课三个表,它们的定义分别为:
学生(学生号 char(7),姓名 char(6),性别 char(2),出生日期 datetime,
课程(课程号 char(4),课程名 char(10),课程学分 int
选课(学生号 char(7),课程号 char(4),成绩 int)
1.select distinct 产地
from 商品表2
功能:从商品库中查询出所有商品的不同产地。
2.select *
from 学生
where 学生号 in (select 学生号
from 选课
group by 学生号 having count(*)=1
)
功能:从教学库中查询出只选修了一门课程的全部学生。
3.select *
from 学生
where 学生号 in (select 学生号
from 选课
group by 学生号 having count(*)<=2
) or not exists (select *
from 选课
where 学生.学生号=选课.学生号
)
功能: 从教学库中查询出最多选修了2门课程(含未选任何课程)的全部学生。
4.从商品库中查询出每类(即分类名相同)商品的最高单价。
select 分类名,max(单价) as 最高单价
from 商品表1
group by 分类名
5.从教学库中查询出至少选修了姓名为@m1学生所选课程中一门课的全部学生。
select distinct 学生.*
from 学生,选课
where 学生.学生号=选课.学生号 and 课程号=any(select 课程号
from 学生,选课
where 学生.学生号=选课.学生号 and 姓名=@m1
)
微信搜一搜**【程序员一凡】**关注这个文绉绉的程序员,关注后回复【面试】有我准备的一线大厂面试资料和简历模板,希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
如果对软件测试、接口、自动化、性能测试、测试开发、面试经验交流。感兴趣可以1079636098,群内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。