使用T-SQL语句完成下列题目,保存所有SQL语句为一个脚本文件,文件名为学号姓名.sqlSQL语句前加上题号。(共60分)
一、创建数据库
创建一个数据库,数据库名为student,主数据文件的逻辑名为student_data,物理名称为student_data.mdf,存放在D盘根目录下,初始大小为10MB,最大可增长到50MB,增长方式是按5%比例增长;日志文件的逻辑名称为student_log物理名称为student_log.ldf存放在D盘根目录下,初始大小为2MB,最大可增长到5MB,按1MB增长。
create database student     
on primary               
(name=student_data,                 
filename='D:\student_data.mdf',
size=10MB,
maxsize=50MB,
filegrowth=5%)
log on                 
(name=student_log,
filename='D:\student_log.ldf',
size=2MB,
maxsize=5MB,
filegrowth=1MB)
二、创建表
1、创建学生表,表名:学生
字段名
数据类型
约束
学号
char(8)
主键
姓名
char(20)
不允许空
性别
char(2)
不允许空
出生日期
datetime
允许空
use student
create table                              
(学号    char(8)    primary key,                   
姓名    char(20) not null,                       
性别    char(2)    not null check(性别 in('','')),   
出生日期    datetime null)                     
2、创建成绩表,表名:成绩
字段名
数据类型
约束
学号
char(8)
主键,参照学生表的学号
课程名
varchar(30)
主键
成绩
real
允许空
use student
create table 成绩                           
(学号    char(8),                           
课程名    varchar(30),                         
成绩    real    null check(成绩 between 0 and 100) 
primary key(学号,课程名),                   
foreign key (学号) references 学生(学号))     
3、在gxc数据库中创建商品表,表名:sp。结构如下:
sp
列名
数据类型
宽度
空否
约束
备注
bh
char
20
N
主键
商品编号
mc
varchar
50
N
商品名称
xkc
real
Y
现库存量
sj
money
Y
现销售价格
use gxc
Create table sp                       
(bh    char(20) primary key,             
mc    varchar(50) not null,                 
xkc    real,                               
sj    money)                       
4、在gxc数据库中创建供应表,表名:gy。结构如下:
gy
列名
数据类型
宽度
空否
约束
备注
ddh
char
10
N
主键
订单号
bh
char
20
N
主键,外键:参照商品表的主键bh
商品编号
sl
float
N
值大于0
进货数量
jg
money
Y
进价
jsj
datetime
Y
默认值为当前系统时间
进货时间
create table gy
(ddh    char(10),                         
bh    char(20) not null,                       
sl    float not null  check(sl>0),               
jg    money,
jsj    datetime default(getdate()),             
primary key(ddh,bh),                     
foreign key (bh) references sp(bh))         
5、往表中插入以下记录:
insert into sp values('2000000341316','精品红富士',200,3.50)     
insert into sp values('6930504300198','甜酒酿',50,2.00)           
insert into gy values('2007001','2000000341316',80,3.00,'2007-6-1') 
insert into gy values('2007001','6930504300198',30,1.70,'2007-6-1') 
三、创建查询、视图、索引
1)在student数据库完成下列各题
student表:sno:学号;sname:姓名;sex:性别;sbirth:出生日期;sdept:系别
sc表:sno:学号;cname:课程名称;grade:成绩
1、查询性别为“男”的学生的基本情况,并按学号升序排序;
sj成员资料
select *                                             
from 学生                                           
where  性别=''                                     
order by 学号 asc                                   
2、查询所有选修“数据库原理”的学生的学号、成绩。
Select 学生.学号,成绩                             
From 学生,成绩                                 
Where 学生.学号=成绩.学号 and 课程名='数据库原理
                           
3、创建视图view1,查询缺少成绩的学生的学号和相应的课程名。
Create view view1                                 
As                                             
Select 学号,课程名                               
From 成绩                                       
Where 成绩 is null                               
4、创建视图view2,查询出所有学生的学号、姓名、性别和年龄,该视图定义加密,即带with encryption参数。
Create view view2                                 
with encryption                                   
As
Select 学号,姓名,性别,year(getdate())-year(出生日期) 年龄           
From  学生                                       
             
5、查询出所有姓李,并且名为单个字的学生的基本信息。
Select  *                                     
From student                                   
Where sname like '_'                           
6、使用外部连接,查询每个学生基本信息及其选课情况,如果学生没有选课,也显示其基本信息。
Select student.*,cname,grade                   
From student left join sc                       
on student.sno=sc.sno 
                         
7、查询选修了两门及两门以上课程的学生的学号。提示:使用group byhaving子句。
Select  sno                               
From sc                                   
Group by sno                               
Having count(cname)>=2                     
8、查询有选课记录的所有学生的学号,用distict限制结果中的学号不重复。
Select distinct sno                               
From sc                                       
9、将view1的所有学生年龄增加一岁。思考:能否实现,如果不能实现指明原因?
Update  view1 set 年龄=年龄+1                       
不能实现,因为年龄是计算得到的,无法转换为对表的修改。