一、创建数据库
创建一个数据库,数据库名为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 by和having子句。
Select sno
From sc
Group by sno
Having count(cname)>=2
8、查询有选课记录的所有学生的学号,用distict限制结果中的学号不重复。
Select distinct sno
From sc
9、将view1的所有学生年龄增加一岁。思考:能否实现,如果不能实现指明原因?
Update view1 set 年龄=年龄+1
不能实现,因为年龄是计算得到的,无法转换为对表的修改。
发布评论