【数据库系统原理作业】四、数据的查询与更新

接上一次的作业:
https://blog.csdn.net/qq_21331159/article/details/115074662

一、数据查询

1.索引的建立与删除

①索引建立

建立索引(INDEX)的目的:加快查询速度
关系数据库管理系统中常见的索引:

  • 顺序文件上的索引
  • B+树索引
  • 散列(hash)索引
  • 位图索引

语句格式:

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

例:为学生-课程数据库中的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降序

②修改与删除索引

--重命名索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>;
--删除索引
drop index <索引名>;

例1:将SC表的SCno索引名改为SCSno

ALTER INDEX SCno RENAME TO SCSno;

例2:删除Student表的Stusname索引

drop index Stusname;

2.数据字典

数据字典是RDBMS内部的一组系统表,它记录了数据库中所有定义信息

  • 关系模式定义
  • 视图定义
  • 索引定义
  • 完整性约束定义
  • 各类用户对数据库的操作权限
  • 统计信息等

3.数据查询

注:该部分的例题做前需要先插入数据,可以先做"插入元组"的例题。
语句格式:

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

具体含义:

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

例1:查询全体学生的学号与姓名。

select Sno,Sname
from Student;

例2:查询全体学生的姓名、学号、所在系。

select Sname,Sno,Sdept
from Student;

例3:查询全体学生的详细记录
选出所有属性列有两种方法:

  1. 在SELECT关键字后面列出所有列名
  2. 将<目标列表达式>指定为*
select *
from Student;
/*或
select Sno,Sname,Ssex,Sage,Sdept
from Student;
*/

执行结果:
在这里插入图片描述

二、数据更新

详细的数据更新:
https://blog.csdn.net/qq_21331159/article/details/115613881

1.插入数据

两种插入数据方式:

  • 插入元组
  • 插入子查询结果

①插入元组

插入元组语句格式:

insert
into <表名> [(<属性列1>[,<属性列2 >)];
values (<常量1> [,<常量2>]);
/*INTO子句
1.指定要插入数据的表名及属性列
2.属性列的顺序可与表定义中的顺序不一致
3.没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
4.指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句
1.提供的值必须与INTO子句匹配(值的个数、值的类型)
*/

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

insert 
into Student (Sno,Sname,Ssex,Sdept,Sage)
values ('201215128','陈冬','男','IS',18);

例2:将学生张成民的信息插入到Student表中。 (INTO 子句不写属性名的情况)

insert
into Student
values ('201215126','张成民','男',18,'CS');

执行结果:
在这里插入图片描述
例3:为什么如下语句是错误的

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

答:因为Cpno时Cno的外键,在执行该语句时,'5’并不存在于Cno中,无法在Cpno中写入Cno中不存在的值。
应该为:

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

例4:插入一条选课记录( ‘200215128’,'1 ')

insert 
into SC(Sno,Cno)
values ('201215128','1');
/*或
insert 
into SC
values ('201215128','1',NULL);*/

执行结果:
在这里插入图片描述

②插入子查询结果

这里还没学到,在网上查了查语句,就在这里写一个例子:

insert
into SC
select Sno,Cno,NULL
from Student,Course 
where Cno = '01';
	/*意思是将Student中所有的学生的学号(Sno)插入
	到SC中并将他们选的课全部设为01,成绩设为NULL*/

执行结果:
在这里插入图片描述
Student中的数据:
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值