【HBU】数据库第三周-2 INDEX、INSERT、SELECT

索引 index

建立索引(INDEX)的目的:加快查询速度

关系数据库管理系统中常见索引:
 - 顺序文件上的索引
 -  B+树索引
 - 散列(hash)索引
 -  位图索引

建立索引

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

<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。
缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTER:表示要建立的索引是聚簇索引

==例:==为学生-课程数据库中的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);

在这里插入图片描述
索引已经建立

修改索引

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

将SC表的SCno索引名改为SCSno

ALTER INDEX SCno RENAME TO SCSno;

但是在sql server里无法使用
在这里插入图片描述
可以使用:

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

来实现
在这里插入图片描述
##删除索引

DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述

删除Student表的Stusname索引
DROP INDEX Stusname;

在这里插入图片描述
已删除刚刚那个索引了。

insert 插入数据

两种插入数据方式

  • 插入元组
  • 插入子查询结果(可以一次插入多个元组)

语句格式

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

将新元组插入指定表中

INTO:
◼ 指定要插入数据的表名及属性列
◼ 属性列的顺序可与表定义中的顺序不一致
◼ 没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定
义中的顺序一致
◼ 指定部分属性列:插入的元组在其余属性列上取空值

VALUES子句:
◼ 提供的值必须与INTO子句匹配
· 值的个数
· 值的类型

将一个新学生元组(学号:201215128;姓名:陈冬;
性别:男;所在系:IS;年龄:18岁)插入到Student表中。

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

在这里插入图片描述
插入进来了

将学生张成民的信息插入到Student表中。(INTO 子句不写属性名的情况)

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

第一句话会运行失败

INSERT INTO 
Course(Cno,Cname,Cpno,Ccredit)
VALUES ('1','数据库','5',4);

INSERT INTO 
Course(Cno,Cname,Cpno,Ccredit)
VALUES ('1','数据库',NULL,4);

因为没有注意到完整性约束。
在插入的时候 还不存在’5’这个值
可以先如第二句一样 先赋值为NULL 待全部赋值完毕后 再一一修改。

插入一条选课记录( ‘200215128’,'1 ')。




INSERT
INTO SC(Sno,Cno)
VALUES ('201215128 ',' 1 ');
//等同于
INSERT
INTO SC
VALUES (' 201215128 ',' 1 ',NULL);

因为 关系数据库管理系统将在新插入记录的Grade列上自动地赋空值

SELECT 查询语句

语句格式

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

选择表中的若干列

查询全体学生的学号与姓名。

SELECT Sno,Sname
FROM Student;

在这里插入图片描述
查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept
FROM Student;

在这里插入图片描述
查询全部列
选出所有属性列:
·在SELECT关键字后面列出所有列名
·将<目标列表达式>指定为 *
查询全体学生的详细记录

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

在这里插入图片描述

查询经过计算的值

SELECT子句的<目标列表达式>不仅可以为表中的属
性列,也可以是表达式

查全体学生的姓名及其出生年份。

SELECT Sname,2016-Sage /*假设当时为2016年*/
FROM Student;

在这里插入图片描述
查询全体学生的姓名、出生年份和所在的院系,要
求用小写字母表示系名。

SELECT Sname,'Year of Birth: ',2014-Sage,LOWER(Sdept)
FROM Student;

lower来得到小写字母
在这里插入图片描述

选择表中的若干元组

消除取值重复的行
如果没有指定DISTINCT关键词,则缺省为ALL
即如果没有指定的DISTINCT:

SELECT Sno FROM SC;

等价于

SELECT ALL Sno FROM SC;

但若加上:DISTINCT
会自动去重:

SELECT DISTINCT Sno
FROM SC;

查询满足条件的元组

在这里插入图片描述
例:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值