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

首先通过代码重现建立三个基础练习表格,代码重现参照了老师的博客,以下为连接:

https://blog.csdn.net/qq_38975453/article/details/104696976

在这里插入图片描述
下面我们在这三张表格的基础上进行练习:
一、INDEX练习
[例3.13]

create unique index stusno on student(sno)
create unique index coucno on course(cno)
create unique index scno on sc(sno ASC,cno DESC)

该段语句代码意为在student、course表中分别按学生学号和课程号建立索引,其中系统默认按升序进行排序第三个语段意为在sc表中先按学生学号升序(ASC)进行排序,在排完序的基础上,如果有某个学号有对应多门课程号,则在该基础上在某个学号内部对课程号按降序(DESC)进行排序。

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

alter index scno rename to scsno

在这里插入图片描述该语句会报错,查阅资料得知在SQL serever中,alter不支持修改表名和索引名,如若改变索引名就需要调用存储过程。

[3.15]删除索引

drop index stusno
/*该语句会报错必须为 DROP INDEX 语句指定表名和索引名。*/

查阅资料得知:在SQL serever中,drop删除索引时必须指明表明和索引名。

  drop index stusno on student;
  /*或者*/
  drop index student.stusno;

二、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);
select * from student
/*违反了 PRIMARY KEY 约束“PK__student__DDDF6446C429FFA8”。不能在对象“dbo.student”中插入重复键。重复键值为 (201215128)*/

错误原因:建表时规定学号唯一,而在建表时已经加入了该学号,所以不能有两个相同学号。

[例3.70]将学生张老三的信息插入到Student表中。

insert into student(sno,sname,ssex,sdept,sage) values('201215124','张老三','男',18,'CS');
select * from student

在这里插入图片描述

可省略属性名,但values后数据必须按表格表头的顺序

insert into course(cno,cname,cpno,ccredit) values ('1','数据库',NULL,4);
select * from crouse
/*违反了 PRIMARY KEY 约束“PK__course__D836175590913535”。不能在对象“dbo.course”中插入重复键。重复键值为 (1   )。*/

cpno是外键,而且引用的是该表的主键cno。参照完整性规则,外键cpno的取值不为空的情况下,与其对应的主键cno必须存在,所以这里cpno故意写的NULL。

[例3.71] 插入一条选课记录( ‘200215128’,'1 ')。

insert into sc(sno,cno) values('201215128','1');
select * from sc

在这里插入图片描述
关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。

三、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 sno,sname,sdept from student;

在这里插入图片描述[3.18]

 select sno,sname,ssex,sage,sdept from student; 
 等价于 
 select * from student; 

查询student表中的所有信息。
[3.19]

select sname,2016-sage from student

通过当年年份和学生年龄查询其出生年份。
在这里插入图片描述

[3.20]

select sname,'Year of Birth:',2014-sage,lower(sdept) from student

在这里插入图片描述
[3.21]

select sno from sc;
/*等价于*/
select all sno from sc;

如果没有指定distinct,即使sno有重复也会显示。如果指定distingct,则重复的不显示。

[3.22]

select sname from student where sdept='cs'

特别注意:sql语句和其他编程语言的不同在于“=”不是两个等号,由于惯性思维很容易犯错。
在这里插入图片描述
[3.23]

select sname,sage from student where sage<20

在student表格中插学年龄小于20的学生名字和年龄:

在这里插入图片描述
[3.24]

select distinct sno from sc where grade<60

在sc表格中,查询分数小于60的学生学号,若同一个学生有多门课程分数小于60,则只显示一次。
[3.25]

select sname,sdept,sage from student where sage between 20 and 23

在student表格中查询年龄大于等于20小于等于23的学生的名字,课程,和年龄。
在这里插入图片描述
[3.26]

select sname,sdept,sage from student where sage not between 20 and 23

注意在between之前加not,与25正好相反。

在这里插入图片描述
[3.27]

select sname,ssex from student where sdept in('cs','ma','is');

in里面的属性之间的关系可以理解为or,即学生表中的学生的专业只要满足in中三个里面其中之一即可显示。

在这里插入图片描述
[3.28]

select sname,ssex from student where sdept not in('cs','ma','is');

与27相比,28在in前面加了not,类似between,如果student表格中的学生的专业均不属于该三个类型之一,即可显示查询。

本次练习用时一个小时十分钟,感觉现在sql还在入门阶段目前的问题大都比较容易解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值