補充做業一python
設有三個關係:程序員
S(SNO, SNAME, AGE, SEX,Sdept)面試
SC(SNO, CNO, GRADE)數據庫
C(CNO, CNAME, TEACHER)微信
試用關係代數表達式表示下列查詢:數據庫設計
一、查詢學號爲S3學生所學課程的課程名與任課教師名。函數
二、查詢至少選修LIU老師所教課程中一門課的女生姓名。工具
三、查詢WANG同窗不學的課程的課程號。性能
四、查詢至少選修兩門課程的學生學號。學習
五、查詢選修課程中包含LIU老師所教所有課程的學生學號。
補充做業二
三個關係同上,試用SQL語言表示下列查詢:
一、 查詢門門課程都及格的學生的學號
方法1:
提示:根據學號分組,就獲得每一個學生全部的課程成績,在某個學生這一組成績裏,若是他全部的課程成績都大於60分則輸出該組學生的學號
Select sno frome sc group by sno having(min(grade)>=60)
二、查詢既有課程大於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
四、找出至少選修了2號學生選修過的所有課程的學生
提示:不存在這樣的課程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)
第二步,將全部成績按各門課程的課程號CNO分組
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
一、查詢7號課程沒有考試成績的學生學號。
Select sno fromsc where cno='7' and grade is null
二、查詢7號課程成績在90分以上或60分如下的學生學號。
Select sno from sc where cno='7' and grade not between 60and 9
三、查詢課程名以「數據」兩個字開頭的全部課程的課程號和課程名。
Select cno,cname from c where cname like '數據%'
四、查詢每一個學生全部課程的平均成績,輸出學生學號和平均成績。
Select sno,avg(grade)from sc group by sno
五、查詢每門課程的選修人數,輸出課程號和選修人數。
Selectcno,count(*) from sc group by cno
六、查詢選修7號課程的學生的學號、姓名、性別。
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' )
七、查詢選修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' )
八、查詢有30名以上學生選修的課程號。
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
補充三
一、找出選修課程號爲C2的學生學號與成績。
Select sno,grade from sc where cno='C2'
二、找出選修課程號爲C4的學生學號與姓名。
Selects.sno,sname from s,sc where s.sno=sc.sno and cno='C4'
注意本題也能夠用嵌套作
思考本題改成「找出選修課程號爲C4的學生學號、姓名與成績」後還能用嵌套作嗎?
三、找出選修課程名爲 Maths 的學生學號與姓名。
Selects.sno,sname from s,sc,c where s.sno=sc.sno and c.cno=sc.cno andcname='Maths'
注意本題也能夠用嵌套作
四、找出選修課程號爲C2或C4的學生學號。
Select distinctsno from sc where cno in ('C2','C4')
或:
Select distinct sno from sc where cno='C2' or cno='C4'
五、找出選修課程號爲C2和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’正確嗎?
六、找出不學C2課程的學生姓名和年齡。
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' )
七、找出選修了數據庫課程的全部學生姓名。(同3)
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='數據庫' ) )
九、找出各門課程的平均成績,輸出課程名和平均成績。
Selectcname,avg(grade) from sc,c wherec.cno=sc.cno group by c.cno,cname
思考本題也能夠用嵌套作嗎?
十、找出各個學生的平均成績,輸出學生姓名和平均成績。
Selectsname,avg(grade) from s,sc wheres.sno=sc.sno group by s.sno,sname
思考本題也能夠用嵌套作嗎?
十一、找出至少有30個學生選修的課程名。
Select cnamefrom c where cno in ( Selectcno from sc group by cno having count(*)>=30 )
注意本題也能夠用鏈接作
十二、找出選修了很多於3門課程的學生姓名。
Select snamefrom s where sno in ( Selectsno from sc group by sno having count(*)>=3 )
注意本題也能夠用鏈接作
1三、找出各門課程的成績均不低於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 )
只要有一門不小於90分就會輸出該學生學號
1四、找出數據庫課程成績不低於該門課程平均分的學生姓名。
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='數據庫' )
1五、找出各個系科男女學生的平均年齡和人數。
Selectsdept,ssex,avg(sage),count(*) from s group by sdept,ssex
1六、找出計算機系(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 )
1七、(補充)查詢每門課程的及格率。
本題能夠分三步作:
第1步:獲得每門課的選修人數
createview v_all(cno,cnt) as selectcno, count(*) from sc group by cno
第2步:獲得每門課及格人數
createview v_pass(cno,cnt_pass) as selectcno, count(*) from sc where grade>=60 group by cno
第3步:每門課的及格人數/每門課選修人數
selectv_all.cno, cnt_pass*100/cnt from v_all, v_pass where v_all.cno = v_pass.cno
1八、查詢平均分不及格的學生的學號,姓名,平均分。
Selectsc.sno,sname,avg(grade) from student,sc wherestudent.sno=sc.sno group bysc.sno,sname havingavg(grade)<60
思考本題也能夠用嵌套作嗎?
1九、查詢平均分不及格的學生人數。
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
這是每一個學生有幾門不及格的數目
補充四
一、查詢工資在1000到3000元之間的男性業務員的姓名和辦公室編號。
SelectYname,Ono from YWY where Salarybetween 1000 and 3000 and Ysex='男'
二、查詢各個辦公室的業務員人數,輸出辦公室編號和對應的人數。
SelectOno,count(*) from YWY group by Ono
三、查詢每一個客戶在2002年5月購買的總金額,輸出客戶號和相應的總金額。
SelectKno,sum(Fmoney) from FP where Fdatebetween '2002.5.1' and '2002.5.31' group by Kno
四、查詢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
六、查詢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='王海亮' ) )
注意本題也能夠用鏈接作
七、查詢全部工資比1538號業務員高的業務員的編號、姓名和工資。
SelectYno,Yname,Salary from YWY where Salary > ( SelectSalary from YWY where Yno='1538' )
八、查詢全部與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 )
十、查詢全部業務員的編號、姓名、工資以及工資比他高的其餘業務員的平均工資。
利用自鏈接
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
二、找出每一個學生的班級代碼、學生姓名、考試科目數、總成績。
SelectBJDM,XSXM,count(*),sum(CJ) from SC group byBJDM,BNXH,XSXM
三、輸出一張表格,每位學生對應一條記錄,包括字段:班級代碼、學生姓名、語文成績、數學成績、外語成績。
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='外語'
四、輸出一張表格,有成績低於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
五、輸出一張表格,有成績低於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
六、輸出一張表格,全部成績都不低於60分的每位學生對應一條記錄,包括字段:班級代碼、學生姓名、平均成績。
SelectBJDM,XSXM,avg(CJ) from SC group by BJDM,BNXH,XSXM havingmin(CJ)>=60
七、輸出一張表格,每一位學生對應一條記錄,包括字段:班級代碼、學生姓名、去掉一個最低分後的平均成績。
SelectBJDM,XSXM,(sum(CJ)-min(CJ))/(count(*)-1) from SC group byBJDM,BNXH,XSXM
八、輸出一張表格,每門科目對應一條記錄,包括字段: 科目、去掉一個最低分後的平均成績。
Select KM,(sum(CJ)-min(CJ))/(count(*)-1)from SC group by KM
補充六
一、查詢年齡在19至21歲之間的女生的學號,姓名,年齡,按年齡從大到小排列。
Selectsno,sname,sage from student where sagebetween 19 and 21 and ssex='女' order by sagedesc
二、查詢姓名中有「明」字的學生人數。
Select count(*)from student where snamelike "%明%"
三、查詢1001課程沒有成績的學生的學號。
Select sno fromsc where cno='1001' and grade is null
四、查詢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
六、查詢平均分大於90分的男學生學號及平均分。
鏈接:
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
七、查詢選修課程超過2門的學生姓名。
select snamefrom student,sc where student.sno=sc.sno group bysc.sno,sname havingcount(*)>2
本題也能夠用嵌套作
八、查詢 JSJ 系的學生選修的課程號。
Select distinctcno from student,sc where student.sno=sc.sno and sdept='JSJ'
本題也能夠用嵌套作
九、查詢選修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
思考本題也能夠用嵌套作嗎?
十一、查詢選修「數據庫原理」課且成績 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='數據庫原理' ) )
1四、查詢沒有選修1002課程的學生的學生姓名。
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)
思考本題也能夠用通常的鏈接作嗎?
1五、查詢平均分最高的學生學號及平均分。
Selectsno,avg(grade) from sc group by sno havingavg(grade) >=ALL ( Select avg(grade) from sc group by sno )
1六、查詢每門課程成績都高於該門課程平均分的學生學號。
能夠先計算每門課程平均分
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# IN (SELECT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER=‘LIU’)
NOTICE:有多種寫法,好比聯接查詢寫法:
SELECT SNAME
FROM S,SC,C WHERE SEX=‘F’ AND SC.S#=S.S# AND SC.C#=C.C# AND TEACHER='LIU'
但上一種寫法更好一些。
(4)檢索WANG同窗不學的課程的課程號。
SELECT C# FROM C WHERE C# NOT IN (SELECT C# FROM SC WHERE S# IN (SELECT S# FROM S WHERE SNAME='WANG'))
(5)檢索至少選修兩門課程的學生學號。
SELECT DISTINCT X.SNO FROM SC X,SC Y WHERE X.SNO=Y.SNO AND X.CNO<>Y.CNO
Notice:對錶SC進行自鏈接,X,Y是SC的兩個別名。
(6)檢索所有學生都選修的課程的課程號與課程名。
SELECT C#,CNAME FROM C WHERE NOT EXISTS (SELECT * FROM S WHERE S# NOT IN (SELECT * FROM SC WHERE SC.C#=C.C#))
要從語義上分解:(1)選擇課程的課程號與課程名,不存在不選這門課的同窗。
其中,「不選這門課的同窗」能夠表示爲:
SELECT * FROM S WHERE S# NOT IN (SELECT * FROM SC WHERE SC.C#=C.C#)
或者
SELECT * FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE S.S#=C.S# AND SC.C#=C.C# )
(7)檢索選修課程包含LIU老師所授課的學生學號。
SELECT DISTINCT S# FROM SC WHERE C# IN (SELECT C# FROM C WHERE TEACHER='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))
(1)SELECT A FROM R
(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)
(1)
SELECT A,B,C FROM R UNION SELECT A,B,C FROM S
(2)
SELECT A,B,C FROM R INTERSECT SELECT A,B,C FROM S
(3)
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)
(4)
SELECT R.A,R.B,S.C FROM R,S WHERE R.B=S.B
3.5 試敘述SQL語言的關係代數特色和元組演算特色。
3.6 試用SQL查詢語句表達下列對教學數據庫中三個基本表S、SC、C的查詢:
(1)統計有學生選修的課程門數。
SELECT COUNT(DISTINCT C#) FROM SC
(2)求選修C4課程的學生的平均年齡。
SELECT AVG(AGE) FROM S WHERE S# IN (SELECT S# FROM SC WHERE C#='C4')
或者
SELECT AVG(AGE) FROM S,SC WHERE S.S#=SC.S# AND C#='004'
(3)求LIU老師所授課程的每門課程的學平生均成績。
SELECT CNAME,AVG(GRADE) FROM SC ,C WHERE SC.C#=C.C# ANDTEACHER='LIU' GROUP BY C#
(4)統計每門課程的學生選修人數(超過10人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列。
SELECT DISTINCT C#,COUNT(S#) FROM SC GROUP BY C# HAVING COUNT(S#)>10 ORDER BY 2 DESC, C# ASC
(5)檢索學號比WANG同窗大,而年齡比他小的學生姓名。
SELECT X.SNAME FROM S AS X, S AS Y WHERE Y.SNAME='WANG' AND X.S#>Y.S# AND X.AGE<Y.AGE
(6)檢索姓名以WANG打頭的全部學生的姓名和年齡。
SELECT SNAME,AGE FROM S WHERE SNAME LIKE 'WANG%'
(7)在SC中檢索成績爲空值的學生學號和課程號。
SELECT S#,C# FROM SC WHERE GRADE IS NULL
(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)。
INSERT INTO S(S#,SNAME,AGE) VALUES('59','WU',18)
(2)在基本表S中檢索每一門課程成績都大於等於80分的學生學號、姓名和性別,並把檢索到的值送往另外一個已存在的基本表STUDENT(S#,SANME,SEX)。
INSERT INTO STUDENT(S#,SNAME,SEX) SELECT S#,SNAME,SEX FROM S WHERE NOT EXISTS (SELECT * FROM SC WHERE GRADE<80 AND S.S#=SC.S#)
(3)在基本表SC中刪除尚無成績的選課元組。
DELETE FROM SC WHERE GRADE IS NULL
(4)把WANG同窗的學習選課和成績所有刪去。
DELETE FROM SC
WHERE S# IN (SELECT S# FROM S WHERE SNAME='WANG')
(5)把選修MATHS課不及格的成績全改成空值。
UPDATE SC
SET GRADE=NULL WHERE GRADE<60 AND C# IN (SELECT C# FROM C WHERE CNAME='MATHS')
(6)把低於總平均成績的女同窗成績提升5%。
UPDATE SC
SET GRADE=GRADE*1.05 WHERE GRADE<(SELECT AVG(GRADE) FROM SC) AND S# IN (SELECT S# FROM SWHERE SEX='F')
(7)在基本表SC中修改C4課程的成績,若成績小於等於75分時提升5%,若成績大於75分時提升4%(用兩個UPDATE語句實現)。
UPDATE SC
SET GRADE=GRADE*1.05 WHERE C#='C4' AND GRADE<=75 UPDATE SC SET GRADE=GRADE*1.04 WHERE C#='C4' AND GRADE>75
3.8 「倉庫管理」關係模型有五個關係模式:
零件 PART(P#,PNAME,COLOR,WEIGHT)
項目 PROJECT(J#,JNAME,DATE)
供應商 SUPPLIER(S#,SNAME,SADDR)
供應 P_P(J#,P#,TOTOAL)
採購 P_S(P#,S#,QUANTITY)
(1)試用SQLDDL語句定義上述五個基本表,並說明主鍵和外鍵。
CREATE TABLE PART
(P# CHAR(4) NOT NULL,PNAME CHAR(12) NOT NULL, COLOR CHAR(10),WEIGHT REAL, PRIMARY KEY(P#)) CREATE TABLE PROJECT (J# CHAR(4) NOT NULL,JNAME CHAR(12) NOT NULL, DATE DATE, PRIMARY KEY(J#)) CREATE TABLE SUPLIER (S# CHAR(4) NOT NULL,SNAME CHAR(12),SADDR VARCHAR(20), PRIMARY KEY(S#)) CREATE TABLE P_P (J# CHAR(4),P# CHAR(4),TOTAL INTEGER, PRIMARY KEY(J#,P#), FOREIGN KEY(J#) REFERENCE PROJECT(J#), FOREIGN KEY(P#) REFERENCE PART(P#)) CREATE TABLE P_S (P# CHAR(4),S# CHAR(4),QUANTITY INTEGER, PRIMARY KEY(P#,S#), FOREIGN KEY(P#) REFERENCE PART(P#), FOREIGN KEY(S#) REFERENCE SUPLIER(S#))
(2)試將PROGECT、P_P、PART三個基本表的天然聯接定義爲一個視圖VIEW1,PART、P_S、SUPPLIER 三個基本表的天然聯接定義爲一個視圖VIEW2。
CREATE VIEW VIEW1(J#,JNAME,DATE,P#,PNAME,COLOR,WEIGHT,TOTAL) AS SELECT PROJECT.J#,JNAME,DATE,PART.P#,PNAME,COLOR,WEIGHT,TOTAL FROM PROJECT,PART,P_P WHERE PART.P#=P_P.P# AND P_P.J#=PROJECT.J# CREATE VIEW VIEW2(P#,PNAME,COLOR,WEIGHT,S#,SNAME,SADDR,QUANTITY) AS SELECT PART.P#,PNAME,COLOR,WEIGHT,SUPPLIER.S#,SNAME,SADDR,QUANTITY FROM PART,P_S,SUPPLIER WHERE PART.P#=P_S.P# AND P_S.S#=SUPPLIER.S#
(3)試在上述兩個視圖的基礎上進行數據查詢:
1)檢索上海的供應商所供應的零件的編號和名字。
SELECT P#,PNAME FROM VIEW2 WHERE SADDR='SHANGHAI'
2)檢索項目J4所用零件的供應商編號和名字。
SELECT S#,SNAME FROM VIEW2 WHERE P# IN(SELECT P# FROM VIEW1 WHERE J#='J4')
3.9 對於教學數據庫中基本表SC,已創建下列視圖:
CREATEVIEWS_GRADE(S#,C_NUM,AVG_GRADE)
ASSELECTS#,COUNT(C#),AVG(GRADE) FROMSC GROUPBYS#
試判斷下列查詢和更新是否容許執行。若容許,寫出轉換到基本表SC上的相應操做。
(1)
SELECT* FROMS_GRADE 容許 SELECT S#,COUNT(C#),AVG(GRADE)FROM SC GROUP BY S#
(2)
SELECTS#,C_NUM
FROMS_GRADE
WHEREAVG_GRADE>80 容許 SELECT S#,COUNT(C#) FROM SC WHEREAVG(GRADE)>80
(3)
SELECTS#,AVG_GRADE
FROMS_GRADE
WHEREC_NUM>(SELECTC_NUM FROMS_GRADE WHERES#=‘S4’) 容許 SELECT S#,AVG(GRADE) FROM SC AS X WHERE COUNT(X.C#)>(SELECTCOUNT(Y.C#) FROM SC AS Y WHERE Y.S#='S4') GROUP BY S#
(4)
UPDATES_GRADE
SETC_NUM=C_NUM+1 WHERES#=‘S4’ 不容許
(5)
DELETEFROMS_GRADE
WHEREC_NUM>4 不容許
3.10 預處理方式對於嵌入式SQL的實現有什麼重要意義?
預處理方式是先用預處理程序對源程序進行掃描,識別出SQL語句,並處理成宿主語言的函數調用形式; 而後再用宿主語言的編譯程序把源程序編譯成目標程序。這樣,不用擴充宿主語言的編譯程序, 就能處理SQL語句。
3.11 在宿主語言的程序中使用SQL語句有哪些規定?
在宿主語言的程序中使用SLQ語句有如下規定:
(1)在程序中要區分SQL語句與宿主語言語句
(2)容許嵌入的SQL語句引用宿主語言的程序變量(稱爲共享變量),但有兩條規定:
1)引用時,這些變量前必須加「:」做爲前綴標識,以示與數據庫中變量有區別。
2)這些變量由宿主語言的程序定義,並用SQL的DECLARE語句說明。
(3)SQL的集合處理方式與宿主語言單記錄處理方式之間要協調。 須要採用遊標機制,把集合操做轉換成單記錄處理方式。
3.12SQL的集合處理方式與宿主語言單記錄處理方式之間如何協調?
因爲SQL語句處理的是記錄集合,而宿主語言語句一次只能處理一個記錄, 所以須要用遊標(cousor)機制,把集合操做轉換成單記錄處理方式。
2.13 嵌入式SQL語句什麼時候沒必要涉及到遊標?什麼時候必須涉及到遊標?
(1)INSERT、DELETE、UPDATE語句,查詢結果確定是單元組時的SELECT語句, 均可直接嵌入在主程序中使用,沒必要涉及到遊標。
(2)當SELECT語句查詢結果是多個元組時,此時宿主語言程序沒法使用, 必定要用遊標機制把多個元組一次一個地傳送給宿主語言處理。
(電商)數據庫原理及應用_模擬考覈試題及參考答案
1、單選 (每空1分,共10分)
1.在Access數據庫中,數據保存在( )對象中。
A.窗體 B.查詢 C.報表 D.表
2.若是某一字段數據型爲文本型,字段大小爲8,該字段中最多可輸入( )個漢字。
A.8 B.4 C.16 D.32
3.文本型字段最多能夠存放( )個字符。
A.250 B.252 C.254 D.255
4.Access用戶操做界面由( )部分組成。
A.4 B.5 C.3 D.6
5.下列( )圖標是Access中表對象的標誌。
A. B. C. D.
6.在設計Access數據表時,「索引」屬性有( )取值。
A.1 B.2 C.3 D.4
7.Access中包含有( )種數據類型。
A.9 B.10 C.7 D.8
8.在一個宏中要打開一個報表,應該使用的操做是( )。
A.OpenForm B.OpenReport C.OpenTable D.OpenQuery
9.能夠經過Internet進行數據發佈的對象是( )。
A.窗體 B.報表 C.查詢 D.數據訪問頁
10.模塊窗口由( )個部分組成。
A.2 B.3 C.4 D.5
2、填空 (每空1分,共20分)
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)_______,稱此爲函數依賴的合併性規則。
3、填空 (每空1分,共20分)
1.若一個關係的任何非主屬性都不部分依賴依賴於任何候選碼,則稱該關係達到____第二____範式。
2.在SQL中,列級完整性約束分爲__6__種狀況,表級完整性約束分爲__4__種狀況。
在SQL中,每一個視圖中的列能夠來自不一樣的___表___,它是在原有表的基礎上____創建____的邏輯意義上的新關係。
在SQL的查詢語句中,group by選項實現____分組統計______功能,order by選項實現對結果表的____排序_____功能。
5.對於較複雜的系統,概念設計階段的主要任務是:首先根據系統的各個局部應用畫出各自對應的____局部ER圖______,而後再進行綜合和總體設計,畫出_____總體ER圖_____。
6.機器實現階段的目標是在計算機系統中獲得一個知足______設計要求、功能完善、操做方便___的數據庫應用系統。
7.Access的用戶操做界面由 標題欄、菜單欄、工做區 、工具欄、狀態欄等五個部分組成。
8.Access「表」結構設計窗口中上半部分的「表設計器」是由 字段名稱、數據類型、說明 等三列組成。
9.Access中的窗體由 頁眉、主體 和頁腳等三個部分組成。
4、填空 (每空1分,共20分)
2.設一個關係爲R(A,B,C,D,E),它的最小函數依賴集爲FD={A→B,A→C,(A,D)→E},該關係只知足___第一_____範式,若要規範化爲高一級的範式,則將獲得____2____個關係。
3.在實際的數據庫管理系統中,對數據庫的操做方式有_____命令交互、程序執行、窗口界面______等三種。
4.在SQL中,主碼約束的關鍵字爲____ primary key________,外碼約束的關鍵字爲______foreignkey ______。
5.基本表屬於全局模式中的表,它是____實表____,而視圖則屬於局部模式中的表,它是____虛表 ____。
7.數據字典是對系統工做流程中____數據____和____處理____的描述。
8.關係數據庫系統中的全局模式由若干個基本表所組成,表與表之間的聯繫是經過定義的____主碼____和____外碼____實現的。
9.在旅店管理中,涉及到的基本表有四個,它們分別爲客房表、住宿表、_旅客登記表、消費卡表。
10.在設置或撤消數據庫密碼的過程當中,密碼對於字母 大小寫 是敏感的。
5、填空 (每空1分,共10分)
1.Access的用戶操做界面由 標題欄、菜單欄、工做區 、工具欄、狀態欄等五個部分組成。
2.Access「表」結構設計窗口中上半部分的「表設計器」是由 字段名稱、數據類型 和說明等三列組成。
3.Access中的窗體由 頁眉、主體、頁腳 等三個部分組成。
4.在Access中模塊分爲 類模塊 和 標準模塊 兩種類型。
6、根據主教材第四章所給的商品庫和教學庫,或者按照下列所給的每條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(10),年級 int)
課程(課程號 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,羣內會有不按期的發放免費的資料連接,這些資料都是從各個技術網站蒐集、整理出來的,若是你有好的學習資料能夠私聊發我,我會註明出處以後分享給你們。