**一:【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即可…
注意语句的使用格式,记忆栗子是好方法。