以下内容与课本上的还是有很多不一样的!!!
本文目录不迷路
- 1.建立索引
- 【例3.13】为学生-课程数据库中的Student, Course和SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯-索引,SC表按学号升序和课程号降序建唯一索引。
- 2.修改索引
- 【例3.14】将SC表的SCno索引名改为SCSno。
- 3.删除索引
- 【例3.15】删除Student表的Stusname索引。
- 4.插入数据
- 1.插入元组
- 【例3.69】将一个新学生元组(学号:201215128,姓名:陈冬,性别:男,所在系:IS,年龄:18岁)插入到Student表中。
- 【例3.70】将学生张成民的信息插入到Student表中。
- 【例3.71】插入一条选课记录(‘201215128’,‘1’)。
- 2.插入子查询结果
- 【例3.72】对每一个系,求学生的平均年龄,并把结果存入数据库。
- 整个信息插入代码:
- 5.数据查询
- 单表查询
- 【例3.16】查询全体学生的学号与姓名。
- 【例3.17】查询全体学生的姓名,学号,所在系。
- 【例3.18】查询全体学生的详细记录。
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
整个信息插入代码:
--Edit by David @ HeBei University 2018
DROP TABLE IF EXISTS SC
DROP TABLE IF EXISTS Student
DROP TABLE IF EXISTS Course
CREATE TABLE Student
(
Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件,Sno是主码*/
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course
(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
);
CREATE TABLE SC
(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno), /* 表级完整性约束条件,Sno是外码,被参照表是Student */
FOREIGN KEY (Cno)REFERENCES Course(Cno) /* 表级完整性约束条件, Cno是外码,被参照表是Course*/
);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215121','李勇','男','CS',20);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215122','刘晨','女','CS',19);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215123','王敏','女','MA',18);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215125','张立','男','IS',19);
INSERT INTO Student (Sno,Sname,Ssex,Sdept,Sage) VALUES ('201215128','陈冬','男','IS',20);
SELECT * FROM Student
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('1','数据库',NULL,4);
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('2','数学',NULL,4);
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('3','信息系统',NULL,4);
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('4','操作系统',NULL,4);
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('5','数据结构',NULL,4);
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('6','数据处理',NULL,4);
INSERT INTO Course(Cno,Cname,Cpno,Ccredit) VALUES ('7','Pascal语言',NULL,4);
UPDATE Course SET Cpno = '5' WHERE Cno = '1'
UPDATE Course SET Cpno = '1' WHERE Cno = '3'
UPDATE Course SET Cpno = '6' WHERE Cno = '4'
UPDATE Course SET Cpno = '7' WHERE Cno = '5'
UPDATE Course SET Cpno = '6' WHERE Cno = '7'
SELECT * FROM Course
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215121 ','1',92);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215121 ','2',85);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215121 ','3',88);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215122 ','2',90);
INSERT INTO SC(Sno,Cno,Grade) VALUES ('201215122 ','3',80);
SELECT * FROM SC
其实没有那么容易插入,要考虑外键的约束问题,,,还有很多约束,不能简单的复制过去直接运行,有报错的。
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;
温馨提示:
这一部分还没有结束啊!