【3.9数据库作业5】SQL练习2 - INDEX / INSERT / SELECT

**一:【INDEX】**索引的建立与删除

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

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

1:建立索引
[例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);

前两个都属于缺省建立为升序,第三个是先按Sno升序,当Sno相同时按Cno降序排列
2:修改索引
语句在此:

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

【例题3.14】:将SC表的SCno索引名改为SCSno
按上面的格式应该为 旧SCno 新SCScno

ALTER INDEX SCno RENAME TO SCSno;

在这里插入图片描述
从图上我们看到在SQL serever中,ALTER不能修改索引名,所以我们可以通过先删除再重新建立的方法来修改索引
3:删除索引

 DROP INDEX Stusname;

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

在这里插入图片描述
如图执行之后出现错误,所以我们在编辑语句的时候应该指定表明和索引名

DROP INDEX <用户名>.<索引名>;
DROP INDEX Student.Stusname;

**二:【INSERT】**数据的插入

先看一下INSERT语句的格式如何吧!

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.69.2】将学生张老三的信息插入到Student表中。

INSERT INTO  Student VALUES ('201215124','张老三','男',18,'CS');

在这里插入图片描述
这里我把Sdept和Sage的顺序换了一下 因为INSERT没有显示属性位置 所以我们应该按建表的时候的属性位置来INSERT
【例3.69.3】插入一条选课记录(‘201215128’,‘1’)。

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

注意:SC插入之前要确保Student和Course表里有前两列的内容
如果建表的时候说明了不能为空的属性列不能取NULL。

**三:【SELECT】**数据的查询

先看语句格式:

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

一:查询指定的记录
【例3.16】查询全体学生的学号与姓名。

SELECT Sno,Sname
FROM Student;

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

SELECT Sname,Sno,Sdept
FROM Student

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

SELECT *
FROM Student; 

这里*就代表

Sno,Sname,Ssex,Sage,Sdept 

所以上方语句<=>

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

三:查询经过计算的值
【例3.19】查询全体学生的姓名及其出生年份。

SELECT Sname,2014-Sage /*查询结果的第二列是一个算术表达式*/
FROM Student;

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

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

在这里插入图片描述
使用列别名改变查询结果的列标题:

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

在这里插入图片描述
三:查询经过计算的值
【例3.21】查询选修了课程的学生学号

SELECT Sno FROM SC;

结果中有重复行
在这里插入图片描述
这里只需加上DISTINCT 即可

SELECT DISTINCT Sno FROM SC;

四:查询满足条件的元组
【例3.22】查询计算机科学系全体学生的名单。

SELECT Sname FROM Student WHERE Sdept='CS';

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

SELECT Sname
FROM Student
WHERE Sage<20;

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

SELECT DISTINCT Sno
FROM SC
WHERE Grade<60;

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

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

【例3.26】不在20~23之间的

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

【例3.27】查询系别为CS、MA、IS的学生姓名性别。

SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('CS','MA','IS');

【例3.28】查询既不是CS、MA也不是IS的学生姓名性别。

SELECT Sname,Ssex
FROM Student
WHERE Sdept NOT IN('CS','MA','IS');

~-·-·-·-·-·–·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·–·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-·-
资源来自https://blog.csdn.net/qq_44871112/article/details/104758847
https://blog.csdn.net/MooM_X/article/details/104748994

最重要的一点就是注意SQL server与标准SQL的不同, (我的意思就是可能课本上的东西全拿过来不一定对,老师说过的),比如 DROP语句中级联CASCADE就不能在SQL ser中使用,去掉CASCADE即可…
注意语句的使用格式,记忆栗子是好方法。

发布了14 篇原创文章 · 获赞 13 · 访问量 1982

猜你喜欢

转载自blog.csdn.net/summer__kkkk/article/details/104875212