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

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

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

(2).修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>

[例3.14] 将SC表的SCno索引名改为SCSno

 ALTER INDEX SCno RENAME TO SCSno;

(3).删除索引
DROP INDEX <索引名>;删除索引时,系统会从数据字典中删去有关该索引的描述。

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

DROP INDEX Stusname;

2.INSERT
语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );

功能:将新元组插入指定表中

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

VALUES子句
1 提供的值必须与INTO子句匹配
2 值的个数
3 值的类型

【例3.69】P114

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

【例3.70】P114

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


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

为啥这里要写NULL,我试了不写NULL,写的5,结果出现INSERT 语句与 FOREIGN KEY SAME TABLE 约束"FK__Course__Cpno__3C69FB99"冲突。该冲突发生于数据库"STUDENT"表"dbo.Course", column ‘Cno’。
去网上搜索一下,说是数据库关系图有主外键设置错误。

【例3.71】P114

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

3.SELECT

[例3.16] 查询全体学生的学号与姓名。

SELECT Sno,Sname
FROM Student;

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

SELECT Sname,Sno,Sdept
FROM Student;

[例3.18] 查询全体学生的详细记录

SELECT  *
FROM Student;

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

SELECT Sname,2020-Sage          
FROM Student;

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

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

[例3.21] 查询选修了课程的学生学号。

SELECT 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 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.25差不多,加个NOT就可以了

[例3.27]查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别。

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

[例3.28]查询既不是计算机科学系、数学系,也不是信息系的学生的姓名和性别。

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

一个套路。。。

综上所述,代码真的有点多,敲得头晕眼花的,呜呜呜。

你可能感兴趣的:(数据库作业5:SQL练习2 - INDEX / INSERT / SELECT)