数据库SQL语言实战(十)(最后一篇)

目录

前言

练习题

实验八

实验九

题目一

题目二

 总结 


前言

本篇练习题的重点有两个:

一、测试提交commit和回滚rollback的作用,了解锁等待、授权等知识。

二、学会复制表结构、学会插入数据,特别是学会如何避免重复插入,也就是如何避免插入已经存在的数据。

练习题

实验八

1、按顺序执行下面表格的语句

2、计算十个结果,将结果存入test8_10表格并提交

表格如下:

create table test8_10(
  test varchar(20),
  age numeric(3)
)
insert all 
  into test8_10 values ('结果1', 88)
  into test8_10 values ('结果2', 90)
  into test8_10 values ('结果3', 90)
  into test8_10 values ('结果4', 86)
  into test8_10 values ('结果5', 90)
  into test8_10 values ('结果6', 90)
  into test8_10 values ('结果7', 86)
  into test8_10 values ('结果8', 86)
  into test8_10 values ('结果9', 76)
  into test8_10 values ('结果10', 86)
select * from dual

 关键点:

1、本题的重点不在于SQL语句如何写,重点在于如何理解commit和rollback,以及这两个操作对表格的操作在两个账号之间的交互

2、commit:仅仅执行并未commit的SQL语言不会对表格产生实质性的影响。也就是说表格没有发生实质性的改变。例如,在主账号中执行update并不提交,在备用账号上select的结果不会发生变化,因为表格没有发生实质性变化。

3、rollback:对于没有commit提交的操作,这个操作以及其结果都是在账号缓存区的,表格本身没有发生变化。所以可以通过rollback操作,在账号上撤回操作

实验九

题目一

  1. 创建表test9_01,表的结构同pub.student_11_1一样。
  2. 为test9_01的sid创建唯一不重复索引。
  3. 将pub用户下的Student中性别是“女”的数据添加到test9_01中。
  4. 将pub用户下的Student_11_1中性别是“女”的数据添加到test9_01中,如果某个学号已经包含在test9_01中,这个记录就不要再插入了(即不要插入重复学号的数据)。
  5. 将pub用户下的Student_11_2中性别是“女”的数据添加到test9_01中,如果某个学号已经包含在test9_01中,这个记录就不要再插入了(即不要插入重复学号的数据)。
  6. 要求完成上述功能,请采用1条create table、1条create index、3条insert共5条SQL方式完成。
create table test9_01(
sid char(12) not null ,
name varchar2(10) not null,
sex char(2), 
age int, 
birthday date,
dname varchar2(30), 
class varchar2(10) 
);
create index suoyin on test9_01(sid)
insert into test9_01(
  select *
  from pub.student
  where sex='女'
)
insert into test9_01(
  select *
  from pub.student_11_1
  where sex='女' and sid not in(
    select distinct sid
    from pub.student
    where sex='女'
  )
)
insert into test9_01(
  select *
  from pub.student_11_2
  where sex='女' and sid not in(
    select distinct sid
    from test9_01
  )
)

 关键点:

1、insert的产品只能是关系,而select的结果就是关系,所以可以直接insert进去。如果是自己拟定的值需要用values将值变成关系再insert。例如values(12,“女”)

2、利用对插入表格本身进行sid not in的操作,实现不重复插入的功能

题目二

  1. 创建表test9_02,表的结构同pub.student_11_1一样。
  2. 为test9_02的sid创建唯一不重复索引。
  3. 将pub用户下的Student中性别是“女”的且pub.student_course中存在不及格成绩的同学添加到test9_02中。
  4. 将pub用户下的Student_11_1中性别是“女”的且pub.student_course中存在不及格成绩的同学数据添加到test9_02中,如果某个学号已经包含在test9_02中,这个记录就不要再插入了(即不要插入重复学号的数据)。
  5. 将pub用户下的Student_11_2中性别是“女”的且pub.student_course中存在不及格成绩的同学数据添加到test9_02中,如果某个学号已经包含在test9_02中,这个记录就不要再插入了(即不要插入重复学号的数据)。
  6. 要求完成上述功能,请采用1条create table、1条create index、3条insert共5条SQL方式完成。
create table test9_02(
sid char(12) not null ,
name varchar2(10) not null,
sex char(2), 
age int, 
birthday date,
dname varchar2(30), 
class varchar2(10) 
);
create index suoyin1 on test9_02(sid)
insert into test9_02
(
select * from pub.student 
where  sex='女' and
sid in (select distinct sid from pub.student_course where score<60)
);
insert into test9_02
(
select * from pub.student_11_1 
where  sex='女' 
and sid not in (select distinct sid from test9_02)
and sid in (select distinct sid from pub.student_course where score<60)
);
insert into test9_02
(
select * from pub.student_11_2 
where  sex='女' 
and  sid not in (select distinct sid from test9_02)
and sid in (select distinct sid from pub.student_course where score<60)
);

关键点:

1、在一个数据库中一个名字的索引是唯一的,不可以重复 

 总结 

本文的所有题目均来自《数据库系统概念》(黑宝书)、山东大学数据库实验八、九。不可用于商业用途转发。

如果能帮助到大家,大家可以点点赞、收收藏呀~ 

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十二月的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值