数据库 SQL 高级用法

news2024/12/23 20:52:59

目录

一、INSERT INTO SELECT 用法

二、逻辑控制语句

 三、公式表表达式

四、存储程序

五、触发器


一、INSERT INTO SELECT 用法

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中

1、从一个表中复制所有的列插入到另一个已存在的表中

INSERT INTO 表2
SELECT * FROM 表1;

实例

INSERT INTO student2
SELECT * FROM student;

以上 SQL 语句复制 " student " 表中数据插入到 " student2 " 中。

2、从一个表中只复制希望的列插入到另一个已存在的表中

INSERT INTO 表2
(列名1,列名2)
SELECT 列名1,列名2 
FROM 表1;
‍

实例

INSERT INTO student2
(ID,name)
SELECT ID,name 
FROM student;

以上 SQL 语句只复制 " student " 中的 " ID "" name " 列 到 " student2 " 中。

参考:数据库 SQL 高级用法(四) - 码农教程

二、逻辑控制语句

  if-else语句

--语法结构:
if( 条件表达式 )
	begin
		命令行或程序块
	end
else
	begin
	 	命令行或程序块
	end

   while-continue-break语句

--语法结构:
while(条件表达式)
	begin
		命令行或程序块
		[break]	→→ 跳出循环
		[continue] →→ 可以让程序跳过continue命令之后的语句
		命令行或程序块
	end

case语句

--语法结构:
case	
		when 条件表达式 then 运算式
		when 条件表达式 then 运算式
		[else 运算式]
	end

实例代码:

--用法一
select case when Line='B01' then '00' else Line end from [ALL-Line_place]
--用法二
select case Line when 'B01' then '00' else Line end from [ALL-Line_place]

 三、公式表表达式

  将公用表表达式(CET)视为临时结果集,在selectinsertupdatedelete 或 create view语句的执行范围内进行定义

--CET基本语法结构:
	with 公用表表名 (字段列表)
	as	( 命令行或程序块 )
	select * from 公用表表名

实例代码:

;WITH TRR0 AS (select * from Line_Machine_tx),
 TRR1 AS(select * from Machine_tx),
 TRR2 AS(select * from [ALL-Line_place])
 select * from TRR0,TRR1,TRR2

四、存储程序

创建位置:

 

创建存储程序

USE [D_total]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[proc_search_alm_machine_total]
   
	@linn varchar(255),@Time_Num varchar(255),@Startt varchar(255),@Endt varchar(255)	
AS
BEGIN
    --set @linn ='C02'
    --set @Time_Num ='Num'
    --set @Startt ='2021-08-20 08:00:00'
    --set @Endt='2021-08-26 20:00:00'
	declare @we varchar(8000)
	--declare @dj varchar(2000)
	declare @alm varchar(2000)
	declare @alm1 varchar(2000)	
	if @Time_Num ='Time'
	begin 
	set @alm ='BETWEEN '''+@Startt+''' and '''+@Endt+''' '
	set @we='执行代码'
	end
	else --num
	begin 
	set @alm ='条件'
    set @we='执行代码'
	end	
	EXEC(@we)
	--print(@we)
END
GO


执行代码:

exec proc_search_alm_machine_total @linn ='B11',@Time_Num ='Time',@Startt ='2021-12-06 08:00:00',@Endt='2021-12-06 20:59:59'

五、触发器

触发器创建位置:

 

创建insert触发器

USE [D_total]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[B01_cfq_after]
ON [dbo].[B01_adress_record]
WITH EXECUTE AS CALLER
FOR INSERT
AS
BEGIN 
		insert into [B01_ALM_Data_Record]([Line],[Machine],[Adress],[Adress_num],[UpStart_time],[UpEnd_time],[Data],[Model])select INSERTED.Line,INSERTED.Machine,INSERTED.Adress,INSERTED.Adress_num,INSERTED.Up_time,INSERTED.Up_time,INSERTED.Data,INSERTED.Model  from INSERTED  
		where (INSERTED.Adress='M' OR INSERTED.Adress='WX') and INSERTED.Data=1;
		
END
GO

ALTER TABLE [dbo].[B01_adress_record] ENABLE TRIGGER [B01_cfq_after]
GO


创建delete触发器

USE [D_total]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE TRIGGER [dbo].[B01cfq_alm_de]
ON [dbo].[B01_adress_record]
WITH EXECUTE AS CALLER
FOR DELETE
AS
BEGIN
IF(SELECT MIN(DELETED.Data) FROM DELETED WHERE ( DELETED.Adress='M' OR DELETED.Adress='WX'))=1
 BEGIN 
	DELETE  [B01_ALM_Data_Record] from [B01_ALM_Data_Record] inner join DELETED on [B01_ALM_Data_Record].Line=DELETED.Line and [B01_ALM_Data_Record].Machine=DELETED.Machine and [B01_ALM_Data_Record].Adress=DELETED.Adress and [B01_ALM_Data_Record].Adress_num=DELETED.Adress_num  and [B01_ALM_Data_Record].UpStart_time=DELETED.Up_time 
	where  [B01_ALM_Data_Record].Data=1  
	END
END
GO

ALTER TABLE [dbo].[B01_adress_record] ENABLE TRIGGER [B01cfq_alm_de]
GO

创建update触发器

USE [D_total]
GO

/****** Object:  Trigger [dbo].[B01CFQ_upm]    Script Date: 2023/1/3 下午 03:58:15 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].[B01CFQ_upm]
ON [dbo].[B01_adress_record]
WITH EXECUTE AS CALLER
INSTEAD OF INSERT
AS
BEGIN 
INSERT INTO B01_ALM_Data_Record([Line],[Machine],[Adress],[Adress_num],[UpStart_time] ,[UpEnd_time],[Data],[Model])
SELECT  INSERTED.Line,INSERTED.Machine,INSERTED.Adress,INSERTED.Adress_num,INSERTED.Up_time,INSERTED.Up_time,INSERTED.Data,INSERTED.Model 
from INSERTED 
LEFT JOIN Machine_adress ON Machine_adress.Machine=inserted.Machine AND Machine_adress.Adress=inserted.Adress AND Machine_adress.Adress_num=inserted.Adress_num
LEFT JOIN B01_ALM_Data_Record ON B01_ALM_Data_Record.Machine=inserted.Machine AND B01_ALM_Data_Record.Adress=inserted.Adress AND B01_ALM_Data_Record.Adress_num=inserted.Adress_num AND  B01_ALM_Data_Record.Data=inserted.Data 
WHERE inserted.Data=1 and Machine_adress.Data_Type='M2' AND B01_ALM_Data_Record.Machine IS NULL 
;
UPDATE B01_ALM_Data_Record SET B01_ALM_Data_Record.UpEnd_time=inserted.Up_time,B01_ALM_Data_Record.Data=inserted.Data 
FROM B01_ALM_Data_Record 
INNER JOIN inserted 
ON inserted.Machine=B01_ALM_Data_Record.Machine AND B01_ALM_Data_Record.Adress=inserted.Adress AND B01_ALM_Data_Record.Adress_num=inserted.Adress_num 
INNER JOIN Machine_adress 
ON Machine_adress.Machine=inserted.Machine AND Machine_adress.Adress=inserted.Adress AND Machine_adress.Adress_num=inserted.Adress_num
 WHERE inserted.Data=0 and Machine_adress.Data_Type='M2' and B01_ALM_Data_Record.Data=1

END
GO

ALTER TABLE [dbo].[B01_adress_record] ENABLE TRIGGER [B01CFQ_upm]
GO


总结:本篇文章主要讲解SQL数据库的INSERT INTO SELECT 逻辑控制语句、公式表表达式、预存程序、触发器用法及其简单实例。

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

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

相关文章

React(coderwhy)- 01

React的介绍(技术角度) React是什么?React:用于构建用户界面的 JavaScript 库React的官网文档:https://zh-hans.reactjs.org/React的特点: 声明式编程组件化开发多平台适配Hello React react需要3个依赖&am…

【数字图像处理】骨骼锐化

源码链接:skeleton.cpp 一、实验要求 附件是人体骨骼核扫描图像,我们的目的是通过图像锐化突出骨骼的更多细节来增强图像。图像灰度的动态范围很窄并且有很高的噪声内容。 二、实验内容 按照课本冈萨雷斯的《数字图像处理》上面的思路,整…

【代码题】五道链表面试题

目录 1.移除链表元素 2.反转链表 3.链表的中间结点 4.链表中倒数第k个结点 5.合并两个有序链表 1.移除链表元素 点击进入该题 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回新的头节点 。 思路&am…

CTF-AWD入门手册

引文 AWD赛制是一种网络安全竞赛的赛制。AWD赛制由安全竞赛专家及行业专家凭借十多年实战经验,将真实网络安全防护设备设施加入抽象的网络环境中,模拟政府、企业、院校等单位的典型网络结构和配置,开展的一种人人对抗的竞赛方式,…

语言和文法的形式定义---编译原理

文法的构建问题 * 参考已有的模型 最经典的即是算数表达式的模型,其有多个算术运算符号和优先级别。 文法与正则表达式与有穷自动机的转换 显然是3型文法,也就是正则文法才有相应的性质,因为只有3型文法才是右部至多仅有两个符 号&#xf…

【Vue路由】props配置、replace属性、编程式路由导航、缓存路由组件

文章目录props配置props值为对象props值为布尔值props值为函数总结\<router-link>的replace属性总结编程式路由导航案例实现总结缓存路由组件案例实现总结props配置 我们可以看看我们原来如何使用传递过来的参数的&#xff1a; 我们要写一大长串去从$route身上拿到我们…

传统目标跟踪——光流法

目录 一、光流法 二、LK光流法 2.1 实现原理 2.2 API 三、代码 四、总结 一、光流法 光流&#xff1a;空间运动物体在观察成像平面上像素运动的瞬时速度。 光流法利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧之间存在的对应关系&#xff0c;…

密码学_RSA

RSA是1977年由罗纳德李维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。 RSA是非…

dom截图的几种实现方式

前端要实现dom截图的功能&#xff0c;现在比较常用的是使用以下两个库 dom-to-image 使用svg技术实现html2canvas 使用canvas技术实现 如果想自己写一个dom截图的可以参考 dom-pointer 代码比较简单&#xff0c;非常适合拿来研究rasterizeHTML.js 目前rasterizeHTML.js已经被…

1231. 航班时间(恶心的输入处理 + 简单的数学)

题目如下&#xff1a; 题解 or 思路&#xff1a; 因为题目假设两次飞行时间是相同的&#xff0c;我们可以通过减法将时差消去。那么飞行时间就是: time1time22\frac{time_1 time2}{2}2time1​time2​ 题目的难点是处理输入&#xff0c;我们可以使用 sscanf 来进行处理&#x…

小程序开发经验分享(1)

账号搭建篇 1. 获取微信小程序的AppID 首先,我们需要拥有一个帐号,如果你能看到该文档,我们应当已经邀请并为你创建好一个帐号。注意不可直接使用服务号或订阅号的AppID。 利用提供的帐号,登录 https://mp.weixin.qq.com ,就可以在网站的“设置”-“开发者设置”中,查…

MySQL高级 SQL优化【插入数据主键优化】

目录 1&#xff1a;SQL优化 1.1&#xff1a;插入数据 1.1.1&#xff1a;insert 1). 优化方案一&#xff08;批量插入数据) 2). 优化方案二&#xff08;手动控制事务&#xff09; 3). 优化方案三 &#xff08;主键顺序插入&#xff0c;性能要高于乱序插入。&#xff09; …

java应用集成HanLP进行中文自然语言分词详细完整案例以及demo

本文可以作为上一篇《mysql/mariadb 实现全文检索》的补充&#xff0c;实现对字符串分词的逻辑 什么是自然语言&#xff0c;什么是自然语言分词及例子 什么是自然语言 狭义地讲&#xff0c;利用计算机进行语言分析的研究是一门语言学与计算机科学的交叉学科&#xff0c;学术界…

CTFSHOW新手杯MISC部分WriteUp

引文 之前复现了CTFSHOW新人杯的WEB方向部分题目&#xff0c;今天就复现一下MISC为主的题目&#xff0c;可能有些读者不太明白MISC方向是什么意思&#xff0c;简单来说就是"杂项",包括&#xff1a;隐写&#xff0c;压缩包处理&#xff0c;流量分析&#xff0c;攻击取…

电容基础知识

电解电容负极有标识标有耐压值&#xff08;400V 450WV&#xff09; 容量 &#xff08;68UF&#xff09; 温度&#xff08;105摄氏度&#xff09;等 电容容量判断方法&#xff1a;直标法&#xff1a;上图&#xff0c;容量68微法&#xff0c;耐压值400V。数字表示法&#xff1a;方…

如何在公司审计中保持安全

如何在公司审计中保持安全 如今&#xff0c;财务弹性是决定您的公司能否在不确定时期适应和发展的主要属性之一。这可能令人很惊讶&#xff0c;但您的年度业务审计可以成为您提高业务敏捷性的秘密武器。它通过确定内部控制和财务报告的效果以及哪些流程改进应该在您的优先级列…

蓝桥杯Python练习题15-区间k大数查询

资源限制   内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述   给定一个序列&#xff0c;每次询问序列中第l个数到第r个数中第K大的数是哪个。 输入格式   第一行包含一个数n&#xf…

黑马Hive+Spark离线数仓工业项目-任务流调度工具AirFlow(2)

Oracle与MySQL调度方法 目标&#xff1a;了解Oracle与MySQL的调度方法 实施 Oracle调度&#xff1a;参考《oracle任务调度详细操作文档.md》 - step1&#xff1a;本地安装Oracle客户端 - step2&#xff1a;安装AirFlow集成Oracle库 - step3&#xff1a;创建Oracle连接 - ste…

ODT在手,DDR5布线可以任性走?

作者&#xff1a;一博科技高速先生成员 姜杰 ODT是On Die Termination的缩写&#xff0c;又叫片内端接&#xff0c;顾名思义&#xff0c;就是把端接电阻放在了芯片内部。作为一种端接&#xff0c;ODT可以减小反射&#xff0c;对信号质量的改善显而易见&#xff0c;SI攻城狮很…

家用宽带搭建个人服务器(二)

本文主要详记免费二级域名注册和免费DDNS解析 写在前头 近几年国内注册域名需要备案&#xff0c;域名解析服务商都陆续需要收费了&#xff0c;对于我这种想简单玩玩的人来说实在是太麻烦了(主要是费钱&#xff09;&#xff0c;花了点时间找到了免费域名注册和DDNS解析 本文基于…