数据库【数据索引&插入&查询】

以下内容与课本上的还是有很多不一样的!!!

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;

在这里插入图片描述
【alter更改索引名】‘rename’ 附近有语法错误。

正确代码:

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;

温馨提示:

这一部分还没有结束啊!

猜你喜欢

转载自blog.csdn.net/qq_45745322/article/details/115133047