sql

北郵上機實踐考試數據庫_王老師給的圖

 

一、建表數據庫

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 學號

相關文章
相關標籤/搜索