KingbaseES(金仓数据库)-头歌-实验报告四(共11关)

第1关:创建视图(1)

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

创建一个副教授职称的教师视图 T_Sub(工号、姓名、性别和职称)。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

视图:

SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

注意:数据库的设计和结构不会受到视图中的函数、WHEREJOIN 语句的影响。

SQL CREATE VIEW 语法:

 
  
  1. CREATE VIEW <视图名>
  2. AS SELECT <字段名1>, <字段名2>...
  3. FROM <表名>
  4. WHERE <条件>;
---------- BEGIN ---------- 
create view T_Sub 
as 
select tno,tname,sex,title
from teacher
where title='副教授'

---------- END ---------- 

第2关:创建视图(2)

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

创建软件学院班级上课情况视图 C_S(班级名、课程名、教师号)。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

视图:

SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

注意:数据库的设计和结构不会受到视图中的函数、WHEREJOIN 语句的影响。

SQL CREATE VIEW 语法:

 
  
  1. CREATE VIEW <视图名>
  2. AS SELECT <字段名1>, <字段名2>...
  3. FROM <表名1>, <表名2>...
  4. WHERE <条件1> AND <条件2> AND...;
---------- BEGIN ---------- 
create view C_S
as select gname,cname,teacher.tno
from class,course,teacher,teaching
where class.dept='软件' and teacher.tno=teaching.tno and teaching.cno=course.cno and class.gno=teaching.gno
---------- END ---------- 

第3关:查询视图

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

查询视图C_S中的班级名和课程名。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

使用简单的查询语句就可以对视图进行查询操作:

 
  
  1. SELECT <字段名1>, <字段名2>...
  2. FROM <视图名>;
---------- BEGIN ---------- 
select gname,cname
from C_S
---------- END ---------- 

第4关:删除视图

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

删除班级上课情况视图C_S。

相关知识

SQL 撤销视图

您可以通过 DROP VIEW 命令来删除视图。 SQL DROP VIEW 语法:

 
  
  1. DROP VIEW <视图名>;
---------- BEGIN ---------- 
drop view C_S
---------- END ---------- 

第5关:视图的添加操作

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

向 T_Sub 的教师视图中添加一条记录,其中工号为 0296,姓名为 赵梦,性别为 ,职称为 副教授

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

INSERT INTO 语句

INSERT INTO 语句用于向视图中插入新记录,与向表中插入数据相似。

 
  
  1. INSERT INTO <视图名> (<字段名1>, <字段名2>...)
  2. VALUES (<值1>, <值2>, <值3>,...);
---------- BEGIN ---------- 
insert into T_Sub
values('0296','赵梦','女','副教授')

---------- END ---------- 

第6关:视图的修改操作

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

T_Sub 的教师视图中 赵梦 的职称改为“教授”。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

UPDATE 语句

可以使用 UPDATE 语句来修改、更新一个或多个视图的数据。 使用 UPDATE 语句修改视图与修改表类似,语法格式为:

 
  
  1. UPDATE <视图名>
  2. SET <列名>=<表达式> [,<列名>=<表达式>]…
  3. [WHERE (<条件>)];

语法说明如下:

  • <视图名>:用于指定要更新的视图名称。
  • SET 子句:用于指定视图中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的默认值。如果指定的是默认值,可用关键字 DEFAULT 表示列值。
  • WHERE 子句:可选项。用于限定视图中要修改的行。若不指定,则修改表中所有的行。
---------- BEGIN ---------- 
update T_Sub
set title='教授'
where tname='赵梦'

---------- END ---------- 

第7关:视图的删除操作

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

删除 T_Sub 的教师视图中教师 覃刚 的记录。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

注:这道题由于参照完整性的原因是无法成功删除的,希望同学们能够理解到这个知识点。

相关知识

DELETE语句

可以使用 DELETE 语句可以删除视图中的一行或多行记录,其语法格式为:

 
  
  1. DELETE FROM <视图名>
  2. [WHERE <条件>];
  • <视图名>:用于指定删除数据的表。
  • WHERE 子句:指定待删除的记录应当满足的条件,WHERE 子句省略时,则删除视图中所有记录。
---------- BEGIN ---------- 
delete from T_Sub
where tname='覃刚'

---------- END ---------- 

第8关:创建索引

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

为教师表在姓名列上建立B-Tree索引TI。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

使用 CREATE INDEX 语句

可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。

语法格式:

 
  
  1. CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED] INDEX <索引名>
  2. ON <表名> (<列名> [DESC|ASC]] [,...]);

语法说明如下:

UNIQUE :表示唯一索引。 CLUSTERED :表示创建聚集性索引。 NONCLUSTERED :表示创建非聚集性索引。 <表名>:指定要创建索引的表名。 <列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。 ASC|DESC :可选项。 ASC 指定索引按照升序来排列, DESC 指定索引按照降序来排列,默认为 ASC

---------- BEGIN ---------- 
create unique index TI on teacher(tname)

---------- END ---------- 

第9关:查看索引

  • 任务要求
  • 评论
  • 关卡排行榜

知识点

查看基本表索引信息的语句格式: SELECT *  FROM user_indexes  WHERE table_name= 表名 ;

实验要求

查看教师表的索引信息。

  • teacher(教师表)

    tno(工号) tname(姓名) sex(性别) title(职称) birthday(出生日期)
    0014 李欣 教授 1969-07-25
    0078 张云 副教授 1975-11-25
    0118 王立 高级工程师 1985-04-28
    0193 赵玲 讲师 1992-09-26
    0213 杨梅 副教授 1986-06-07
    0030 覃刚 副教授 1980-02-15
  • course(课程表)

    cno(课程号) cname(课程名) credit(学分) hours(学时) examination(考核方式)
    G001 线性代数 3 48 考试
    R003 数据结构 3 48 考试
    R009 离散数学 3 48 考试
    S023 嵌入式系统与编程实验 1 32 考察
    G012 大学物理 4 64 考试
  • class(班级表)

    gno(班级号) gname(班级名) grade(年级) dept(学院) gnum(班级人数)
    0211801 软件18级1班 18级 软件 37
    0211903 软件19级3班 19级 软件 35
    0131901 机械19级1班 19级 机械 37
  • teaching(教师授课表)

    cno(课程号) tno(工号) gno(班级号) term(开课学期) classroom(教室)
    G001 0078 0211903 1 A101
    G001 0078 0131901 1 A101
    R003 0118 0211801 2 S001
    R009 0213 0211903 2 S002
    S023 0193 0211801 1 S001
    G012 0030 0131901 2 B003

相关知识

使用简单的查询语句就可以对视图进行查询操作:

 
  
  1. SELECT *
  2. FROM user_indexes
  3. WHERE table_name = <表名>;
---------- BEGIN ---------- 

SELECT *  FROM user_indexes  WHERE table_name=upper('teacher') ;
---------- END ---------- 

第10关:修改索引

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

将索引 TI 重命名为 TTI

相关知识

使用 ALTER 修改索引名称

修改索引和修改表的语句相似:

 
  
  1. ALTER INDEX [IF EXISTS] <旧索引名> RENAME TO <新索引名>;

IF EXISTS :判断所要修改的索引名是否存在。

---------- BEGIN ---------- 
alter index TI
rename to TTI

---------- END ---------- 

第11关:删除索引

  • 任务要求
  • 评论
  • 关卡排行榜

实验要求

删除索引 TTI

相关知识

删除索引

删除索引的语法格式如下:

  1. DROP INDEX <索引名>;
---------- BEGIN ---------- 
drop index TTI

---------- END ---------- 

你可能感兴趣的:(数据库,sql)