数据库语言的练习 2- INDEX / INSERT / SELECT(2020.3.9作业)

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

后两行需一一对应,可改变Sno,Sname,Ssex,Sdept,Sage的顺序
在这里插入图片描述
因建表时规定学号唯一,所以不能有两个相同学号
在这里插入图片描述
[例3.70]将学生张老三的信息插入到Student表中。

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

在这里插入图片描述
这种方式可省略属性名,但VALUES后数据必须按表格表头的顺序

给Course添加一行数据

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

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

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

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

关系数据库管理系统将在新插入记录的Grade列上自动地赋空值。
或者:

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

(在表里添加了成绩)
在这里插入图片描述
Sno和Cno是SC表的外键,SC表中的数据参照前两张表中的数据,所以必须是刚才两张表里面已经有的学号和姓名

INDEX

建立索引:

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

<表名>:要建索引的基本表的名字
索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
<次序>:指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC
UNIQUE:此索引的每一个索引值只对应唯一的数据记录
CLUSTERED:表示要建立的索引是聚集索引
NONCLUSTERED:表示要建立的索引是非聚集索引

[例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升序排列与Cno降序排列的意思是先按Sno升序排序,在相同的Sno下对于不同的Cno再降序排列

修改索引:

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

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

ALTER INDEX SCno RENAME TO SCSno;

而在SQL serever中,ALTER不能修改表名和索引名,如若改变索引名就需要调用存储过程。
在SQL serever中,ALTER可以:
1.新增列
ALTER TABLE Student ADD S_entrance DATETIME;–向基本表Student中增加“入学时间”属性列。

2.新增约束
例3.10

3.修改某字段的数据类型
例3.9
(https://blog.csdn.net/weixin_41287260/article/details/83627461)

删除索引:

DROP INDEX <索引名>;

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

 DROP INDEX Stusname;

在SQL serever中执行出现以下错误:必须为 DROP INDEX 语句指定表名和索引名。
应该为 :

DROP INDEX Student.Stusname;

格式为 :

DROP INDEX <用户名>.<索引名>;

(http://blog.sina.com.cn/s/blog_4fe8580b0100c8z2.html)

SELECT

数据查询:

SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]FROM <表名或视图名>[,<表名或视图名> ]|(SELECT 语句)      
[AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名1> [ HAVING <条件表达式> ] ]
[ ORDER BY <列名2> [ ASC|DESC ] ];

SELECT子句:指定要显示的属性列
FROM子句:指定查询对象(基本表或视图)
WHERE子句:指定查询条件
GROUP BY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。
HAVING短语:只有满足指定条件的组才予以输出
ORDER BY子句:对查询结果表按指定列值的升序或降序排序

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

SELECT Sno,Sname
FROM Student;

在这里插入图片描述
[例3.17] 查询全体学生的姓名、学号、所在系。

SELECT Sname,Sno,Sdept
FROM Student;

在这里插入图片描述
[例3.18] 查询全体学生的详细记录

SELECT  Sno,Sname,Ssex,Sage,Sdept 
FROM Student; 

SELECT  *
FROM Student; 

可以在SELECT关键字后面列出所有列名,也可以用*代替

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

SELECT Sname,2020-Sage          /*今年为2020年*/
FROM Student;

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

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

在这里插入图片描述
LOWER为函数,用来将文本中的字符串全部转换为小写

使用列别名改变查询结果的列标题:

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

在属性后+“ ”+“列名”
在这里插入图片描述
[例3.21] 查询选修了课程的学生学号。
没有指定DISTINCT关键词,则缺省为ALL

SELECT Sno   FROM SC;

等价于:

SELECT ALL  Sno  FROM SC;

在这里插入图片描述
加上关键词DISTINCT会去掉表中重复的行

SELECT DISTINCT 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.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');

在这里插入图片描述
感想:做了大概一个半小时,可能是因为我这网不太好,SQL serever和标准数据库语言还是有很多不同的,有时候搜索资料就很慢(估计大周一都在上网课)。我自己打字也很慢(真的特别慢,还是要练)。虽说不要求截图了,但是我感觉自己回头再看会比较方便。中间遇到了问题还卡了一会,后来问了老师也在网上搜索了一下。基本都能理解,没有什么太大的问题。总之还是要继续努力,加油ヾ(◍°∇°◍)ノ゙

发布了6 篇原创文章 · 获赞 8 · 访问量 4272

猜你喜欢

转载自blog.csdn.net/MooM_X/article/details/104748994