【文章內(nèi)容簡介】
詢分析器在“學生管理” 數(shù)據(jù)庫中創(chuàng)建“學生專業(yè)表bak”、“學生專業(yè)表”:學號 char(9) NOT NULL、姓名 char(9) NOT NULL、年齡 tinyint、性別 char(2)、所在院系 varchar(30)、專業(yè) varchar(40)使用企業(yè)管理器在“學生專業(yè)表bak”中插入一組記錄,然后在所有的學號前均加上“2003”。用查詢分析器在“學生專業(yè)表”中插入一組記錄,內(nèi)容自定義。用查詢分析器在“學生專業(yè)表”中修改一組記錄,條件自定。用查詢分析器刪除“學生專業(yè)表bak”中所有記錄。刪除“學生專業(yè)表bak”。(用“drop table 表名”)實驗7~9:數(shù)據(jù)庫中數(shù)據(jù)表的操作(SQL查詢)(分3次) 一、實驗目的能根據(jù)要求用3個基本子句從1個或多個表中篩選數(shù)據(jù);能正確運用集合函數(shù)進行操作; 掌握GROUP BY子句、ORDER BY子句的使用方法; 掌握基本的嵌套查詢使用方法; 能將SELECT語句嵌套進數(shù)據(jù)更新語句中進行數(shù)據(jù)更新操作。二、實驗內(nèi)容和步驟按照下述要求建立一個“學生課程”數(shù)據(jù)庫及4個表,并輸入數(shù)據(jù),以備下面使用。學生表學號姓名性別年齡所在院系班級名入學年份200009001葛文卿女22國際貿(mào)易國貿(mào)2班8/29/2000200104019鄭秀莉女21會計學會計1班9/2/2001200203001劉成鍇男18計算機軟件2班8/27/2002200206001李濤男19電子學電子1班8/27/2002200203002沈香娜女18計算機軟件2班8/27/2002200206002李濤男19電子學電子1班8/27/2002200203003肖一竹女19計算機軟件2班8/27/2002課程表課程號課程名先修課C801高等數(shù)學C802C++語言C807C803數(shù)據(jù)結(jié)構(gòu)C802C804數(shù)據(jù)庫原理C803C805操作系統(tǒng)C807C806編譯原理C803C807離散數(shù)學成績表學號課程號成績200203001C80198200203002C80470200206001C80185200203001C80299200206002C80382授課表教師名課程號學時數(shù)班級名蘇亞步C80172軟件2班王立山C80264軟件2班何珊C80372軟件2班王立山C80464軟件2班蘇亞步C80172電子1班說出下列程序的功能并運行之(有錯請修改),或編寫程序:基于單表的查詢(1)select 學號, 姓名, 所在院系, 年齡 from 學生表(2)select * from 成績表(3)要求查詢?nèi)繉W生的所有信息,且姓名輸出在最左邊(第一列)。(4)select 姓名, 出生年份 as 2003 年齡 from 學生表(5)要求計算各們課程的學分(設學分=學時數(shù)/16)(6)select distinct 姓名, 2003年齡 ‘出生年份’ from 學生表 order by 年齡(7)要求列出學生所在的所有院系名稱(不含重復內(nèi)容)。(8)select * from 學生表 where 姓名 like 39。李%39。(9)select * from 成績表 where 成績 not between 85 and 95 order by 成績 DESC(10)列出所有非軟件2班的班級名稱。( not like )(11)要求列出課程號在 39。C80239。 與 39。C80439。之間的所有課程信息;列出無先修課的所有課程的課程名。(12)select * from 課程表 where 課程名 in (39。高等數(shù)學39。,39。操作系統(tǒng)39。,39。編譯原理39。)(13)要求查詢所有2002年元旦之前入學的學生名單。(日期使用字符串的形式表示,日期的大小可以比較。)并按年齡排序。(14)要求查詢年齡在19歲以下或者是女生的學生姓名、年齡、性別。(15)同時按學號(從小到大)和課程號(從大到?。┑捻樞蛄谐鏊袑W生課程成績數(shù)據(jù)統(tǒng)計(也稱SQL的集合函數(shù))的應用(1)select count(distinct所在院系) as 系部的個數(shù)from 學生表(2)要求統(tǒng)計19歲以上女生的人數(shù);查詢所有年齡的總和。(3)select max(成績) 最高分,min(成績) 最低分 from 成績表(4)要求查詢’C801’課程的平均分。(5)要求統(tǒng)計選修了課程的學生人數(shù)(用成績表)。使用GROUP BY子句對結(jié)果分組(1)select性別, avg(年齡) 平均年齡 from 學生表 group by 性別(2)select 入學年份 from 學生表 group by 入學年份 (3)select month(入學年份) as 月份 , count(*) from 學生表 group by month(入學年份) having count(*)3(4)要求顯示每個入學年份中入學人數(shù)在2人以上的入學年份及人數(shù);求相同月份入學的人數(shù)(不考慮年份)。(5)篩選出平均成績在80分以上的課程及平均成績。基于多表的查詢(1)select 學生表.*, 成績表.* from 學生表, 成績表where =(2)將(1)中去掉重復的字段:學號。(需列出各個字段名)(3)要求列出學生選修課程的情況(姓名,課程號,成績)(4)列出所有課程的先修課程的名稱:Select , 課程表 a,課程表 b where =(5)要求列出所有課程的間接先修課程號。(6)Select ,姓名 from 學生表,成績表where = and 課程號=39。C80139。 and 成績=90(7)select 姓名,課程名 from 學生表,成績表,課程表where = and =(8)要求列出選修了高等數(shù)學的學生學號、姓名、成績、課程名嵌套查詢(1)select * from 學生表where 所在院系=(select 所在院系from 學生表where 姓名=39。沈香娜39。)(2)select 姓名 from 學生表,成績表where = and in (39。C80139。,39。C80439。)(3) select * from 學生表where 所在院系 =(select 所在院系from 學生表 where 姓名=39。李濤39。) (4)查詢何珊所教班級的所有任課教師的姓名、所教班級名。(5)列出選修了C802和C803的學生姓名、課程名和成績。(要求用in)(6)select 姓名from 學生表where 年齡any(select 年齡 from 學生表 where 所在院系=39。計算機39。)and 所在院系39。計算機39。(7)將(6)用min改寫。(8)select 姓名from 學生表,成績表where = and all(select 成績 from 成績表 where 學號=39。20020300139。)(9)列出所有院系中比電子學系學生年齡都小的學生姓名。(10)列出所有院系中比電子學系某一學生年齡小的學生姓名。(11)select 姓名 from 學生表 where 年齡=(select max(年齡) from 學生表)(12)按年齡降序列出所有超過平均年齡的學生姓名和年齡。6.UNION查詢(1) select * from 學生表 where 性別=39。女39。 unionselect * from 學生表 where 所在院系=39。計算機39。(2)將(1)用OR運算符改寫(去掉union)(3)顯示合并后的學生表和成績表中的學號。(4)Select 教師名,課程名,班級名 from 授課表 a,課程表 bwhere = and =39。C80139。unionselect 教師名,課程名,班級名 from 授課表 a,課程表 bwhere = and =39。C80339。(5)列出講授C802或C801課程的所有教師名、課程號和班級名。7.INTO子句(1)select 學號 number,姓名 name ,所在院系 into 計算機系學生 from 學生表where 所在院系=39。計算機39。(2)select * into 空學生表 from 學生表 where 所在院系=39。泰州系39。(3)新建一個表,用于存放計算機和國際貿(mào)易系的所有學生名單。(4)重新將上例的表創(chuàng)建為臨時表:“臨時表”,再輸入:select * from 臨時表退出SQL Server重新進入、并輸入:select * from 臨時表結(jié)果如何?為什么?數(shù)據(jù)更新(高級操作)(1)create table 新學生表(學生學號 char(9) not null primary key, 學生姓名 char(8), 學生性別 char(2), 所在院系 char(10) )insert into 新學生表 select姓名,學號,性別,所在院系 from 學生表where 所在院系=39。計算機39。 and 性別=39。女39。select * from 新學生表(2)將電子學系的學生插入到“新學生表”中。(3)update 成績表 set 成績=成績+8 where 39。電子學39。=(select 所在院系 from 學生表 where =)select * from 成績表(4)update 成績表 set 成績=成績8 where 學號 in(select 學號 from 學生表 where 所在院系=39。電子學39。)select * from 成績表(5)將性別為“男”的成績加5。(6)刪除電子學系所有學生的選修記錄。三、現(xiàn)場綜合練習1) 檢索學號不是[200108011]且入學月份為8月的學生的學號、姓名、年齡。2) 列出年齡在18~20歲之間且選修了高等數(shù)學的男同學的詳細信息。3) 列出所有不是姓“劉”的學生清單。4) 統(tǒng)計[學生表]中一共有多少名20歲以上的女同學。5) 查找年齡最大和最小的男學生年齡。6)計算選修課門數(shù)在1門以上的學生學號、門數(shù)。7)計算每個班學生的平均年齡和最小年齡。8)列出所有成績大于學號為200206002的學生成績的學生姓名、課程名和成績。9)創(chuàng)建一個[簡單學生表],要求:包含4個字段“學生學號、學生姓名、學生性別和所在院系”,然后將[學生表]中“國際貿(mào)易”系或者男學生的記錄全部插入到[簡單學生表]中,最后顯示插入的記錄。10)列出所有沒有選修課程“C804”的學生清單。11)計算每個學生的選修課門數(shù)。12)建一新表:包括姓名、課程、成績,從已有表中插入所有相關(guān)記錄。再刪除新表中成績低于70分的記錄。13)將計算機系的學生成績均加5。14)列出所有入學年份在電子學系任一學生入學之后入學的其他院系學生。附:創(chuàng)建表及插入記錄的參考代碼如下: create database 學生課程 建立數(shù)據(jù)庫on (name=studentcourse, filename=39。c:\39。)log on( name=studentcourselog,filename=39。c:\ 39。)注意:上下2部分語句需分開執(zhí)行?。?!use學生課程 create table 學生表 建立學生表( 學號 char(9) not null primary key, 姓名 char(8), 性別 char(2),年齡 tinyint, 所在院系 char(10),班級名 char(10),入學年份 datetime)goinsert int