INDEX / INSERT / SELECT 的使用

建立索引

语句格式:

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

需要注意的是:ASC为升序(默认情况下为ASC),DESC为降序
在这里插入图片描述

【例 3.13】为学生-课程数据库中的Student,Course,SC三个表建立索引。Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引

//为Student表按学号升序建唯一索引,默认为升序
CREATE UNIQUE INDEX Stusno ON Student(Sno);
//为Course表按课程号升序建唯一索引,默认为升序
CREATE UNIQUE INDEX Coucno ON Course(Cno);
//SC表按学号升序和课程表降序建唯一索引
CREATE UNIQUE INDEX SCno ON SC(SNO ASC,Cno DESC);

建立好的索引就是这样啦!!!
在这里插入图片描述
我这里在操作的过程中出现了一点点小问题
在这里插入图片描述
emmm ,这是咋回事呢?? 出现这种问题的小伙伴们不要慌,这样的原因是:我们在之前已经创建了这样索引,这段代码已经是第n次执行啦!所以,我们的索引已经创建好了!!

🤔:在第三个索引中,Sno升序排列与Cno降序排列,二者有没有冲突?
这里是说Sno升序排列正好是Cno降序排列吗???不是的!
这里建立的索引是先按照学号升序排序,在学号相同的情况下,再按照课程号降序进行排列(这样解释就很清楚啦!)

修改索引

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

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

ALERT INDEX SCno RENAME TO SCSno;

运行代码时出现了问题,最后上网查资料,没找到合适答案!在老师的帮助下,解决了问题!这里是参考的某位好心同学的博客中的某个链接,这里直接附上原链接🗝

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

删除索引

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

[例3.15] 删除Student表的Stusname索引

DROP INDEX Stusname;

但是使用这条语句,还是会报错!!这里必须添加表名,才能正常执行!(个人理解:可能在建立索引的时候,不同表的索引名可能一样,所以光写索引名可能并不能找到,要加上表名才能找到)

DROP INDEX Student.Stusname

插入元组

语句格式:

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

功能:将新元组插入指定表中在这里插入图片描述
【例 3.69】将一个新学生元组(学号:201215128;姓名:陈冬;性别:男;所在系:IS;年龄:18岁)插入到Student表中

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

在这里插入图片描述

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

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

在不写属性名的情况下,VALUES的值必须和建表时的属性名相对应!!

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

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

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

数据查询

语句格式:

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

在这里插入图片描述

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

SELECT Sno,Sname
FROM Student

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

SELECT Sno,Sname,Sdept
FROM Student

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

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

或者,查询详细的,写这么属性名觉得太麻烦了,直接用 * 代替他们即可!(这样输入速度就很快啦)

SELECT *
FROM Student

【例 3.19】查全体学生的姓名及其出生年份。

SELECT Sname,2020-Sage
FROM Student;

因为数据库里存储的是年龄,所以要用当前的年份减去年龄,但是在数据库里还是存储出生年月比较好,不会改变!!

【例 3.20】查询全体学生的姓名、出生年份和所在的院系,要求用小写字母表示系名。

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

LOWER()相当于C语言中的函数,可以将所有字母转变为小写

【例 3.21】查询选修了课程的学生学号。

SELECT Sno FROM SC; 或者为 SELECT ALL Sno FROM SC;

【例 3.22】查询计算机科学系全体学生的名单。

SELECT Sname
FROM Student
WHERE Sdept = 'CS';

前两行就是普通的查询语句,和前面的例子都一样,第三行就相当于又给查询增加了一个限制语句

【例 3.23】查询所有年龄在20岁以下的学生姓名及其年龄。

SELECT Sname,Sage
FROM Student
WHERE Sage < 20;

【例 3.24】查询考试成绩有不及格的学生的学号。

SELECT DISTINCT Sno
FROM SC
WHERE Grage < 60;

DISTINCT 的作用就相当于对于学号相同的学号,只显示其中一个

【例 3.25】查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

DELECT Sname,Sdept,Sage
FROM Student
WHERE Sage BETWEEN 20 AND 23;

BETWEEN … AND …包括边界值

【例 3.26】查询年龄不在20~23岁之间的学生姓名、系别和年龄

DELECT Sname,Sdept,Sage
FROM Student
WHERE Sage NOT BETWEEN 20 AND 23;

NOT BETWEEN … AND …表示否定

到这里,这次作业就算结束啦!!我用了大概三个小时,上课听老师讲完,再做一遍确实会加深记忆和理解,自己做的过程中也会遇到不少问题,加深了对知识的理解!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值