北郵上機實踐考試數據庫_王老師給的圖
一、建表數據庫
CREATE TABLE customer(安全
mid char(5) primary key,服務器
nam varchar(20),數據結構
birth date,工具
sex char(6)ui
);spa
CREATE TABLE [dbo].[user](3d
uid char(6) primary key,日誌
zip char(8),blog
address varchar(255),
name varchar(20)
);
CREATE TABLE order_basic(
oid char(15) primary key,
odate date,
uid char(6),
memo varchar(255)
);
CREATE TABLE order_details(
oid char(15) ,
pid char(9),
quantity int,
primary key (oid,pid)
);
CREATE TABLE product(
pid char(9) primary key,
pname varchar(255),
price float(10,1)
);
二、插入數據
INSERT INTO customer values(1,’張三’,getdate(),0);
INSERT INTO customer values(2,’李四’,NULL,0); -- 後面查詢題有一個要求查生日爲null的數據;
Insert into product values(1,’商品一’,10); -- 每一個字段都賦值
Insert into product set pid=2; -- 只插入產品id,其餘字段爲null
Insert into order_details(oid,pid,quantity) values(239,198,99); -- 直接指定每一個要賦值的字段,而後根據格式寫入值;
三、建視圖
CREATE VIEW order_detail AS SELECT ob.oid,ob.uid,u.name,p.pname,p.price,od.quantity from
Order_basic ob join [user] u on ob.uid=u.uid join order_details od on ob.oid=od.oid
Join product p on od.pid=p.pid ;
四、查詢
(1)
SELECT * FROM customer where sex=0 and birth is NULL;
(2)
SELECT oid,count(pid) from order_details group by oid;
(3)
SELECT * FROM product where price <= (select avg(price) from product );
(4)
select * from product where pid in (
select pu.pid from
(select distinct od.pid,ob.uid from order_details od ,order_basic ob,[user] u,product p
where p.pid=od.pid and od.oid=ob.oid and ob.uid=u.uid ) as pu
group by pu.pid having COUNT(pu.uid)=(select count(uid) from [user])
) ;
(5)
SELECT pid,pname from product where pid not in (SELECT DISTINCT pid from order_details);
**********************************************************************************************
樣題一
1、建立數據庫與數據表(40分)
1.請從考覈服務器上下載Access數據庫文件stud.mdb;
2.使用配置工具在本地機器上啓動SQL Server服務,接着啓動Management Studio;而後建立一個大小爲1MB的數據庫student,事務日誌的大小爲1MB。注意數據文件和事務日誌文件都保存在D盤下。
3.把Access數據庫文件stud.mdb導入到數據庫student中;
4.設置學生表的主鍵學號、課程表的主鍵課程號;
5.請用SQL語句在student數據庫中建立表「家庭」。表結構以下所示:
家庭表,結構爲:學號(C4),姓名(C8),父姓名(C8),父單位(C10),母姓名(C8),母單位(C10);學號爲主鍵。
CREATE TABLE FAMILY(
STUNO CHAR(4) ,
NAME CHAR(8) ,
FATHERNAME CHAR(8),
FATHERCOMPANY CHAR(10),
MOTHERNAME CHAR(8),
MOTHERCOMPANY CHAR(10),
Primary key (stuno));
6.創建學生表、課程表和選課表之間的參照關係。
請在ans.doc中記錄你把access數據庫導入到SQL Server中的操做過程。接着,打開企業管理器的「關係」對話框,把包含上述四個表的關係圖粘貼到文件ans.doc中,最後把創建數據表「家庭」的SQL語句粘貼到ans.doc文件中。
2、SQL 語句操做(50分)
SQL的語法就相似英文語法同樣,舉例:
We are searthing(select) girl, young_lady from Paris who(where) (age between 18 and 25) and height>160;
按英語語法去理解便可記住SQL語句的格式。
1.查詢「教育系」學生的學號,姓名,性別,選修過的課程號,課程名,考試成績,考試日期;
一、直接查多表的寫法:
SELECT 學生.學號,學生.姓名,學生.性別,課程.課程號,課程.課程名,選課.考試成績,選課.考試日期 from 學生,課程,選課 where 學生.學號=選課.學號 and 課程.課程號=選課.課程號 and 學生.系別=‘教育系’;
二、join表的寫法:
SELECT 學生.學號,學生.姓名,學生.性別,課程.課程號,課程.課程名,選課.考試成績,選課.考試日期 from 學生 join 選課 on 學生.學號=選課.學號 join 課程 on and 課程.課程號=選課.課程號 where 學生.系別=‘教育系’;
2.計算出每位學生的選課門數和平均成績;
SELECT COUT(課程號) as ‘選課門數’,avg(分數) as ‘平均成績’from 學生,選課 where 學生.學號=選課.學號 group by 學生.學號;
3.檢索出沒有選修課程「數據庫原理」和「數據結構」的學生的信息;
SELECT * FROM 學生 where 學號 not in (SELECT 學號 from 選課,課程 where 選課.課程號=課程.課程號 and 課程.課程名 in (‘數據庫原理’,’數據結構’));
4.從新計算出每位學生的總收入(總收入=打工收入+獎金);
SELECT SUM(打工收入+獎金) from 打工 ,學生 where 學生.學號=打工.學號 group by 學生.學號;
5. 計算出全部單位的打工收入和獎勵的總額;
SELECT sum(打工收入+獎勵) from 打工;
6.創建視圖course,顯示出每一個學生選課的學號、選課門數、平均成績,最高成績。
Create view course as select 學號,count(課程) as 選課門數 ,avg(成績) as 平均成績 ,max(成績) as 最高成績 from 選課 group by 學號;
請把你爲完成上述功能使用SQL語句粘貼到ans.doc文檔中。
3、登錄標識與安全性 (10分)
爲系統添加一個登陸標識:xsks,而且把該標識設定爲student的dbo。
請把你的操做步驟記錄到ans.doc文檔中,並把設置成功的界面粘貼到文檔ans.doc中。
樣題二
1、建立數據庫與數據表(40分)
1.請從考覈服務器上下載Access數據庫文件hospital.mdb;
2.使用配置工具在本地機器上啓動SQL Server服務,接着啓動Management Studio;而後建立一個大小爲1MB的數據庫hospital,事務日誌的大小爲1MB。注意數據文件和事務日誌文件都保存在D盤下。
3.把Access數據庫文件hospital.mdb導入到數據庫student中;
4.設置病人表的主鍵「病人號」、醫生表的主鍵「醫生號」;
5.請用SQL語句在企業管理器中建立數據表「醫生附加信息」,表結構以下所示:
醫生附加信息,結構爲:醫生號(C4),畢業學校(C20),畢業年度(C6),業餘愛好(C30);設置醫生號爲主鍵。
CREATE TABLE DOCTOR_EXTENSION(
DOCNO CHAR(4),
GRADUATE_SCHOOL CHAR(20),
GRADUATE_YEAR CHAR(6),
Favourate char(30),
Primary key (docno));
6.創建醫生表、病人表和診斷信息表之間的參照關係。
請在ans.doc中記錄你把access數據庫導入到SQL Server中的操做過程。接着,打開企業管理器的「關係」對話框,把包含上述四個表的關係圖粘貼到文件ans.doc中,最後把創建數據表「醫生附加信息」的SQL語句粘貼到ans.doc文件中。
2、SQL 語句操做(50分)
1.查詢病人「王曉萍」的病人號、姓名、籍貫、診斷醫生的編號、姓名、診斷建議、診斷費用、診斷日期(提示:鏈接查詢);
SELECT 病人.病人號,病人.姓名,病人.籍貫,醫生.編號,醫生.姓名,診斷.建議,診斷.費用,診斷.日期 from 病人 join 診斷 on 病人.病人號=診斷.病人號 join 醫生 on 診斷.醫生號=醫生的編號 where 病人.姓名=’王曉萍’;
2.根據工資和獎金,計算出每位醫生的總收入存到實際收入中。(總收入=工資+獎金);
UPDATE 醫生 set 總收入=sum(工資+獎金) ;
3.查詢「部門收入」,可以計算出每一個部門的工資和獎金的平均額;
SELECT avg(工資),avg(獎金) from 部門收入 group by 部門;
4. 利用SQL語句向醫生附加信息表中添加一條新記錄,信息內容爲:B004,北京大學醫學部,2006,踢球、唱歌;
INSERT INTO DOCTOR_EXTENSION VALUES (‘B004’,’北京大學醫學部’,’2006’,’踢球、唱歌’);
5. 對每一個診斷病人次數在3次以上的醫生獎金增長1000元;
UPDATE 醫生 SET 獎金=獎金+1000 where 編號 in (select 醫生號 from 診斷 group by 醫生號 having count(診斷)>=3);
6.爲醫生表建立依據醫生姓名的惟一性索引doctor。
CREATE UNIQUE INDEX DOCTOR ON DOCTOR (NAME);
請把你爲完成上述功能使用SQL語句粘貼到ans.doc文檔中。
3、登錄標識與安全性 (10分)
爲系統添加一個登陸標識:xsks,而且把該標識設定爲hospital的dbo。
請把你的操做步驟記錄到ans.doc文檔中,並把設置成功的界面粘貼到文檔ans.doc中。
樣題三
1、建立數據庫與數據表(30分)
1.請從考覈服務器上下載Access數據庫文件stud.mdb;
2.使用配置工具在本地機器上啓動SQL Server服務,接着啓動Management Studio;而後建立一個大小爲1MB的數據庫student,事務日誌的大小爲1MB。注意數據文件和事務日誌文件都保存在D盤下。
3.把Access數據庫文件stud.mdb導入到數據庫student中;
4.設置學生表的主鍵學號、課程表的主鍵課程號;
5.刪除學生表中的字段「獎勵」,並增長字段「年齡」;
6.創建學生表、課程表和選課表之間的參照關係。
請在ans.doc中記錄你把access數據庫導入到SQL Server中的操做過程。接着,打開企業管理器的「關係」對話框,把包含上述四個表的關係圖粘貼到文件ans.doc中,最後把修改學生表結構的SQL語句粘貼到ans.doc文件中。
2、SQL 語句操做(50分)
1.查詢選修課程「計算機應用基礎」的學生的學號,姓名,性別,考試成績,考試日期;
SELECT 學生.學號,學生.姓名,學生.性別,選課.考試成績,選課.考試日期 from 學生 join 選課 on 學生.學號=選課.學號 join 課程 on 選課.課程號=課程.課程號 where 課程.課程名=’計算機應用基礎’;
2.計算出每門課程的選課人數和平均成績;
SELECT 課程號,count(學號) as ‘選課人數’,avg(成績) as ‘平均成績’ from 選課 group by 課程號;
3.計算出每一個院系中全部學生的總收入(即分院系求出打工收入的和);
SELECT 院系,sum(收入) from 學生 group by 院系;
4.列出同時選修了「計算機基礎」和「大學外語」兩門課程的同窗的信息。
SELECT 學生.* from 學生 join 選課 on學生.學號=選課.學號 join 課程 on 選課.課程號=課程.課程號 where 課程 in (select 課程號 from 課程 where 課程名 in (’計算機基礎’,’大學外語’) group by 學號 having count(課程號)>=2);
此思路不對!不能這麼寫!若是某同窗重修了計算機基礎,有兩條計算機基礎的選課記錄,而沒有選修大學外語,卻會進入查詢結果。
(注意:此題不能用簡單的 課程=(或者in)計算機 and 課程in(或=)外語作條件,一條結果都查不出來的。)
李明輝(渣渣輝)提供的另外一個思路:
SELECT 學生.* from 學生,選課,課程 where 學生.學號=選課.學號 and 選課.課程號=課程.課程號 and
學號 in ( select 學號 from 課程,選課 where 課程。課程號=選課。課程號 and 課程名='計算機基礎') and
學號 in (select 學號 from 課程,選課 where 課程。課程號=選課。課程號 and 課程名='大學外語');
5.對於每位全部課程平均成績在80分以上的學生獎勵1500元;
UPDATE 學生 set 獎勵=獎勵+1500(仍是直接寫成獎勵=1500?) where 學號 in (select 學號 from 選課 group by 學號 having avg(成績)>=80);
6.建立一個存儲過程xsgl,該過程包含一個參數tname。執行此存儲過程,可以輸出該教師講授過的全部課程,以及選修這些課程的學生的學號,考試成績。
CREATE PROC xsgl
@tname char(10)
As
Begin
Select 選課.學號,選課.成績,課程.課程名 from 選課 join 課程 on 選課.課程號=課程.課程號 where 課程.教師= @tname;
end
請把你爲完成上述功能使用SQL語句粘貼到ans.doc文檔中。
3、登錄標識與安全性 (10分)
爲系統添加一個登陸標識:jsjks,而且把該標識設定爲student的dbo。
請把你的操做步驟記錄到ans.doc文檔中,並把設置成功的界面粘貼到文檔ans.doc中。
4、建立ODBC數據源 (10分)
在ODBC中爲你的數據庫建立ODBC數據源,數據源名稱爲「sjks」,請把操做過程當中的關鍵操做界面粘貼到ans文檔中。
樣題四:
1、建立數據庫與數據表(40分)
1.下載文件(略);
Create table 家庭(學號 char(4) primary key, 姓名 char(8), 父姓名 char(8),父單位 char(10), 母姓名 char(8),母單位 char(10))
6.打開步驟4創建的關係圖,把學生基本表中的主鍵【學號】拖動到【選課表】的字段「學號」上,把課程表中的主鍵【課程號】拖動到【選課表】的字段【課程號】上。當線路鏈接成功後,表示關係創建成功。
把關係圖屏幕拷貝到文檔ans.doc中。
最後保存關係圖。
2、SQL 查詢語言(50分)
不知爲什麼樣題四下面原本就提供了這些SQL~~~卻沒有題幹。大概是北郵老師放錯了吧。
1.
Select 學生基本表.學號,姓名,性別,課程表.課程號,課程名,考試成績,
考試日期 from 學生基本表,課程表,選課表
Where 學生基本表.學號=選課表.學號 and 課程表.課程號=選課表.課程號 and 系別=’教育系’
2.Select 學號,count(*) as 選課門數,avg(考試成績)
from 選課表 group by 學號order by 學號
3.Select * from 學生基本表
where 學號 not in
(select 學號 from 選課表,課程表 where 課程表.課程號=選課表.課程號 and 課程名=’數據庫原理’)
and not in
(select 學號 from 選課表,課程表 where 課程表.課程號=選課表.課程號 and 課程名=’數據結構’);
4.Update 學生基本表 set 總收入=打工收入+獎金
5. select sum(打工收入) as 總打工,sum(獎勵) as 總獎勵
6.Create view course as select 學號,count(*) as 選課門數,avg(考試成績) as 平均成績),max(考試成績) as 最高成績 from 選課表 group by 學號 order by 學號