将信息系学生的计算机文化学,计算机等级考试(国家)-关系数据库操作语言sql(四)...
計算機等級考試(國家)-關系數據庫操作語言sql(四)
(8頁)
本資源提供全文預覽,點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧,查找使用更方便哦!
10.90 積分
關系數據關系數據庫庫操作操作語語言言SQL(四四)設計題設計題 在SQL Server 2000中,有教師表Teachers(TeacherID,Name, LeaderID.,其中 TeacherID是主碼,類型是長度為4的普通編碼定長字符串,且每位是0~9的數字字符;Name的類型 是長度為10的普通編碼可變長字符串;LeaderID是每個教師的領導的TeacherID。 1、寫出創建Teachers表的SQL語句,要求語句中包含所有的約束。 2、現要查詢TeacherID為“1234”的教師的領導的領導的TeacherID,請給出相應的SQL語句,要 求只使用一條SQL語句實現,且此語句中不允許包含子查詢。 3、如下兩個關系表:Emp(eid, ename, age, did, salary),其各列含義為:職工號,姓名,年齡,部門號,工 資。Dept(did, dname, mgr_id),其各列含義為:部門號,部門名稱,部門經理職工號。寫出一條SQL語句,查詢工資大于10000,且與其所在部門的經理年齡相同的職工姓名。4、寫出創建下述關系表的SQL語句。 Student表表結結構構列名含義數據類型約束 Sno學號普通編碼定長字符串,長度為7主碼 Sname姓名普通編碼定長字符串,長度為10非空 Ssex性別普通編碼定長字符串,長度為2取值范圍為:{男,女} Sage年齡微整型大于等于14Sdept所在系普通編碼不定長字符串,長度為 20Course表表結結構構列名含義數據類型約束 Cno課程號普通編碼定長字符串,長度為10主碼 Cname課程名普通編碼不定長字符串,長度為20非空 Periods學時數小整型大于0Property 課程性質普通編碼定長字符串,長度為4取值范圍為:{必 修,選修}存在如下表結構: Student表表結結構構列名含義數據類型約束 Sno學號普通編碼定長字符串,長度為7主碼 Sname姓名普通編碼定長字符串,長度為10非空 Ssex性別普通編碼定長字符串,長度為2取值范圍為:{男,女} Sage年齡微整型大于等于14Sdept所在系普通編碼不定長字符串,長度為 20Course表表結結構構列名含義數據類型約束 Cno課程號普通編碼定長字符串,長度為10主碼 Cname課程名普通編碼不定長字符串,長度為20非空 Periods學時數小整型大于0Property 課程性質普通編碼定長字符串,長度為4取值范圍為:{必 修,選修}SC表表結結構構列名含義數據類型約束Sno學號普通編碼定長字符串,長度為7主碼,引用Student的外 碼 Cno課程號普通編碼定長字符串,長度為10 主碼,引用Course的外碼 Grade成績小整型取值范圍:0~100寫出實現下述操作的SQL語句: 5、查詢選課門數超過2門的學生的平均成績和選課門數。 6、列出總成績超過200分的學生,要求列出學號、總成績。 7、查詢選修了“C02”號課程的學生的姓名和所在系。 8、查詢成績在80分以上的學生的姓名、課程名和成績,并將結果按成績的降序排列。 9、查詢計算機系男生修了“數據庫基礎”的學生的姓名、姓名和成績。 10、查詢學生的選課情況,要求列出每位學生的選課情況(包括未選課的學生),并列出學生的學號和 考試成績。 11、列出“數據庫基礎”課程考試成績前三名的學生的學號、姓名、所在系和考試成績。 12、查詢哪些學生合選了一門課程,要求列出合選課程的學生的學號和課程號。 13、查詢哪些課程沒人選,要求列出課程號和課程名。 14、查詢計算機系學生考試成績高于全體學生的總平均成績的學生的姓名、考試的課程號和考試成績。15、查詢VB考試成績最低的學生的姓名、所在系和VB成績。 16、查詢選修了VB課程的學生的學號、姓名、所在系和成績,并對所在系進行如下處理:當所在系為 “計算機系”時,顯示“CS”;當所在系為“信息系”時,顯示“IS”;當所在系為“數學系”時,顯示“MA”; 對其他系,均顯示“OTHER”。 17、查詢每門課程的選課人數,如果選課人數超過了100人,顯示“人多”;如果選課人數在40~100 之間,顯示“一般”;如果選課人數少于40人,顯示“較少”;如果此門課程沒人選,顯示“無人選”。 18、在課程表中增加一條新記錄:課程號為“C100”,課程名為“Java”,學時數32,課程性質為“選修” 。 19、刪除修課成績小于50分的學生的修課記錄。 20、刪除信息系修課成績小于50分的學生的修課記錄。 21、將所有選修了“C01”號課程的學生的成績加10分。 22、將計算機系所有選修了“計算機文化學”課程的學生的成績加10分。 有如下關系數據庫:學生(學號,姓名,性別,專業,獎學金)課程(課程號,名稱,學分)學習(學號,課程號,分數)用SQL語言完成下列操作: 23、檢索沒有任何一門課程成績在80分以下的所有學生的信息,包括學號、姓名和專業; 24、檢索沒有獲得獎學金同時至少有一門課程成績在95分以上的學生信息,包括學號、姓名和專業; 25、對成績得過100分的學生,如果沒有獲得獎學金的,將其獎學金設為1000元;26、定義學生成績得過滿分(100分)的課程視圖AAA,包括課程號、名稱和學分。 現有“學生-選課-課程”關系數據庫如下:學生表S(Sno, Sname, Sage, Ssex, Sdept),各屬性含義依次為學號,姓名,年齡,性別, 所在系;選課表SC(Sno, Cno, Grade),各屬性含義依次為學號,課程號,成績;課程表C(Cno, Cname, Cteacher),各屬性含義依次為課程號,課程名,授課教師;試用SQL語言完成以下操作: 27、檢索年齡在18到22之間(含18和22)的男生的學號、姓名及年齡; 28、檢索選修了“王杰”老師所授課程的學生的學號和姓名。 學生管理數據庫包括3個基本表,其結構為:學生(學號,姓名,年齡,所在系)課程(課程表,課程號)選課(學號,課程號,成績)試用SQL語言完成操作: 29、求數學系或計算機系姓張的學生信息; 30、求學生人數; 31、求選修高等數學的學生人數; 32、求選修了高等數學的學生學號和姓名; 33、求其他系中比計算機系學生年齡都小的學生; 34、求選修課程號為C1的課程且成績為90分以上的學生學號、姓名及成績。 已知關系模式:S(SNO, SNAME.學生關系,SNO為學號,SNAME為姓名;C(CNO, CNAME, CTEACHER)課程關系,CNO為課程號,CNAME為課程名,CTEACHER為任課教師;SC(SNO, CNO,SCGRADE.選課關系,SCGRADE為成績。 35、找出沒有選修過“李明”老師講授課程的所有學生姓名; 36、列出有兩門以上(含兩門)不及格課程的學生姓名及其平均成績; 37、列出既學過“1”號課程,又學過“2”號課程的所有學生姓名。 38、在SQL Server 2000中,設某數據庫中有商品表(商品號,商品名,進貨價格),商品號為主碼; 銷售表(商品號,銷售時間,銷售數量,銷售價格,本次利潤),商品號和銷售時間為主碼,銷售價格為 本次銷售商品的單價?,F要求每當在銷售表中插入前4列數據時(假設一次只插入一行數據),系統自 動計算本次銷售產生的利潤,并將該利潤賦給銷售表的第5列“本次利潤”。請編寫實現上述功能的后 觸發型觸發器代碼。在SQL Server 2000的某數據庫中有如下兩張關系表:學生表(學號,姓名,性別,系號),學號為主碼系表(系號,系名,系簡稱),系號為主碼 39、在數據庫中執行如下T-SQL代碼:DECLARE @DeptID varchar(10)DECLARE @cnt intSet @cnt = 0DECLARE cursor1 cursor FOR SELECT 系號 FROM 系表WHERE 系名 LIKE '%電%'OPEN cursor1FETCH NEXT FROM cursor1 INTO @DeptIDWHERE @@FETCH_STATUS=0BEGINDECLARE @temp_cnt intSELECT @temp_int = COUNT(*) FROM 學生表 WHERE 系號 = @DeptIDSET @cnt = @cnt + @temp_cntFETCH NEXT FROM cursor1 INT0 @DeptIDENDCLOSE cursor1DEALLOCATE cursor1SELECT @cnt執行過程中發現速度比較慢,為了解決性能問題,需在功能不變的情況下,將此T-SQL代碼改為 一條SQL語句。請寫出此SQL語句(語句中不能含有子查詢)并說明為什么此種修改可以提高性能。 40、設在學生表的(姓名,系號)列上建有一個復合索引,該索引是否有助于提高下列兩個語句的查詢 效率,并說明原因。SELECT * FROM學生表 WHERE 系號='1';SELECT * FROM 學生表 WHERE 姓名='張三' 有學生表(學號,姓名,年齡,性別,系名,專業名,班號),設一個系可有多個專業,每個專業可有多個 班,各班班號不重復,一個學生只在一個班學習,現經常需要按“系名”和“班號”進行查詢,為提高查 詢效率,需要為“系名”和“班號”兩個列建立一個非聚集索引,建立此索引有下列兩種方法:方法1:索引列順序為(系名,班號)方法2:索引列順序為(班號,系名) 41、這兩種方法哪個更合理?請簡要說明原因。 42、針對你認為合理的方法,寫出創建該索引的SQL語句。 在進行某學校教務管理系統的數據庫設計時,數據庫設計人員設計了如下幾個關系模式:系(系號,系名),系號為主碼學生(學號,姓名,所在系號),學號為主碼課程(課程號,課程名,開課系號),課程號為主碼選課(學號,課程號,選課時間),學號和課程號為主碼開發人員在將關系模式實施到SQL Server 2000的“教務”數據庫時,使用了如下表結構定義 語句:CREATE TABLE系(系號varchar43NOT NULL,系名varchar44)CREATE TABLE學生(學號varchar45NOT NULL,姓名varchar45,所在系號varchar43)CREATE TABLE課程(課程號varchar45NOT NULL,課程名varchar44,開課系號varchar43)CREATE TABLE選課(學號varchar45NOT NULL,課程號varchar45NOT NULL,選課時間datetime)在執行如下查詢語句時發現執行效率很低:SELECT*FROM 選課 JOIN 學生 ON 學生. 學號=選課. 學號JOIN 系 ON 系. 系號=學生. 所在系號JOIN 課程 ON 課程. 課程號=選課. 課程號WHERE 系. 系號=012AND convert(varchar43,選課時間,120)>=2010-01-0143、在查找原因時發現建表語句有問題。請指出問題并說明該問題是否會影響此查詢語句的執行效率。44、設已在“選課”表的“選課時間”列及“學生”表的“所在系號”列上建立了索引。請問這兩個索引是 否能夠提高該查詢語句的執行效率?如果不能,請說明原因。答案:設計題設計題1、create table Teachers(TeacherID char(4) check(TeacherID like“[0~9][0~9][0~9][0~9]“),Name varchar(10),LeaderID char(4),primary key TeacherID,foreign key LeaderID references Teachers(TeacherID)) [解析] 創建表格使用CREATE語句。2、select T2. LeaderID from Teachers as T1 join Teachers as T2 on T1.LeaderID=T2. TeacherID where T1. TeacherID='1234' 3、select a. * from Emp a, Dept b, Emp c where a. did=b. did and b. mgr_id=c. eid and a. salary>10000 and a. age=c. age 4、創建Student表的SQL語句為:CREATE TABLE Student(Sno char(7) primary key, Sname char(10) not null,Ssex char(2) check(Ssex In('男','女')),Sage tinyint check(Sage > = 14),Sdept varchar(20))創建Course表的SQL語句為:CREATE TABLE Course(Cno char(10) primary key,Cname varchar(20) not null,Periods smallint check (Periods>0),Property char(4) check(Property in('必修','選修'))) [解析] 本題考查的是SQL語句。 5、select sno, sum (grade) as/總成績,avg (grade) as/平均成績,count (*) as/選 課門數 from scgroup by sno having count (*) >2 [解析] 本題考查的是SQL操作。6、select sno, sum (grade) 總成績 from scgroup by sno having sum (grade) >200 7、select sname, sdept from Student join SC on Student. Sno =SC. Snowhere cno= 'C02' 8、select sname, cno, gradefrom student s join sc on s. sno=sc. snowhere grade > 80Order by grade desc 9、select sname,ssex, gradefrom student s join sc on s. sno=sc. snojoin course c on c. cno=sc. cnowhere sdept= '計算機系' and ssex= '男'and cname= '數據庫基礎' 10、select s. sno, sname, cno, grade from Student s left join SC on s. Sno=SC. Sno 11、select top 3 s. sno, sname, sdept, gradefrom Student s join sc on s. Sno=sc. Snojoin Course c on c. Cno = sc. Cnowhere cname = '數據庫基礎'order by grade desc 12、select t1. sno, t2. sno, t1.cnofrom sc as t1 join sc as t2on t1. cno = t2. cnowhere t1. sno < t2. sno 13、select c. cno, cname from course c left join scon c. cno = sc. cnowhere sc. cno is null 14、select sname, cname, gradefrom student s join sc on s. sno = sc. snojoin course c on c.cno = sc. cnowhere sdept ='計算機系'and grade > (select avg(grade) from sc) 15、select sname, sdept, gradefrom student s join sc on s. sno = sc. snojoin course c on c. cno = sc. cnowhere grade = (select min(grade) from scwhere cno in (select cno from course where cname ='vb'))and cname = 'vb' 16、select s. sno 學號,sname 姓名,case sdeptwhen'計算機系'then'CS'when'信息系'then'IS'when'數學系'then'MA'else'OTHER'end as 所在系,grade 成績from student s join sc on s. sno = sc. snojoin course c on c. cno = sc. cno where cname = 'vb' 17、select c. cno,casewhen count(sc. cno) > 100 then'人多'when count(sc. cno) between 40 and 100 then'一般'when count(c. cno) < 40 then'較少'when count(sc. cno) = 0 then'無人選'end as選課人數from sc right join course c on sc. cno = c. cnogroup by c. cno 18、insert into Course values('C100','Java',32,'選修') 19、delete from sc where grade<50 20、(a)用連接查詢實現delete from sc from sc join student s on s. sno = sc. snowhere sdept ='信息系'and grade < 50(b)用子查詢實現delete from sc where sno in (select sno from student where sdept = '信息系')and grade < 50 21、update sc set grade = grade + 10where cno = 'c01' 22、(a)用子查詢實現update sc set grade = grade + 10where sno in (select sno from student where sdept = '計算機系')and cno in (select cno from course where cname = '計算機文化學')(b)用連接實現update sc set grade = grade - 10from student s join sc on s. sno = sc. snojoin course c on c. cno = sc. cnowhere sdept ='計算機系'and cname ='計算機文化學' 23、SELECT 學號,姓名, 專業 FROM 學生 WHERE 學號 NOT IN(SELECT 學號 FROM 學習 WHERE 分數<80); 24、SELECT 學號,姓名,專業 FROM 學生,學習 WHERE 學生. 學號=學習. 學號 AND 學習. 課 程號=課程. 課程號 AND 學生. 獎學金<=0 AND 學習. 分數>95; 25、UPDATE 學生 SET 獎學金=1000 WHERE 獎學金 <=0 AND 學號 IN(SELECT 學號 FROM 學習 WHERE 分數 =100); 26、CREATE VIEW AAA(課程號,名稱,學分)AS SELECT 課程號,名稱,學分 FROM 課程 WHERE 課程號 IN(SELECT 課程號 FROM 學習 WHERE 分數=100); 27、方法 1:SELECT Sno, Sname, SageFROM SWHERE Sage BETWEEN 18 AND 22AND Ssex='男'方法2:SELECT Sno, Sname, SageFROM SWHERE Sage>=18 AND Sage <=22AND Ssex='男' 28、方法1:SELECT Sno, SnameFROM S, SC, CWHERE S. Sno=SC. SnoAND SC. Cno=C. CnoAND C. Cteacher='王杰'方法2:SELECT Sno, Sname FROM S WHERE Sno IN(SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM C WHERE Cteacher='王杰')) 29、select * from 學生 where所在系in('數學系','計算機系')and姓名like'張%' 30、select count(*)as 學生人數from學生 31、select count(*)from學生,課程,選課where學生. 學號=選課. 學號 and 選課. 課程號=課程. 課程號 and 課程. 課程表='高等數學' 32、select學號, 姓名from選課inner join課程on(選課. 課程號=課程. 課程號)inner join學生on(選課. 學號=學生. 學號)where課程號='高等數學' 33、select姓名,年齡from學生where所在系not in(' 計算機系')and年齡<(select min(年齡)from學生where所在系='計算機系') 34、select學 號,姓名,成績from選課inner join課程on(選課. 課程號=課程. 課程號)inner join學生on(選課. 學號=學生. 學號)where課程號='C1'and成績>90 35、SELECT SNAME FROM SWHERE NOT EXISTS(SELECT * FROM SC, CWHERE SC. CNO=C. CNOAND CNAME='李明'AND SC. SNO=S. SNO) 36、select s. sno, avg(scGrade) from S, SCwhere s. sno in(select sc. sno from scinner Join con c. cno=sc. cnowhere sc. scGrade<60group by snohaving count(*)>=2)and s. sno=sc. snogroup by s. sno 37、select S. SNO, S. SNAME from sc, swhere cno=1 and sc. sno in(select sno from sc where cno=2)and s. sno=sc. sno 38、CREATE TRIGGER update_saleON 銷售表 FORUPDATEFOREACHROWASBEGINUPDATE Table_sale SET 本次利潤=銷售價格-(SELECT 進貨價格 FROM 產品表)ENDCREATE TRIGGER Insert_saleON 銷售表 FOR INSERTFOREACHROWASBEGININSERT INTO 銷售表 VALUES(new. 商品號,new. 銷售時間,new. 銷售數量,new. 銷 售價格)END 39、select COUNT(*)From 學生表,系表Where 學生表. 系號=系表. 系號And 系表. 表名 like'%電%'這種寫法避免了使用游標,并且靈活的使用笛卡兒乘積,有效的提高了性能。 40、不能, 一是因為數據表帶有的索引越多,需要做出的修改就越多,平均性能的降低程度也就越大。二是索引 會花費磁盤空間,多個索引相應地花費更多的磁盤空間。 41、方法1更加合理,理由如下:更加 有利于減少索引層次,提高查詢效率;更加符合使用習慣;更加便于(系、班)進行統計。 42、create index index_1 on 學生表(系名,班號) 43、建表時沒有設置主鍵,但不會 影響此查詢語句的執行效率。 44、“選課”表的“選課時間”列上建立了索引能夠提高執行效率。 經常出現在Where子句中的字段,特別是大表的字段,應該建立索引。索引的作用就類似于書的目錄, 書的目錄會按照章節的順序排列,會指想某一張的位置。這樣如果在一本數百頁的書里面查找某個章 節位置的時候,我們就可以只掃描書的目錄,掃描的范圍縮小了”倍,查詢的效率自然就提高了。另外 在SQL Server內存夠用的情況下索引會被放到內存中,在內存中查找自然又會提高效率;所以我們 必須得合理利用索引。 關?鍵?詞: 計算機等級考試 國家 關系 數據庫 操作 語言 sql
?天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:計算機等級考試(國家)-關系數據庫操作語言sql(四)
鏈接地址: https://www.wenku365.com/p-9296885.html
總結
以上是生活随笔為你收集整理的将信息系学生的计算机文化学,计算机等级考试(国家)-关系数据库操作语言sql(四)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团点评ipo定价区间多少 将于9月20
- 下一篇: 兴业银行信用卡征信审核要多久