SQL Server——从入门到放弃(2)--INDEX / INSERT / SELECT 练习

上次练习使用的三个基本表格这次依旧要用,但经过一系列的删改,表格早就面目全非了,因此,首先要做的就是恢复表格。
恢复完成效果图:
在这里插入图片描述
具体描述以及完整代码请见这个链接
准备工作完成后,开始练习。
【例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

ALTER INDEX SCno RENAME TO SCSno

执行结果:
在这里插入图片描述
原因:alter不能改变索引名,如若改变索引名就需要调用存储过程。
详细内容描述:这是一个链接

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

DROP INDEX Stusname

这个代码不能执行,会报错,原因是必须为 DROP INDEX 语句指定表名和索引名。
正确语句应为

DROP INDEX student.stusname
/*或者*/
DROP INDEX stusname ON Student

【例3.69】将一个新学生元组(学号:201215128;姓名:陈冬:性别:男;所在系:IS;年龄:18)插入到Student表中

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

SELECT * FROM Student;

代码会报错,原因是建表时规定学号唯一,而在建表时已经加入了该学号,所以不能有两个相同学号。
对代码做少许修改得到的运行结果为

SELECT * FROM Student;
INSERT 
INTO Student(Sno,Sname,Ssex,Sdept,Sage)
VALUES('201215120','陈西','男','IS',18);

SELECT * FROM Student;

在这里插入图片描述

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

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

SELECT * FROM Student;

插入时可以不写属性名,但元素次序需要与表格要求顺序相同。

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

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

SELECT * FROM SC;

在这里插入图片描述
关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。
也可以采用下面的写法:

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

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

SELECT Sno,Sname FROM Student

在这里插入图片描述

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

SELECT Sname,Sno,Sdept FROM Student

在这里插入图片描述

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

SELECT Sname,Sno,Sdept,Ssex,Sage,Sdept 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

在这里插入图片描述

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

SELECT Sno FROM SC
/*等价于*/
SELECT ALL Sno FROM SC

在这里插入图片描述

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

SELECT Sname FROM Student WHERE Sdept='CS'

注意: SQL语言中“=”只有一个,不是其它语言的“==”。
在这里插入图片描述

【例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.27】查询计算机科学系(CS)、数学系(MA)和信息系(IS)学生的姓名和性别

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

in里面的属性之间的关系可以理解为,即学生表中的学生的专业只要满足in中三个里面其中之一即可。
在这里插入图片描述

【例3.28】查询既不是计算机科学系(CS)、数学系(MA),又不是信息系(IS)的学生的姓名和性别

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

in里面的属性之间的关系可以理解为,即学生表中的学生的专业需要满足in中三个里面所以条件才可。

都看到这里了,点个赞再走吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值