一、基礎知識題
(一)填空題
1、在一個表中主鍵的個數為___ 1_ ______個。
2、企業(yè)管理器是Microsoft SQL Server程序組中的程序之一,是管理________和________的主要工具。
3、觸發(fā)器執(zhí)行時生成的兩個臨時表為____ deleted _________和____insereted________。
4、以SP__作為首部的存儲過程稱為____系統(tǒng)存儲過程______________。
5、命令 truncate table的功能是___ 清空表中的內容 ____________。
6、通過外鍵約束可以為相關聯(lián)的兩個表建立聯(lián)系,實現數據的__________完整
性。
7、SQL Server 2000的文件包括:____ 數據文件_ ________和____日志文件__________。
8、模糊查詢符號 % 代表 ___ _ 零個或者多個任意字符的字符串__ _____ ,符號_ 代表意思是 ______ 任意單個字符 _________。
9、對數據進行統(tǒng)計時,求最大值的函數是___ MAX () ______。
10、視圖是從其它_____ 表 ___________________或視圖導出的虛擬表。
11、在使用Create Index 語句創(chuàng)建簇索引時,需要使用的關鍵字__ clustered_ ______。
12、關系模型中一般講數據完整性分為三類:__ 實體完整性__ _____、_ 參照完整性 ____、__ 用戶自定義完整性 ________。
13、創(chuàng)建視圖用___ with encryption_ ____________參數使視圖的定義語句加密。
14、SELECT語句中去除重復記錄的命令是_ _distinct_ ______________。
(二)選擇題
1、在SQL Server 2000中,索引的順序和數據表的物理順序相同的索引是( )。
(A)聚集索引 (B)非聚集索引 (C)主鍵索引 (D)唯一索引
2、SELECT語句中與HAVING子句通常同時使用的是( C )子句。
A.ORDER BY B.WHERE C.GROUP BY D.無需配合
3、在SQL Server 2000中,當數據表被修改時,系統(tǒng)自動執(zhí)行的數據庫對象是( B )。
(A)存儲過程 (B)觸發(fā)器 (C)視圖 (D)其他數據庫對象
4、新安裝SQL Server后,默認有六個內置的數據庫,其中的兩個范例數據庫是Pubs和( A )。
(A)master (B)NorthWind (C)msdb (D)bookdb
5、對視圖的描述錯誤的是:( )
(A) 是一張?zhí)摂M的表
(B) 在存儲視圖時存儲的是視圖的定義
(C) 在存儲視圖時存儲的是視圖中的數據
(D) 可以像查詢表一樣來查詢視圖
二、應用題
(一)用T-SQL語句完成下列題目(3小題,每小題5分、共15分)
1 、 用T-SQL語句創(chuàng)建一個如下要求的數據庫。
創(chuàng)建一個名字為Readbook庫包含一個數據文件和一個日志文件,邏輯文件名為Readbook_data,磁盤文件名為Readbook_data.mdf,文件初始容量為2MB,最大容量為10MB,文件遞增容量為1MB,而事務日志文件的邏輯文件名Readbook_log,磁盤文件名為Readbook_log.ldf,文件初始容量為1MB,最大容量為5MB,文件遞增量為1MB(數據庫創(chuàng)建在D:\SERVER文件夾下)
use master
go
if DB_ID ( N'Readbook' ) is not null drop database Readbook
go
create database Readbook
on
(
name = Readbook_data ,
filename = 'D:\SERVER\Readbook_data.mdf' ,
size = 3 ,
maxsize = 10 ,
filegrowth = 1
)
log on
(
name = Readbook_log ,
filename = 'D:\SERVER\Readbook_data.ldf' ,
size = 3 ,
maxsize = 5 ,
filegrowth = 1
)
2、在Readbook數據庫中添加一個新的事務日志文件,邏輯文件名為Readbook2_log, 磁盤文件名為Mybase2_log.ldf,文件初始容量為2MB,最大容量為10MB,文件遞增容量為1MB。
alter database Readbook
add file
(
name = Readbook2_log ,
filename = 'D:\SERVER\Mybase2_log.ldf' ,
size = 3 ,
maxsize = 10 ,
filegrowth = 1
)
3、刪除新添加的事務日志文件Readbook2_log。
USE master ;
GO
ALTER DATABASE Readbook
REMOVE FILE Readbook2_log ;
GO
(二)用T-SQL語句完成下列題目
1 、 用T-SQL語句創(chuàng)建一個如下圖所示的數據表,表名為students,建在名為ks的數據庫中:
列名 | 數據類型及長度 | 是否為空 | 備注 |
學號 | CHAR(8) | NO | 主鍵 |
姓名 | CHAR(10) | NO | |
性別 | CHAR(2) | NO | 只能輸入“男”或“女” |
身份證號 | CHAR(18) | NO | 唯一性約束 |
系別 | CHAR(20) | NO | 默認值為”計算機系” |
總學分 | TINYINT | YES |
create database ks
go
use ks
create table students
(
學號 char ( 8 ) primary key ,
姓名 char ( 10 ) not null,
性別 char ( 2 ) not null Check ( 性別 = ' 男 ' or 性別 = ' 女 ' ),
身份證號 char ( 18 ) not null unique ,
系別 char ( 20 ) not null default ' 計算機系 ' ,
總學分 tinyint
)
2、向上面的表Students中插入一個‘出生年月’字段,數據類型為datetime。
use ks
alter table students
add 出生年月 datetime
3、將Students表中所有姓王的學生的系別改為‘信息技術系’。
use ks
update students set 系別 = ' 信息技術系 ' where 姓名 = ' 王 %'
4、刪除Students表中所有1985年出生的男學生信息。
use ks
delete from students where 性別 = ' 男 ' and 出生年月 = year ( '1985' )
(三)根據下列數據庫中表的結構,回答問題(5小題,每小題5分,共25分)
學生: XS(學號char(8) primary key,
姓名char(8),
班級char(10),
性別char(2),
出生日期datetime,
出生城市char(10),
入學成績tinyint)
課程: KC(課程號char(6) primary key,
課程名char(20))
學生選課信息: CJ(學期char(2),
學號char(8) references學生(學號),
課程號char(6) references課程(課程號),
成績tinyint check(成績>=0 and 成績<>
1、 查詢入學成績排名前十的同學的學號、姓名和成績。
select top ( 10 ) 學號 , 姓名 , 成績
from cj join xs on cj . 學號 = xs . 學號
order by 成績 desc2、 計算男女生人數。
use cjgl
go
select count (*) , sex as 人數 from student group by sex
3、 統(tǒng)計每個人的平均成績在85分以上同學的平均成績。
select 學號 , AVG ( grade ) as 平均成績 from cj group by 學號 having AVG ( grade )> 85
4、 查詢未選修”JAVA”課程的學生的基本情況。
use ks
select * from xs
( select * from cj where cj . 學號 = 學生 . 學號 and 課程號
( select 課程號 from 課程 where 課程名 != 'java' ))
select * from xs
where 學號 not in
( select 學號 from cj where 課程號 in
( select 課程號 from kc where 課程名 = 'JAVA' ))
5、 查詢全部學生的學號,姓名,課程號,課程名,成績。
select xs . 學號 , studentname , kc . courseID , kc . coursename , grade from xs join cj
on xs . 學號 = cj . 學號 join kc on kc . 課程號 = cj . 課程號
三、程序設計題目(每題10分,共10分。)
1.
在數據庫JXGL中的teachers中創(chuàng)建一個觸發(fā)器,如果添加的教師的工資小于1000,則拒絕插入該記錄。(假設每次只插入一條記錄即可)(所用到的表結構如下:teachers(tno,tname,dept,pay)其中TNO代表教師編號,TNAME代表教師姓名,DEPT代表教師系別,PAY代表教師的工資)
use jxgl
go
create trigger tri_insert
on teachers
after insert
as
declare @pay tinyint
select @pay = pay from inserted
if @pay 1000
begin
print ' 工資太低 '
rollback transaction
end
2. 設已經存在如下數據庫CJGL,表結構與二(三)題目相同,編寫代碼創(chuàng)建觸發(fā)器Tg,當向CJ表插入一條記錄時,檢查該記錄的學號在XS表中是否存在,檢查課程號在KC表中是否存在,若有一項為否,則不允許插入。
use cjgl
go
Create trigger trig_appeA
On cj
after insert
as
if exists( select * from inserted a where a . 學號 not in( select b . 學號 from xs b ) or
a . 課程號 not in( select c . 課程號 from kc c ))
begin
create trigger trig_appeA
declare @stuID char ( 8 )
declare @courseID char ( 6 )
select @stuID = 學號 , @courseID = 課程號 from inserted
@stuID <>any( select 學號 from xs )
@courseID <>any( select 課程號 from kc )
print '學生或課程不存在,不允許插入!'
rollback transaction