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

【INDEX】
新建索引⬇

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

<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTERED:表示要建立的索引是聚簇索引(PPT上是CLUSTER,但是这个字母在代码块里没有变色(我总是有奇奇怪怪的关注点),查了一下发现应该是CLUSTERED

修改索引⬇

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

显示RENAME附近有语法错误,查资料得知应该用这个语句⬇

EXEC sp_rename '表名.旧索引名', '新索引名', 'index'

参考博客:https://blog.csdn.net/dhv98472/article/details/101472300?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158375280719725256720045%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158375280719725256720045&biz_id=0&utm_source=distribute.pc_search_result.none-task

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

DROP INDEX <索引名>;

显示必须为 DROP INDEX 语句指定表名和索引名。然后我就在前边加了个表名,就对了,耶!

DROP INDEX 表名.索引名;

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

在这里插入图片描述
【例3.14】将SC表的SCno索引名改为SCSno。

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

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

 DROP INDEX Stduent.Stusno;

———————————————————————————————————

【INSERT】

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

INTO子句中没有出现的属性列,新元组在这些列上取空值。
注意:定义时说明了NOT NULL的属性列不能取空。
INTO没有指明属性列名,新插入的元组必须在每个属性列上都有值。

【例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’)

INSERT INTO SC
VALUES('201215128','1',NULL);        /*SC插入之前要确保前面的表里有前两列的内容因为它们俩是外键。*/

一开始我没写NULL他给我报错喽 所以T-SOL应该不会自动赋空值
我插入之后会显示(1行受影响),查了资料是正常现象,大概跟插入成功这种的提示句差不多。

———————————————————————————————————

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

等价于

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 属性名 别名
FROM/*不要忘记加空格*/

⬇对比
在这里插入图片描述
————————————消除取值重复的行———————————————

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

SELECT Sno
FROM SC;

在这里插入图片描述
有重复行,若想去掉,必须指定DISTINCT⬇

SELECT DISTINCT Sno
FROM SC;

在这里插入图片描述

查询条件 谓词
比较 =,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符
确定集合 IN,NOT IN
字符匹配 LIKE,NOT LIKE
空值 IS NULL,IS NOT NULL
多重条件(逻辑运算) AND,OR,NOT

!=或<>都是不等于
————————————查询满足条件的元组——————————————
【例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');

写完啦!大概计算了一下,在认真敲代码写博客的时间大概是两个小时,实际上是一会跟好朋友在QQ上聊几句一会跟我妈聊两句,加上这些有的没的就比两个小时要长啦XD。这次的作业个人觉得不难,查询啊添加啊这些语句都有模板,一般一类敲两个代码就会用了。但是还是要经常练习不然会忘记的!
还是稍微挑选了一小部分截了图,前边的报错内容没有截图但是用加粗字体显示了也查资料成功解决啦!(我现在就蛮希望CSDN出一个可以修改字体颜色的嘻嘻)。

发布了10 篇原创文章 · 获赞 15 · 访问量 4752

猜你喜欢

转载自blog.csdn.net/qq_44871112/article/details/104758847