数据库工程师基础学习8----分组,触发器与嵌入sql

1,分组查询
大多数情况使用了聚集函数,就要用到分组函数
在这里插入图片描述
这里(2)是指按sno进行分组,然后对每一个不同的sno再求平均值.
在这里插入图片描述
这里注意,按谁分组,一般要在输出属性时候带上,不然不知道聚集函数结果的具体含义.
另外,在select中可以使用as来进行重命名.

where语句写在from后,group by前

这里的having子句,用于在分组结果上再进行筛选.
如上例子中,求平均值>85的同学.
having一般与分组一起使用.

在这里插入图片描述

在这里插入图片描述
这里用来查找指定字符.
这里如果要匹配的字符串中包含%,就需要在like 字符串后接escape’‘,注意这里需要用’'起来.
在这里插入图片描述
这里的union,用于并相同的属性列.
属性列不同,不可以用union操作
在这里插入图片描述
但是可以进行多列属性同时并的操作.
并且数据类型不同,虽然名称相同,也不能进行集合操作.
在这里插入图片描述
这里注意,如果题目说的是学生表的所有,这时候就不能用前面的自然连接的形式,而应该用左连接.
特别注意在连接的时候,用的是on,而不再是where.并且是s left join sc,这样的形式,别以为是sc在左边.
在这里插入图片描述
在这里插入图片描述
这就是最常用到的,插入操作.
insert into
在这里插入图片描述
在这里插入图片描述
删除某一行的语句,delete 注意与drop是不同的.drop是表级别的操作.
在这里插入图片描述
这个用于更新,可以实现精准更新,
如果说我们不写where语句,那么sc,表中的所有grade都会被更新为90.

这里会发现,insert into 表名 values 用来插入一行,
delect from 表名 where 用来删除数据.
update 表名 set 列名=新值 where 用来更新.

alter table add 插入列
alter table drop 删除列
alter table change 改变列名称

2,授权与触发器
在这里插入图片描述
在这里插入图片描述
这里注意不同的对象有不同的权限.
注意这里的on 比较容易考.
并且with grant option 表示得到权限的用户还可以授权给别人.
在这里插入图片描述
在这里插入图片描述
这里注意update这里可以指定某一列的权限,在update(属性1,属性2)
这里restrict,和cascade容易考

这个例子答案为d,b
在这里插入图片描述
这里的触发器,就是当达到触发条件时,进行一系列动作(sql语句)
注意这里的触发事件,不能是选择select操作.
(3)在触发器声明条件中,可以撤销之前的插入操作等.就像现实中余额不足,会报错.就是撤销了扣费动作.
在这里插入图片描述
如上面的例子,余额为10元,但是消费为12元.
余额<0就是触发条件,然后执行一系列动作.
在这里插入图片描述
这里的create trigger 触发器名称 后面的 on前面的部分.
就是触发事件,意思为:什么情况下激活触发器.
after insert 就是在插入操作之后.
这里注意update是可以跟列名的.不更列名,就是整张表只要更新之后,触发器就激活.

on后面的表名,是执行事件的表,就是插入等操作的表,而不是触发动作所涉及的表名.
referencing后面加临时视图名,是指我们触发动作中可能会用到修改后的表,也可能用到修改前的表,所以需要将两张表都存放在两个视图中,方便调用.
old row/table.属性名就可以调用.
在这里插入图片描述
这个语句是可以执行的.
并且这个语句修改多行,对于行触发器,触发n次.而语句级触发器,只触发一次.
就是for each row 和for each statement的区别

这个触发器,首先创建触发器
其次,规定触发事件
然后,规定在哪张表
然后规定触发器建立的视图名,与类型
最后才是判断触发条件,决定是否执行触发动作.
在这里插入图片描述
这里的例子:将新列视图命名为nrow.
触发条件是:nrow.balance<0,
这里会发现,触发器并不包含,具体update操作.只是说,进行了update之后就激活触发器.

注意,insert into 语句的两种形式.一种加values一种不加.
第一个insert语句,取出这个客户号(已经定位到了符合触发条件元组的地方),这里需要定位到depositor表的相同位置,因为要从这个表中选择数据.

第二个insert语句,将nrow的数据插进去.

第三个update,将account表中的数据置为0.

会发现,这里包含nrow表与实际表之间的联系,来修改表中的信息.触发器找到的是nrow中的行.
在这里插入图片描述
这里是第二个例子
这道题的特殊之处在于,同时用到了新表和旧表.并且指定了更新的属性列(注意要用of连接)
并且begin开始的语句,是两种方法.并不是都要加
insert方法,用于表中原来没有客户信息.
update方法,用于表中已有客户信息,我们需要查找着修改.如果没有where语句,会将表中的一列都修改.但是这种方法有个问题是,后一次还款,会覆盖掉前一次的还款信息.

getdate()函数得到当前的日期.
在这里插入图片描述
问题一注意:
两个外码写在c,d,并且foreign key(身份证号)这里的()要注意.
在这里插入图片描述
这里注意insert语句可以用这种方法实现,部分属性的插入.
带values的只能插入整个一行.

select语句的第一行,表示结果.
from表示来源.这里应该是:票价 ×折扣×vip折扣(这里可以不加表名,因为没有重名的属性列)
f的地方缺的是,折扣表的编号.答案为:折扣.航班编号=航班.航班编号.将两个表建立联系.

(2)小问,我们从前面的题中有一句话为:在旅客每次购票后被修改.
所以触发事件是:购票表插入数据.
所以前两空结果为:insert 和购票.
后面一空如上图,这里注意括号里的身份证号.需要加nrow(我们只能加nrow,因为触发器有的最直接的数据就是nrow和orow)
在这里插入图片描述
2,嵌入式sql与存储过程
在这里插入图片描述
在这里插入图片描述
如果题目中的编程语句,不是纯sql语句.我们在填写sql语句时,
就需要在前面加上exec sql sql语句.

sqlca,作用是在嵌入sql执行报错时,进行通信.

共享变量,是指在主语言中定义的一个变量,在sql语句中也需要用到.
在sql语句中前面加:进行区分.
在这里插入图片描述
这里首先定义了几个主变量,注意主变量用declare标识.
(1),与正常的sql语句相比,这里多了一个into,作用就是将select后面的属性名,放在前面定义好的主变量中,以方便主程序使用查询结果,主变量前面加:

这里(2)发现,insort into 语句插入部分属性的语法.在表后加(属性名).
在这里插入图片描述
首先定义游标,这里的cursor for 就是标识前面的共享变量是游标.并且在定义游标之后,其后的select语句并不会执行.需要打开游标,才会执行
在这里插入图片描述
打开游标,形成一个查询结果.这时候游标指向第一行之前.需要推进游标才可以指向第一行数据.

推进游标时候的into后面跟 共享变量表.
在这里插入图片描述

在这里插入图片描述
这里第一小题的答案是:跟在游标后面的select语句.
执行了fecth推进游标操作后,:hparkno中的值就变成了a013
在这里插入图片描述
if这里的是查询为空的意思.
else,这个空将:hpankno返回.并且前面不需要加exec sql,这是主语言中的语句.
在这里插入图片描述
并且需要将游标关闭.注意这里需要是游标名,图片中是错的.
在这里插入图片描述
这里的存储过程就类似于函数.
在这里插入图片描述
如,我们可以把一个插入语句写成一个存储过程,插入的值作为参数,这样的效率比insert语句高.

in表示外部输入,out表示输出.注意这里指定数据类型可以不指定宽度,写成char[]
在这里插入图片描述
在这里插入图片描述
这里的第一个空为 int a in,
第二个空为:;balance-a(注意这里是不需要加:的,:是在嵌入式sql语句中才有的共享变量)
第三个空为:rollback work 回滚操作,在之后的事务管理中会学到.不成功,就需要撤销掉-a的操作.
第四个空为:result=1;return

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值