以下内容与课本上的还是有很多不一样的!!!
本文目录不迷路
1.建立索引
在SQL语言中,建立索引使用CREATE INDEX 语句,其一般格式为
CREATE [ UNIQUE ] [ CLUSTER ] INDEX<索引名>
ON <表名>(<列名> [<次序>] [,<列名> [<次序>]]...)
次序可选:
ASC:升序,默认。
DESC:降序。
UNIQUE:此索引的每一个索引值只对应唯一的数据记录。
CLUSTER:表示要建立的索引是聚簇索引。
【例3.13】为学生-课程数据库中的Student, Course和SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯-索引,SC表按学号升序和课程号降序建唯一索引。
create unique index Stusno on Student(Sno);
create unique index Coucno on Course(Cno);
create unique index SCno on SC(Sno ASC,Cno DESC);
2.修改索引
一般格式为
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
【例3.14】将SC表的SCno索引名改为SCSno。
alter index SCno rename to SCSno;
正确代码:
EXEC sp_rename 'SC.SCno', 'SCSno', 'index'
更改成功,但是有一个注意事项。
3.删除索引
一般格式为:
DROP INDEX <索引名>;
【例3.15】删除Student表的Stusname索引。
drop index Stusname;
又错了,,,而且Student表中没有Stusname索引,只有Stusno索引,故,这里我们以删除后者为例子。
正确的代码:
drop index Student.Stusno;
此时该索引已被删除。
4.插入数据
1.插入元组
一般格式:
INSERT
INTO <表名> [(<属性列1>[,<属性列2>]...)]
VALUES(<常量1>[,<常量2>]...);
【例3.69】将一个新学生元组(学号:201215128,姓名:陈冬,性别:男,所在系:IS,年龄:18岁)插入到Student表中。
insert
into Student(Sno,Sname,Ssex,Sdept,Sage)
values('201215128','陈冬','男','IS',18);
【例3.70】将学生张成民的信息插入到Student表中。
insert
into Student
values('201215126','张成民','男',18,'CS');
【例3.71】插入一条选课记录(‘201215128’,‘1’)。
有外键约束,SC表存在一个字段Cno,有外键约束,引用于Course表的主键Cno,那么在向SC表插入数据时,字段Cno必须为Course表中Cno已经存在的值,如果SC中存放一个Cno中没有的值,则会报违反外键约束。
insert
into SC(Sno,Cno)
values('201215128','1');
或者
insert
into SC
values('201215128','1',NULL);
若先在Course表中输入课程信息,就会得到以下结果。
2.插入子查询结果
【例3.72】对每一个系,求学生的平均年龄,并把结果存入数据库。
首先新建一个表
create table Dept_age
(Sdept char(15),
Avg_age smallint);
然后对Student表按系分组求平均年龄,再把系名和平均年龄存入新表。
insert
into Dept_age(Sdept,Avg_age)
select Sdept,AVG(Sage)
from Student
group by Sdept;
select * from Dept_age
整个信息插入代码:
insert
into Student
values('201215121','李勇','男',20,'CS'),
('201215122','刘晨','女',19,'CS'),
('201215123','王敏','女',18,'MA'),
('201215125','张立','男',19,'IS');
insert
into Course
values('1','数据库','5',4),
('2','数学',NULL,2),
('3','信息系统','1',4),
('4','操作系统','6',3),
('5','数据结构','7',4),
('6','数据处理',NULL,2),
('7','PASCAL语言','6',4);
insert
into SC
values('201215121','1',92),
('201215121','2',85),
('201215121','3',88),
('201215122','2',90),
('201215122','3',80);
SELECT *
FROM Student
SELECT *
FROM SC
SELECT *
FROM Course
其实没有那么容易插入,要考虑外键的约束问题,,,还有很多约束,不能简单的复制过去直接运行,有报错的。
5.数据查询
单表查询
1.选择表中的若干列
(1)查询指定列
【例3.16】查询全体学生的学号与姓名。
select Sno,Sname
from Student;
【例3.17】查询全体学生的姓名,学号,所在系。
select Sname,Sno,Sdept
from Student;
(2)查询全部列
【例3.18】查询全体学生的详细记录。
select *
from Student;
或者
select Sno,Sname,Ssex,Sage,Sdept
from Student;
温馨提示:
这一部分还没有结束啊!