数据库第四周实验——索引,插入,查询 ——例题实现

一.索引的建立与删除

(一)建立索引

CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);

88页【例3.13】为学生-课程数据库中的Student、Course和SC 三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。
ASC表示升序,DESC表示降序。缺省值:ASC。

CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);

先对Sno进行升序排序,对某个Sno对Cno进行降序排序
数据库第四周实验——索引,插入,查询 ——例题实现
(二)修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

89页【例3.14】将SC表的SCno索引名改为SCno。

ALTER INDEX SCno RENAME TO SCSno;

数据库第四周实验——索引,插入,查询 ——例题实现
原因:alter不能改变索引名,如若改变索引名就需要调用存储过程。

调用存储过程代码如下:

EXEC sp_rename @objname = 'student.stusno1', @newname = 'stusno2', @objtype = 'index'
/*或者如下*/
EXEC sp_rename '表名.旧索引名', '新索引名', 'INDEX'

调用存储过程时会出现:

注意: 更改对象名的任一部分都可能会破坏脚本和存储过程。

这时命令已经成功执行了。

EXEC sp_rename N'SC.SCno',N'SCSno',N'INDEX' ;
GO

数据库第四周实验——索引,插入,查询 ——例题实现

(三)删除索引

DROP INDEX <表名.索引名>;

89页【例3.15】删除Course表的Course索引。

DROP INDEX Course;

书上的代码有误
数据库第四周实验——索引,插入,查询 ——例题实现
正确代码:

DROP INDEX Course.Course;

数据库第四周实验——索引,插入,查询 ——例题实现

二.插入数据(插入元组)

INSERT 
INTO <表名> [(<属性列1>[,<属性列2>]...)]
VALUES(<常量1>[,<常量2>]...);

116页【例3.69】将一个新学生元组(学号:201215128,姓名:陈冬,性别:男,所在系:IS,年龄:18岁)插入到Student表中

INSERT
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215128','陈冬','男','IS',18);

116页【例3.70】将学生张成民的信息插入到Student表中。

INSERT
INTO Student 
VALUES('201215126','张成民','男',18,'CS');

116页【例3.71】插入一条选课记录(‘201215128’,‘1’)。

INSERT
INTO SC(Sno,Cno)
VALUES('201215128','1');

INSERT
INTO SC
VALUES('201215128','1',NULL);

数据库第四周实验——索引,插入,查询 ——例题实现
解析理论:外键约束,SC表存在一个字段Cno,有外键约束,引用于Course表的主键Cno,那么在向SC表插入数据时,字段Cno必须为Course表中Cno已经存在的值,如果SC中存放一个Cno中没有的值,则会报违反外键约束。

注意:SQL的空语句不能用空格,空格也占1个字符,要用NULL,要么不写系统自定义为NULL

INSERT
INTO Course
VALUES('9','离散数学','',4)

数据库第四周实验——索引,插入,查询 ——例题实现
Student,Course,SC表整体插入查询:

--创建学生表Student
INSERT
INTO Student
VALUES('201215121','李勇','男',20,'CS'),
	  ('201215122','刘晨','女',19,'CS'),
	  ('201215123','王敏','女',18,'MA'),
	  ('201215125','张立','男',19,'IS');

--创建课程表Course
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),
	  ('8','C语言',NULL,4),
	  ('9','离散数学',NULL,4);

--创建选课表SC
INSERT
INTO SC
VALUES('201215121','1',92),
	  ('201215121','2',85),
	  ('201215121','3',88),
	  ('201215122','2',90),
	  ('201215122','3',80);

SELECT * FROM Student;
SELECT * FROM Course;
SELECT * FROM SC;

数据库第四周实验——索引,插入,查询 ——例题实现

三.数据查询

一般格式:

SELECT [ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>...]|(<SELECT 语句>)[AS]<别名>
[WHERE<条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2>[ASC|DESC]];

单表查询
1.选择表中的若干列
选择表中的全部或部分列即关系代数的投影运算
(1)查询指定列
90页【例3.16】查询全体学生的学号与姓名。

SELECT Sno,Sname
FROM Student;

数据库第四周实验——索引,插入,查询 ——例题实现

90页【例3.17】查询全体学生的姓名,学号,所在系

SELECT Sname,Sno,Sdept
FROM Student;

数据库第四周实验——索引,插入,查询 ——例题实现

(2)查询全部列
90页【例3.18】查询全体学生的详细记录

SELECT * FROM  Student;

等价于

SELECT Sno,Sname,Ssex,Sage,Sdept 
FROM  Student;

图例在上面

上一篇:HTTP请求 GET与POST是怎么实现?


下一篇:大数据运维架构师培训(2):Hbase,Hive, Phoenix,Pig,Impala,Kudu