mysql 查询变量@i:=@i+1

        学习完mysql的查询:基本查询,连接查询和子查询和mysql 正则表达式查询,接下来先学习下变量查询。

        mysql中没有oracle序列号那一列。mysql可以使用查询变量的方式去处理。我们先了解下查询变量,后面应用起来就更清晰。

1,定义

        MySQL查询变量是指在MySQL查询语句中使用的变量,可以在查询语句中定义和使用,用于存储和传递数据。查询变量可以是用户定义变量或系统变量,用户定义变量需要使用@符号来表示,系统变量则不需要。

2,使用语法

        MySQL查询变量可以在查询语句中定义和使用,定义时需要使用SET语句,格式如下:

SET @变量名 = 值;

1,系统变量:

1,局部修改(会话级别):只针对当前自己客户端当次连接有效

语法:

set 变量名= 新值;

比如:

-- 设置查询变量
SET @myVariable := 0; 
-- 使用查询变量进行操作
SELECT @myVariable := @myVariable + 1 AS counter; 
-- 重置查询变量
SET @myVariable := 0;

查看变量名:

语法:

select @变量名;

比如:

SELECT @myVariable;

2,全局修改:针对所有的客户端,“所有时刻都”有效

语法:

set global 变量名 = 值;

        这个很少去操作这。更多用局部变量。

2,select 单个的:

        在from 后面初始变量值,声明的话,select那边就可以

SELECT (@i:=@i+1) AS 序号 FROM (SELECT @i:=0) AS temp;

3,局部变量

        作用范围在begin到end语句块之间,在该语句块里设置的变量

        declare语句专门用于定义局部变量

语法:

declare 变量名 数据类型 [属性];

        1、局部变量使用declare关键字声明,(没有该语句则不视为局部变量)

        2、局部变量declare语句出现的位置一定是在begin和end之间(begin end是在大型语句块中使用:函数/存储过程/触发器)

3,作用:

        MySQL查询变量可以用于存储和传递数据,常用于条件查询、流程控制等方面。

        例如,可以使用查询变量实现动态条件查询:

SET @id = 18;
SELECT * FROM 表名 WHERE id = @id;

        可以使用查询变量实现条件判断:

SET @flag = 1;
IF @flag = 1 THEN
SELECT * FROM 表名;
SELECT * FROM 表名 WHERE 列名 = 值;
END IF;

4,优缺点:

        MySQL查询变量的优点是可以提高查询效率,避免重复查询,同时可以实现动态查询和条件判断等功能。

        缺点是使用不当可能导致查询结果不准确,同时需要注意变量的作用域和生命周期,避免出现变量值被覆盖或未定义的情况。

        MySQL查询变量是一种在查询语句中定义和使用的变量,可以用于存储和传递数据,常用于条件查询、流程控制等方面。使用查询变量可以提高查询效率,避免重复查询,同时可以实现动态查询和条件判断等功能。但需要注意变量的作用域和生命周期,避免出现变量值被覆盖或未定义的情况。

5,应用:

0,数据准备:

-- 建表
DROP TABLE IF EXISTS employee;
CREATE TABLE employee(
  id INT NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(10),
  salary DECIMAL(10,2),
  dept_id INT DEFAULT 0,
  PRIMARY KEY(id)
);


-- 插入数据:
INSERT INTO employee VALUES
(1,'jack', 7000, 1),
(2, 'tom', 8000, 1),
(3, 'joe', 8000, 1),
(4, 'dell', 9000, 2),
(5, 'ken', 10000, 2),
(6, 'tim', 6000, 3),
(7, 'steven', 7000, 3),
(8, 'tank', 9000, 1),
(9, 'tolly', 10000, 1),
(10, 'jony', 12000, 1),
(12, 'jenny', 12000, 2),
(15, 'jams', 13000, 3),
(19, 'west', 16000, 3);

1,查询序号:

SELECT (@i:=@i+1) AS 序号, id, NAME
FROM employee, (SELECT @i:=0) AS temp;

查询结果:

2,统计数量

        由上面的序号可以知道数量,直接再获取其最大值:

SELECT MAX(count_num) count_num FROM (
SELECT (@count:=@count+1) AS count_num
FROM employee, (SELECT @count:=0) AS temp
) AS temp2;

3,求和

        统计上面id的和的值

SELECT MAX(sum_num) sum_num FROM (
SELECT (@count:=@count+e.id) AS sum_num
FROM employee e, (SELECT @count:=0) AS temp
) AS temp2;

4,统计各部门的人数

直接sql:
SELECT dept_id, COUNT(1) AS staff_num 
FROM employee e GROUP BY e.dept_id;

用变量的方式:

        处理思路: 要根据dept_id聚合,一个变量肯定不够,要声明一个变量pre,赋值dept_id。

如果pre变量的值,跟dept_id值是一样的,则count加1

sql:

SELECT *, @count:=IF(@pre=dept_id, @count+1, 1) AS cout_num, 
  @pre:=dept_id AS pre 
FROM employee,(SELECT @count:=0, @pre:=NULL) v;

        由结果可知,因为dept_id是分散的,计算值是根据顺序来的。

        再加一层排序。

SELECT *, @count:=IF(@pre=dept_id,@count+1,1) AS cout_num, 
  @pre:=dept_id AS pre 
FROM employee,(SELECT@count:=0, @pre:=NULL) v
ORDER BY dept_id;

        这样结果就符合初步想要的了。

        然后再进行过滤下:

 SELECT dept_id, MAX(cout_num) AS staff_num FROM (
  SELECT dept_id, @count:=IF(@pre=dept_id,@count+1,1) AS cout_num, 
    @pre:=dept_id AS pre 
  FROM employee,(SELECT@count:=0, @pre:=NULL) v
  ORDER BY dept_id
) AS temp3 GROUP BY dept_id;

总结:

        mysql查询变量很强大,mysql没有序列号的,就可以直接用这种方式。 还有其它很多应用的地方,后续有遇到再补充。

        上一篇: 《mysql 正则表达式查询》

        下一篇: 《mysql 变量查询题目》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

盘点那些好用的SAP FIORI App (五)-管理银行账户

SAP的ECC系统里面,House Bank银行账户的维护是在GUI通过T-Code FI12进行创建修改的,但是升级到S4 HANA以后,FI12的创建维护功能已经取消,所有的house bank account,都要通过这个FIORI App 维护。 App ID 如下 银行账户创建 点击…

【Linux 命令】内核、驱动调试手段总结

文章目录 1. printk2. strace3. Itrace4. ptrace5. ftrace6. 动态打印7. perf8. devmem9. demsg参考: 1. printk **printk()**是 Linux 内核中最广为人知的函数之一。它是我们打印消息的标准工具,通常也是追踪和调试的最基本方法。 虽然 printk() 是基…

Stable diffusion 初学者指南

1. Stable diffusion 初学者指南 想掌握Stable Diffusion AI技术吗? 这份初学者指南专为完全没接触过Stable Diffusion或任何AI图像生成器的新手设计。跟随本指南,你将了解Stable Diffusion的基本情况,并获得一些实用的入门技巧。 什么是S…

JavaWeb流行框架(代码案例)

Struts2基础 通过Struts2将请求转发到指定JSP页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://w…

Codeforces Round 938 (Div. 3) (A~E)

Codeforces Round 938 (Div. 3) (A~E) 目录&#xff1a;A B C D E A题&#xff1a;Yogurt Sale 标签: 数学&#xff08;math&#xff09; 题目大意 酸奶价格&#xff0c; a 元一份&#xff0c;b元两份n问&#xff1a;买n份最少多少钱 思路 a元一份&#xff0c;b元两份&#…

js获取上周本周下周的日期(附Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 现在的时间点是&#xff1a;2024-04-08&#xff0c;对应的日期如下&#xff08;上周、这周、下周&#xff09; 1. 基本知识 讲述Demo之前&#xff0c;先补充一些基础知识 JavaScript 中的 Date 对象是用于处理日期和时间的对象。它…

【ensp】VLAN间通信的解决办法

VLAN间通信简介 VLAN间三层通信是指在VLAN网络中&#xff0c;不同VLAN之间进行通信的过程。 我们知道VLAN是虚拟局域网&#xff0c;在一个局域网内我们是通过Mac地址进行通信&#xff0c;在局域网与局域网之间通过IP地址来通信&#xff0c;大致过程如下&#xff1a; 主机在发…

【SERVERLESS】搭建ServerLess服务

目录 一、前言 二、什么是ServerLess? 三、ServerLess技术选型 四、ServerLess基础服务搭建 Mac安装示例&#xff1a; Windows安装说明&#xff1a; 五、生成ServerLess应用 六、ServerLess部署 验证并访问函数应用 七、ServerLess进阶演示 八、ServerLess最后总结 …

芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点

💡本篇内容:【芒果YOLOv8改进ATSS标签分配策略|第三集】芒果YOLOv8改进组合157:动态标签分配ATSS+新颖高效AsDDet检测头组合改进,共同助力VisDrone涨点1.8%,小目标高效涨点 💡🚀🚀🚀本博客 标签分配策略ATSS改进+ 新颖高效AsDDet检测头组合改进,适用于 YOLOv8 …

免费ai写作软件有哪些?分享10个给你 #媒体#学习#媒体

你是否因为写作困顿而感到沮丧&#xff1f;是不是希望能够找到一个能给你提供无限灵感和提高创作效率的利器&#xff1f;AI写作助手就是你的绝佳选择&#xff01;现在我向大家推荐几款好用的AI写作助手&#xff0c;它们将让你的创作之旅更加流畅、富有创意。 1.飞鸟写作 这是…

超详细解读Transformer框架

Transformer是由谷歌大脑2017年在论文《Attention is All You Need》中提出的一种序列到序列(Seq2Seq)模型。自提出伊始&#xff0c;该模型便在NLP和CV界大杀四方&#xff0c;多次达到SOTA效果。NLP领域中&#xff0c;我们所熟知的BERT和GPT就是从Transformer中衍生出来的预训练…

【云计算】云网络产品体系概述

云网络产品体系概述 在介绍云网络产品体系前&#xff0c;先介绍几个与云计算相关的基础概念。 阿里云在基础设施层面分为 地域 和 可用区 两层&#xff0c;关系如下图所示。在一个地域内有多个可用区&#xff0c;每个地域完全独立&#xff0c;每个可用区完全隔离&#xff0c;同…

咸鱼之王_手游_开服搭建架设_内购修复无bug运营版

视频演示 咸鱼之王_手游_开服 游戏管理后台界面 源码获取在文章末尾 源码获取在文章末尾 源码获取在文章末尾 或者直接下面 https://githubs.xyz/y28.html 1.安装宝塔 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh &…

Leetcode C语言习题

Leetcode习题27&#xff1a;移除元素 题目&#xff1a; 说明&#xff1a; 示例&#xff1a; 题解&#xff1a; 方法一&#xff1a;&#xff08;开辟额外的数组空间&#xff09; 我们可以创建一个新的数组&#xff0c;然后用循环来遍历原数组&#xff0c;将原数组中不为 val…

29.WEB渗透测试-数据传输与加解密(3)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;28.WEB渗透测试-数据传输与加解密&#xff08;2&#xff09; md5解密网站&#xff1a;ht…

SpringMVC数据接收(全面/详细注释)

SpringMVC涉及组件&#xff1a; DispatcherServlet : SpringMVC提供&#xff0c;我们需要使用web.xml配置使其生效&#xff0c;它是整个流程处理的核心&#xff0c;所有请求都经过它的处理和分发&#xff01;[ CEO ]HandlerMapping : SpringMVC提供&#xff0c;我们需要进行…

高创新 | [24年新算法]NRBO-XGBoost回归+交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测

高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测 目录 高创新 | [24年新算法]NRBO-XGBoost回归交叉验证基于牛顿拉夫逊优化算法-XGBoost多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现 [24年新算…

实现 jwt 鉴权- SpringBoot + 微服务

目录 项目结构 主要步骤 auth-service里&#xff1a; 1. 配置 pom.xml 依赖 2. 实现HandlerInterceptor 接口的 preHandle 函数 3. 实现 WebMvcConfigurer 的 addInterceptors 接口 4. 生成 token 和验证 token 5. 登录接口示例 user-service 里&#xff1a; 6. 实现拦…

Netty NioEventLoop详解

文章目录 前言类图主要功能NioEventLoop如何实现事件循环NioEventLoop如何处理多路复用Netty如何管理Channel和Selector管理Channel管理Selector注意事项 前言 Netty通过事件循环机制(EventLoop)处理IO事件和异步任务&#xff0c;简单来说&#xff0c;就是通过一个死循环&…

信息泄露漏洞的JS整改方案

引言 &#x1f6e1;️ 日常工作中&#xff0c;我们经常会面临线上环境被第三方安全厂商扫描出JS信息泄露漏洞的情况&#xff0c;这给我们的系统安全带来了潜在威胁。但幸运的是&#xff0c;对于这类漏洞的整改并不复杂。本文将介绍几种可行的整改方法&#xff0c;以及其中一种…