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


本文目录不迷路

  • 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);

数据库更新索引字段 数据库索引升序_mysql


数据库更新索引字段 数据库索引升序_数据库_02


数据库更新索引字段 数据库索引升序_Sage_03

2.修改索引

一般格式为

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

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

alter index SCno rename to SCSno;

数据库更新索引字段 数据库索引升序_数据库_04


【alter更改索引名】‘rename’ 附近有语法错误。

正确代码:

EXEC sp_rename 'SC.SCno', 'SCSno', 'index'

数据库更新索引字段 数据库索引升序_数据库更新索引字段_05


更改成功,但是有一个注意事项。

数据库更新索引字段 数据库索引升序_sql_06

3.删除索引

一般格式为:

DROP INDEX <索引名>;

【例3.15】删除Student表的Stusname索引。

drop index Stusname;

又错了,,,而且Student表中没有Stusname索引,只有Stusno索引,故,这里我们以删除后者为例子。

数据库更新索引字段 数据库索引升序_sql_07


正确的代码:

drop index Student.Stusno;

此时该索引已被删除。

数据库更新索引字段 数据库索引升序_mysql_08

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);

数据库更新索引字段 数据库索引升序_数据库更新索引字段_09

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

insert
into Student
values('201215126','张成民','男',18,'CS');

数据库更新索引字段 数据库索引升序_数据库_10

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

数据库更新索引字段 数据库索引升序_数据库_11


有外键约束,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表中输入课程信息,就会得到以下结果。

数据库更新索引字段 数据库索引升序_Sage_12

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

数据库更新索引字段 数据库索引升序_数据库更新索引字段_13

整个信息插入代码:

--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

其实没有那么容易插入,要考虑外键的约束问题,,,还有很多约束,不能简单的复制过去直接运行,有报错的。

数据库更新索引字段 数据库索引升序_sql_14

5.数据查询

单表查询

1.选择表中的若干列

(1)查询指定列

【例3.16】查询全体学生的学号与姓名。

select Sno,Sname
from Student;

数据库更新索引字段 数据库索引升序_数据库_15

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

select Sname,Sno,Sdept
from Student;

数据库更新索引字段 数据库索引升序_数据库_16


(2)查询全部列

【例3.18】查询全体学生的详细记录。

select *
from Student;

或者

select Sno,Sname,Ssex,Sage,Sdept
from Student;

温馨提示:

这一部分还没有结束啊!