|
第1题
简述关系数据库语言SQL的特点;
第2题
练习各种SQL语句。包括创建和修改数据库,对数据进行增、删、改操作,增加、修改索引操作,各种查询操作等(可以使用示例数据库Pubs或NorthWind )。
第3题
什么是视图?视图的优点和定义格式?
第4题
什么是游标 ?嵌入式SQL中使用游标的操作过程?
第5题
什么是触发器?触发器实现的功能?
第6题
什么是存储过程?存储过程的优点是什么?
第7题
使用聚集函数、GROUP BY等在查询结果中产生汇总和统计数据:
(1) 写一个SQL语句,统计各门课程的平均成绩超过85分的学生的名字、学号和成绩。
(2) 写一个SQL语句,查询各门课程的平均成绩超过85分的学生的人数大于10人的所在班级的名字和平均成绩超过85分的人数。
第8题
在查询分析器中,使用示例数据库Pubs(或NorthWind)练习各种SQL语句。把操作命令保存到文件中。以批处理文件的形式发送到服务器ServerX上的子目录"数据库作业\SQL练习"中,文件名为:学号姓名.sql。 操作命令包括:
(1) 对数据库数据进行增、删、改操作。
(2) 对数据库表的增加、修改索引。
(3) 对数据库数据进行各种查询操作。
(4) 对查询结果进行分组、排序等操作。
(5) 对视图创建、查询操作
(6) 数据完整性的定义和修改操作
(7) 游标的定义和使用
(8) 触发器和存储过程的定义及使用。
答案:
第1题
· 语言功能的一体化: 集数据定义DDL、数据操纵DML、数据控制DCL为一体。且它不严格区分数据定义和数据操纵,在一次操作中可以使用任何语句。结构的一体化:关系模型中唯一的结构类型就是关系表,这种数据结构的单一性,使得增、删、改、查询等操作都只须使用一种操作符。
· 高度非过程化:只须提出"做什么"无须指 明"怎样做"。用户不必了解存取路径。面向集合的操作方式:在元组集合上操作,操作结果仍是元组集合。查找、插入、删除和更新都可以是元组集合。
· 两种操作方式、统一的语法结构:既是自含式语言,又是嵌入式语言。作为自含式语言,可作为连机交互式使用;作为嵌入式语言,SQL语句可嵌入高级程序设计语言中使用。
· 语言简洁、易学易用:数据定义、操纵和控制只用了9个动词。
第2题 答案略。
第3题
· 什么是视图:
视图是查询结果的关系,是一个基于查询的逻辑表,视图本身并不存储数据,但它可以表示来自不同来源的数据,对应用程序来说,视图就相当一个表,数据可以从视图中查得,而且在权限许可的情况下,还可以通过视图来插入、更改和删除数据。
· 视图的优点如下:
(1)提供了逻辑上的数据独立性:修改了基本表,通过建立视图,可以不改变应用程序。
(2)简化了用户查询;
(3)不同的用户通过视图可以从不同的观点观察数据;
(4)视图作为授权的单位提高了系统的安全性,通过视图可以对用户隐藏某些数据。
第4题
· 什么是游标:
通过嵌入式SQL语句进行查询时,当查询结果为一组记录时,不能把提取的元组集合直接传递到应用程序中,必须先放到某种缓冲存储空间,这称为使用游标 CURSOR。因此,游标是系统为用户的查询结果开辟的数据缓冲区,存放SQL的查询结果。
· 嵌入式SQL中使用游标的操作过程:
(1). 定义游标(2). 打开游标(3). 逐一读游标区中的元组值;(4). 关闭游标(5) 删除游标
第5题
触发器是一种特殊类型的存储过程,当表中数据被修改时,系统自动执行触发器。
当一个触发器建立后,它作为一个数据库对象被存储。当事件出现时,触发器被触发,定义在触发器中的功能将被DBMS执行。触发器建立在表一级,它与指定的数据修改操作相对应。SQL Server 中的触发器可分为INSERT触发器、UPDATE触发器和DELETE触发器三种。
第6题
(1) 存储过程是存放在服务器上的预先定义与编译好的SQL语句。存储过程在第一次执行时进行语法检查和编译。编译好的版本存储在过程高速缓存中用于后续调用,执行速度快。存储过程由应用程序激活,而不是由系统自动执行。
(2) 存储过程特点:
·使多个应用程序可以共享应用程序的处理逻辑,所有的客户机程序使用同一个存储过程进行各种操作,从而确保数据访问和操作的一致性,也提高了应用程序的可维护性。
·由于存储过程在第一次执行之后,就驻存在高速缓存存储器中,因此可以提高系统的执行效率。
· 提供一种安全机制。如果用户被授予执行存储过程的权限,那么既使该用户没有执行访问在该存储过程中所参考的表或者视图的权限,该用户也可以完全执行该存储过程。
· 减少了网络的流量负载。由于存储过程是存在服务器端的,因此客户端要执行存储过程时,只需要传送一条命令即可,如果不使用存储过程,则需要传送许多条SQL语句。
· 因为存储过程提供该前端应用程序共享的处理逻辑,若要改变业务规则或策略,只需改变存储过程和参数。
第7题
(1) 统计每个学生的平均成绩和姓名
select s.sname, AVG(grade)
from student s ,sc
where s.sno = sc.sno
group by s.sname
(2) 统计平均成绩超过85分的学生的名字、学号和成绩。
Select s.sname,s.sno,avg(sc.grade)
from student s, sc where s.sno = sc.sno
group by s.sname,s.sno
having avg(grade)>=85
(3)查询平均成绩超过85分的学生的人数大于20人的班级的名字和平均成绩超过85分的人数。
Select classname,count(*)
from student s, sc ,class
where s.sclass = class.classname
AND s.sno IN
( select sno
from sc
group by sno
having avg(grade)>=85)
group by classname
having count(*) >=20
第8题
/* 下面是SQL语句的练习部分示例 */
/*************创建数据库****************/
create database Business1
on
(name=Business1_dat,
filename='f:\mssql7\Data1\businessdat.mdf',
size=10,
maxsize=50,
filegrowth=5)
log on
(name=Business1_log,
filename='f:\mssql7\Data1\businesslog.ldf',
size=5MB,
maxsize=25MB,
filegrowth=5MB)
go
/*创建数据库一个主文件、2个次文件、2个日志文件*/
create database archive1
on
primary(name=arch1,
filename='f:\Program Files\mssql7\Data1\archdat1.mdf',
size=10MB,
maxsize=20,
filegrowth=2),
(name=arch2,
filename='f:\Program Files\mssql7\Data1\archdat2.ndf',
size=10MB,
maxsize=20,
filegrowth=2),
(name=arch3,
filename='f:\Program Files\mssql7\Data1\archdat3.ndf',
size=10MB,
maxsize=20,
filegrowth=2)
log on
(name=archlog1,
filename='f:\Program Files\mssql7\Data1\archlog1.ldf',
size=10MB,
maxsize=20,
filegrowth=2),
(name=archlog2,
filename='f:\Program Files\mssql7\Data1\archlog2.ldf',
size=10MB,
maxsize=20,
filegrowth=2)
go
/*利用文件组创建数据库*/
create database company2
on
primary (name=pril_dat,
filename='f:\Program Files\mssql7\Data1\pril1dat.mdf',
size=10,
maxsize=50,
filegrowth=15%),
(name=pri2_dat,
filename='f:\Program Files\mssql7\Data1\pri21dat.mdf',
size=10,
maxsize=50,
filegrowth=15%),
filegroup
comgroup1
(name=grp1fi11_dat,
filename='f:\Program Files\mssql7\Data1\g1fi11dt.ndf',
size=10,
maxsize=50,
filegrowth=5),
(name=grp2fi22_dat,
filename='f:\Program Files\mssql7\Data1\g2fi22dt.ndf',
size=10,
maxsize=50,
filegrowth=5),
filegroup
comgroup2
(name=grp2fi11_dat,
filename='f:\Program Files\mssql7\Data1\g2fi11dt.ndf',
size=10,
maxsize=50,
filegrowth=5),
(name=grp2fi21_dat,
filename='f:\Program Files\mssql7\Data1\g2fi21dt.ndf',
size=10,
maxsize=50,
filegrowth=5)
log on
(name=company1_log,
filename='f:\Program Files\mssql7\Data1\comlog.ldf',
size=5,
maxsize=25,
filegrowth=5)
go
/*修改大小*/
use my_library
go
alter database my_library
add file
(name=testdat2,
filename='f:\Program Files\mssql7\Data1\t1dat2.ndf',
size=5MB,
maxsize=100,
filegrowth=5)
go
use company2
go
alter database company2
add file
(name=pri3_dat,
filename='f:\Program Files\mssql7\Data1\pri31dat.mdf',
size=5mb,
maxsize=100mb,
filegrowth=5mb),
(name=pri4_dat,
filename='f:\Program Files\mssql7\Data1\pri41dat.mdf',
size=5mb,
maxsize=100mb,
filegrowth=5mb) to filegroup comgroup1
alter database company2
modify file
(name=pri3_dat,
size=20mb)
go
dbcc shrinkfile(pri3_dat,15)
go
/*删除数据库*/
drop database archive1
/*以下都是在pubs库中的操作*/
/*产生表*/
create table student
(sno char(8) not null unique ,
sname char(8) not null unique,
ssex char(20) not null,
sage char (12) not null,
sadd char (40),
primary key (sno)
)
/*修改表*/
alter table student
add sdept char(20)
/*删除表*/
drop table student
/*查询表*/
select sum(qty) '销售总量'
from sales
select avg(qty) '平均销量'
from sales
select stor_id '销量最小书',qty '最小量'
from sales
where qty=(select min(qty)
from sales)
select *
from sales
order by qty desc
select stor_id,sum(qty)'总量',avg(qty)'平均',max(qty)'最大量',min(qty)'最小量'
from sales
group by stor_id
having count(*)>2
select jobs.job_id,job_desc,lname+','+fname,hire_date
from jobs
join employee
on jobs.job_id=employee.job_id
/*插入表*/
insert into dtproperties
values('1','5','beijing','BJ','de','23')
/*增加约束*/
alter table discounts
add constraint pk_id
primary key(discounttype)
/*产生缺省对象*/
create default zero
as 0
sp_bindefault "zero","discounts.lowqty"
/*增加约束*/
alter table authors
add constraint ck_id
check(contract>=0)
/*增加约束*/
alter table authors
add constraint uk_id
unique(au_id)
/*增加约束*/
alter table titles
add constraint foreignkey_pub_id
foreign key(pub_id)
references publishers(pub_id)
/*创建视图*/
create view author_view
as
select au_id,au_fname,au_lname,contract
from authors
where state='CA'
/*通过视图插入数据*/
insert into author_view
(au_id,au_fname,au_lname,contract)
values('123-23-3456','zhaoxia','yang',1)
/*通过视图更新数据*/
update author_view
set contract=2
where au_fname='zhaoxia'
/*产生索引*/
create index titleid_idx
on titles(title_id)
/*授权和撤消授权*/
grant select on authors
to cnk6
revoke select on authors
from cnk6
/*创建存储过程*/
CREATE PROCEDURE nocontract_au
as
select au_id ,contract
from authors
where contract=0
/*创建触发器*/
create trigger del
on jobs
for delete
as delete from employee
where jobs.job_id=employee.job_id
/*创建、打开和使用游标*/
declare a_ta_t cursor scroll for
select au_lname,title,price
from authors a,titleauthor ta,titles t
where a.au_id=ta.au_id
and ta.title_id=t.title_id
and a.state="CA"
for update of price
declare @fetch_status int
open a_ta_t
fetch a_ta_t
select @fetch_status=@@FETCH_STATUS
while @fetch_status=0
begin
update titles
set price=price/1.5
where current of a_ta_t
fetch a_ta_t
select @fetch_status=@@FETCH_STATUS
end
close a_ta_t
deallocate a_ta_t
declare @author varchar(20)
set @author='作者'
select @author,au_lname,au_fname
from authors
where state="ca"
/*创建规则对象*/
create rule list_rule
as
@list in('1389','0736','0877')
sp_addmessage 50002, 16, 'This is a test%s'
RAISERROR (50002, 16, -1, "aaa") |
|