第5章 高级SQL

news2025/1/12 6:09:48

第5章 高级SQL

考试范围: 5.2 -5.3

考试题型: 计算题

考试内容:

函数、过程和触发器的概念

会定义和调用函数、过程

会定义触发器

函数、过程和触发器的概念

  • 函数&&过程

    • 存储过程和函数是一组为了完成特定功能的SQL语句集,经过编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

    • 区别

      • 函数有且只有一个返回值,而存储过程不能有返回值。
      • 函数只能有输入参数,而存储过程可以有 in out inout多个类型参数。
      • 存储过程中的语句功能更丰富,实现更复杂的业务逻辑,而函数中通常不会使用 insert update delete等语句,只是完成查询的工作,受输入参数并返回一个结果,功能针对性比较强。
      • 存储过程一般是作为一个独立的部分来执行(call调用)。而函数可以作为查询语句的一个部分来调用。
  • 触发器

    • 触发器是系统作为事件的副作用自动执行的过程
    • 触发器可以在事件之前、之后或代替事件激活。

    在这里插入图片描述

会定义和调用函数、过程

  • 函数
    --SQL 函数
    --定义一个函数,该函数给定部门的名称,返回该部门中教师数的计数。
    create function dept_count (dept_name varchar(20))
       returns integer
       begin
       declare d_count integer;
       select count (* ) into d_count
       from instructor
       where instructor.dept_name = dept_count.dept_name;
       return d_count;
       end ;
    
    --查找超过 12 名讲师的所有部门的部门名称和预算。
    select dept_name, budget
    from department
    where dept_count (dept_name ) > 12 ;
    
    --表函数
    --返回给定部门中的所有教师
    create function instructors_of (dept_name char(20))
    		returns table (ID varchar(5),
                           name varchar(20),
                           dept_name varchar(20),
                           salary numeric(8,2))
    
    --使用
    select name from table (instructors_of ('Music')) where salary > 100000 ;
    
  • 过程
    --定义一个过程,给定部门的名称,返回该部门中教师数的计数。
    create procedure dept_count_proc (in dept_name varchar(20), out d_count integer)
    begin
    	select count(*) into d_count
        from instructor
        where instructor.dept_name = dept_count_proc.dept_name ;
    end;
    
    --使用
    declare d_count integer;
    call dept_count_proc( 'Physics', d_count);
    

会定义触发器

事件之前、之后或代替事件

--之前:发生插入事件时将学生姓名更改为首字母大写形式
create trigger initcap 
before insert on student
referencing new row as nrow
for each row
	set nrow.name = INITCAP(nrow.name)

--之后:保持tot_cred(总学分)一致
create trigger credits_earned 
after update of takes on (grade)--每次对takes表的grade更新后
referencing new row as nrow --新行
referencing old row as orow --成绩更改前的旧行
for each row
when nrow.grade <> ’F’ and nrow.grade is not null --新的内容中成绩及格且不为空
	and (orow.grade = ’F’ or orow.grade is null)  --而旧成绩不及格或为空(拿不到学分)
begin atomic                                      --则开始更新总学分
	update student
	set tot_cred= tot_cred + (select credits from course 
                              where course.course_id = nrow.course_id)
	where student.id = nrow.id;
end;

--使用
update takes 
set grade = ‘A’
Where ID=00128and course_id='CS-101'
     and sec_id=1 
     and semester='Fall'
     and year=2009

--代替:为视图插入生成主键
create view v_student as select name,dept_name from student ;

create trigger insert_v_student
instead of insert on v_student
referencing new row as nrow
for each row
begin
 	select max(ID)+1 into new_id from student
	insert into student        
	values(new_id, nrow.name,nrow.dept_name, 0)
end


--可以禁用触发器
alter trigger trigger_name disable

student
	insert into student        
	values(new_id, nrow.name,nrow.dept_name, 0)
end


--可以禁用触发器
alter trigger trigger_name disable

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何用pgloader将Zabbix的MySQL数据库迁移到PostgreSQL数据库?

感谢本文作者 董玉凡 &#xff0c;Zabbix工程师 摘 要 ►今天我们使用一款工具pgloader来进行从Zabbix的MySQL数据库将数据迁移到PostgreSQL数据库。 ►pgloader是一款开源软件项目&#xff0c;可以将各种来源的数据加载到PostgreSQL当中&#xff0c;可以支持动态读取的数据…

计算机毕设Python+Vue寻迹边境丹东旅游网站(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

2022中国产业数字化发展成熟度行业指数分析—— 重视差异,结合自身要素禀赋,推进产业精细化治理

易观分析&#xff1a;随着新一轮数字技术加速渗透到各行各业&#xff0c;发展壮大战略性新兴产业成为了现代化产业体系的新动力引擎。战略性新兴产业代表了新一轮科技革命和产业变革的方向&#xff0c;既是推进新型工业化的主要抓手&#xff0c;也是中国式现代化建设必不可少的…

【UE4 第一人称射击游戏】03-再生护甲和伤害功能

效果&#xff1a; 步骤&#xff1a; 1.打开“ThirdPersonCharacter”&#xff0c;添加如下节点&#xff1a; 如果护甲量<100%&#xff0c;就每秒1% 2.新建一个函数&#xff0c;命名为“TakeDamage5%” 每次执行该函数就减少5%的护甲量&#xff0c;如果护甲量<0&#…

NeurIPS'22 | GBA:面向搜推广模型的同步和异步自由切换的训练范式

丨目录&#xff1a; 搜推广增量迭代挑战 GBA的诞生 GBA的收敛性分析 GBA工程实现 GBA实验效果 未来展望近日&#xff0c;阿里巴巴在国际顶级机器学习会议NeurIPS 2022上发表了新的自研训练模式Gloabl Batch gradients Aggregation GBA&#xff08;论文链接&#xff1a;https://…

Maven导入sqlserver驱动jar包依赖包到本地仓库并引用

一、配置maven环境变量 (1)、找到此电脑右键---->点击属性---->选择高级系统设置---->点击环境变量---->新建系统变量 (2)、新建系统变量&#xff1a;MAVEN_HOME&#xff0c;变量值填你maven解压的路径&#xff0c;然后点击确定。 (3)、在已有的path系统变量里&…

Codeforces Round #703 (Div. 2) C2. Guessing the Greatest (hard version)

翻译&#xff1a; 简单版本和困难版本之间的唯一区别是查询数量的限制。 这是一个互动的问题。 有一个包含&#x1d45b;不同数字的数组&#x1d44e;。在一个查询中&#xff0c;您可以询问子段&#x1d44e;[&#x1d459;..&#x1d45f;]中第二个最大元素的位置。在不超过…

CUDA独立上下文模块加载

CUDA独立上下文模块加载 大多数 CUDA 开发人员都熟悉 cuModuleLoad API 及其对应项&#xff0c;用于将包含设备代码的模块加载到 CUDA 上下文中。 在大多数情况下&#xff0c;您希望在所有设备上加载相同的设备代码。 这需要将设备代码显式加载到每个 CUDA 上下文中。 此外&…

408总结-冲冲冲

数据结构 m阶B树除根节点外所有节点关键字范围⌈m/2⌉−1至m−1\lceil m/2\rceil-1至m-1⌈m/2⌉−1至m−1。所有叶节点都在同一层&#xff0c;且不带信息&#xff0c;代表查找失败的位置。是所有节点平衡因子都为0的多路平衡查找树完全二叉树的叶子结点只可能出现在最下面两层…

AndroidStudio使用maven-publish发布aar至mavencentral中央仓库

目录AndroidStudio使用maven-publish发布aar至mavencentral中央仓库1、注册[【sonatype】](https://issues.sonatype.org/secure/Signup!default.jspa)2、创建Group ID3、下载安装[gnupg](https://www.gnupg.org/download/index.html)4、创建生成密钥5. 配置maven-publish打包推…

设计模式之访问者模式

Visitor design pattern 访问者模式的概念、访问者模式的结构、访问者模式的优缺点、访问者模式的使用场景、访问者模式实现示例、访问者模式的源码分析、双分派 1、访问者模式的概念 访问者模式&#xff0c;即在不改变聚合对象内元素的前提下&#xff0c;为聚合对象内每个元素…

STM32F103VET6基于STM32CubeMX RTC时钟报警中断使用示例

STM32F103VET6基于STM32CubeMX RTC时钟报警中断使用示例&#x1f4fa;STM32CubeMX配置RTC时钟报警中断演示过程&#xff1a; &#x1f4cc;相关篇《STM32F103VET6基于STM32CubeMX RTC时钟秒更新中断使用示例》&#x1f4cc;《STM32F103VET6基于STM32CubeMX RTC时钟使用示例》&a…

VUE-router

七.Vue-router 1、什么是vue-router vue-router是vue.js官方路由管理器。vue的单页应用是基于路由和组件的&#xff0c;路由用于设定访问路径&#xff0c;并将路径和组件映射起来。 传统页面切换是用超链接a标签进行切换。但vue里是用路由&#xff0c;因为我们用Vue做的都是…

K8s 前世今生与架构组件简析

k8s 前世 k8s 的前世是google 内部的Borg 系统&#xff0c;是一个作业调度平台&#xff0c;调度的对象是一个个进程。 Borg 本身也利用了容器化技术比如 Cgroups, Namespace 实现应用的隔离。 运行在线上的业务主要分为在线业务&#xff08;prod&#xff09;和离线业务(non-…

Netty实战与源码剖析(二)——Netty线程模型

1 线程模型基本介绍 不同的线程模式&#xff0c;对于程序的性能有很大的影响&#xff0c;Netty为何具有如此高的性能&#xff0c;很大程度上是得益于Netty采用的线程模型。 目前主流存在的线程模型有两种&#xff1a; 传统阻塞IO模型Reactor模型 然而根据Reactor的数量和处理…

零基础转行程序员,有哪些经验可以借鉴?

随着互联网行业的迅速发展&#xff0c;市场对于程序员的需求增大&#xff0c;越来越多的人开始转行到IT领域&#xff0c;程序员也不再基于计算机科学或软件工程等个别专业的毕业生&#xff0c;其他非计算机相关专业的&#xff0c;像学物理、数学、自动化&#xff0c;甚至英语、…

云原生丨DataX在数据迁移中的应用与实践

文章目录一、前言二、准备工作三、安装工具与数据迁移Demo安装工具与数据迁移三、使用Datax抽取移动云上的gauss数据库四、Datax工具逻辑说明整体框架核心模板介绍流程调度数据库类型插件读、写说明五、Datax工具参数说明SettingReader& writerjdbcUrlusernamepasswordtabl…

数据人PK也无人,为什么业务部门的数据需求都是急活?

**导读&#xff1a;**你是不是经常听到数据开发吐槽业务部门&#xff1a;我可以理解业务部门数据需求多&#xff0c;但为什么经常要得这么急呢&#xff1f; 作为一个数据开发者&#xff0c;可以回想一下&#xff0c;当初是怎么进入数据行业的。 是不是也是听一些大V忽悠&…

Java Swing JSlider:滑块组件

在前面的章节中&#xff0c;我们介绍了 Swing 设计简单界面所需的窗口、布局组件以及如何响应事件。Swing 还提供了很多高级组件&#xff0c;如菜单栏、工具栏、文件选择器、表格以及树等。使用这些高级组件可以实现更为复杂的布局&#xff0c;也可以使程序界面更加人性化&…

颜色分析.

介绍 宽光谱光源对许多光学系统都很重要&#xff0c;应用范围包括白光照明、分光计等。Fred中的颜色图像分析&#xff0c;是通过计算每个像素的色度坐标并在表面上显示生成的RGB值来生成颜色分布。此外&#xff0c;FRED还可以显示彩色色度图&#xff0c;并在用户移动光标时指…