当前位置: 首页 > news >正文

【数据库】sql函数和多表关联查询

目录

一,SQL函数

1,聚合函数

1, count函数

2, AVG函数

3, SUM函数

4, MAX函数

5, MIN函数

6,数据分组——GROUP BY

7,限定组的结果,HAVING

8, HAVING与WHERE的区别

9,对结果集排序:order by

 10,MySQL多行数据合并:GROUP_CONCAT

11,查询结果限定

2,数值型函数

3,字符串函数

 示例:

4,日期和时间函数

 示例

5,流程控制函数

1,IF(expr,v1,v2)

2,IFNULL(v1,v2) 

3,CASE value WHEN

4,CASE WHEN

二,多表关联查询

 1,inner join:内连接

 2,leftjoin:左连接

 3,rightjoin:右连接

 4,自连接

 5,​交叉连接


一,SQL函数

1聚合函数

聚合函数对一组值进行运算,并返回单个值。也叫分组函数。

COUNT(*|列名) 统计行数,*表示所有记录都不忽略,指定列名时会忽略null

AVG(数值类型列名) 平均值,忽略null

SUM (数值类型列名) 求和,忽略null

MAX(列名) 最大值,忽略null

MIN(列名) 最小值,忽略null

  

t1的所有记录如下图所示:

 

1, count函数

COUNT(*|列名) 统计行数,*表示所有记录都不忽略,指定列名时会忽略null

(1)统计t1表有多少行

select count(*) from t1;

 

 

(2)统计t1表中的performance 列有多少行,不统计null

select count(performance) from t1;

 

 

2, AVG函数

AVG(数值类型列名) 平均值,忽略null

统计t1表中salary的平均值

select avg(salary) from t1;

 

3, SUM函数

SUM(数值类型列名) 求和,忽略null

统计t1表中salary的和

select sum(salary) from t1;

 

 

4, MAX函数

MAX(列名) 最大值,忽略null

MIN统计t1表中salary的最大值

select max(salary) from t1;

 

 

 

5, MIN函数

 MIN(列名) 最小值,忽略null

统计t1表中salary的最小值

select min(salary) from t1;

 

 

6,数据分组——GROUP BY

GROUP BY子句的真正作用在于与各种聚合函数配合使用。它用来对查询出来的数据进行分组。

分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录。

 

 数据分组--GROUP BY

语法:SELECT column,group_function FROM table[WHEREcondition]

 [GROUP BY group_by_expression]

查看dept表下的所有信息:

select * from dept;

 

  查看表employee的所有信息:

select * from employee;

 

 (1)每个部门的平均工资

select dept_id,avg(salary) from employee group by dept_id;

 

(2)出现在select后的字段都,它必须出现在GROUP BY子句中

select dept_id,d_name,avg(salary) from employee group by dept_id,d_name;

(3)出现在group by子句的字段可以不出现在select的列表当中

select dept_id,avg(salary) from employee group by dept_id,d_name;

7,限定组的结果,HAVING

限定组的结果:HAVING子句,HAVING子句用来对分组后的结果再进行条件过滤。

语法:SELECT column, group_function FROM table [WHEREcondition] [GROUP BY group_by_expression]  [HAVING group_condition] [ORDER BY column];

(1)查询部门平均工资大于400部门

select d_name,avg(salary) from employee group by d_name having avg(salary) >400;

 

 

8, HAVING与WHERE的区别

HAVING与WHERE的区别:WHERE是在分组前进行条件过滤, HAVING子句是在分组后进行条件过滤,WHERE子句中不能使用聚合函数,HAVING子句可以使用聚合函数。

 

(1)查找employee表中dept_id>1d_nameavg(salary)

方法一:where

select d_name,avg(salary) from employee where dept_id>1 group by d_name;

方法二:having

select d_name,avg(salary) from employee group by d_name,dept_id having dept_id>1;

9,对结果集排序:order by

对结果集排序:查询语句执行的查询结果默认是按数据插入顺序排列,实际上可能需要按某列的值大小排列,按某列排序采用order by 列名[desc],列名…;设定排序列的时候可采用列名、列别名。

(1)查找employee表中dept_id>1d_nameavg(salary),并对平均工资进行升序排序

select d_name,avg(salary) asalary from employee group by d_name,dept_id having deept_id>1 order by asalary;

(2)查找employee表中按照d_name分组的dept_id>1avg(salary)>=300d_nameavg(salary)并按升序排序

select d_name,avg(salary) asalary from employee where dept_id>1 group by d_name having asalary >=300 order by asalary;

 

 

 10,MySQL多行数据合并:GROUP_CONCAT

 (1)查找employee表中按照组dept_idd_name分组的dept_id,d_name,avg(salary),e_id并把属于一组的e_id合并输出在一行

select dept_id,d_name,avg(salary),group_concat(e_id) from employee group by dept_id,d_name;

(2)查找employee表中dept_idd_name,avg(salary),e_id,name,并把属于一组的e_id与name合并输出在一行

select dept_id,d_name,avg(salary),group_concat(e_id),group_concat(name) from emplloyee

注意:使用 GROUP_CONCAT()函数必须对源数据进行分组,否则所有数据会被合并成一行

(3)查找dept表中的部门名称并将查到的多行结果合并一行

select group_concat(d_name) from dept;

11,查询结果限定

查询结果限定,在SELECT语句最后可以用LIMLT来限定查询结果返回的起始记录和总数量。MySQL特有。

语法:SELECT … LIMIToffset_start,row_count;

offset_start:第一个返回记录行的偏移量。默认为0。

row_count:要返回记录行的最大数目。

dept表有5行数据

select * from dept;

 

 

(1)显示表dep前t三行数据

select * from dept limit 3;

 

 

(2)从第3行开始,显示3行内容(n,m从n+1行开始,显示m行内容)

select * from dept limit 2,3;

 

 

 

 

 

 

2,数值型函数

函数名称

作用

ABS

求绝对值

SQRT

求平方根

POW 和 POWER

两个函数的功能相同,返回参数的幂次方

MOD

求余数

CEIL 和 CEILING

两个函数功能相同,都是返回不小于参数的最小整数,即向上取整

FLOOR

向下取整,返回值转化为一个BIGINT

RAND

生成一个0~1之间的随机数,传入整数参数时,用来产生重复序列

ROUND

对所传参数进行四舍五入

SIGN

返回参数的符号

 

 

3,字符串函数

函数名称

作用

LENGTH

计算字符串长度函数,返回字符串的字节长度

CHAR_LENGTH

计算字符串长度函数,返回字符串的字符长度,注意两者的区别

CONCAT

合并字符串函数,返回结果为连接参数产生的字符串,参数可以是一个或多个

INSERT(str,pos,len,newstr)

替换字符串函数

LOWER

将字符串中的字母转换为小写

UPPER

将字符串中的字母转换为大写

LEFT(str,len)

从左侧字截取符串,返回字符串左边的若干个字符

RIGHT

从右侧字截取符串,返回字符串右边的若干个字符

TRIM

删除字符串左右两侧的空格

REPLACE(s,s1,s2)

字符串替换函数,返回替换后的新字符串

SUBSTRING(s,n,len)

截取字符串,返回从指定位置开始的指定长度的字符换

REVERSE

字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串

STRCMP(expr1,expr2)

比较两个表达式的顺序。若expr1 小于 expr2 ,则返回 -1,0相等,1则相反

LOCATE(substr,str [,pos])

返回第一次出现子串的位置

INSTR(str,substr)

返回第一次出现子串的位置

 

 示例:

统计dept表中d_name的长度

select length(d_name) from dept;

 

 

 

4,日期和时间函数

函数名称

作用

CURDATE() CURRENT_DATE() CURRENT_DATE

两个函数作用相同,返回当前系统的日期值

CURTIME CURRENT_TIME() CURRENT_TIME

两个函数作用相同,返回当前系统的时间值

NOW()

返回当前系统的日期和时间值

SYSDATE

返回当前系统的日期和时间值

DATE

获取指定日期时间的日期部分

TIME

获取指定日期时间的时间部分

MONTH

获取指定日期中的月份

MONTHNAME

获取指定曰期对应的月份的英文名称

DAYNAME

获取指定曰期对应的星期几的英文名称

YEAR

获取年份,返回值范围是 1970〜2069

DAYOFWEEK

获取指定日期对应的一周的索引位置值,也就是星期数,注意周日是开始日,为1

WEEK

获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1 〜53

DAYOFYEAR

获取指定曰期是一年中的第几天,返回值范围是1~366

DAYOFMONTH 和 DAY

两个函数作用相同,获取指定日期是一个月中是第几天,返回值范围是1~31

DATEDIFF(expr1,expr2)

返回两个日期之间的相差天数,如 SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');

SEC_TO_TIME

将秒数转换为时间,与TIME_TO_SEC 互为反函数

TIME_TO_SEC

将时间参数转换为秒数,是指将传入的时间转换成距离当天00:00:00的秒数,00:00:00为基数,等于 0 秒

 

 示例

查看当前时间:

select CURRENT_DATE;

 

 

 

 

5,流程控制函数

函数名称

作用

IF(expr,v1,v2)

判断,流程控制,当expr = true时,或者为1时返回 v1,当expr = false、null 、0时返回v2

IFNULL(v1,v2)

判断是否为空,如果 v1 不为 NULL,则 IFNULL 函数返回 v1,否则返回 v2

CASE

搜索语句

 

 

1,IF(expr,v1,v2)

判断,流程控制,当expr = true时,或者为1时返回 v1,当expr = false、null 、0, ' '时返回v2

(1)使用IF()函数进行条件判断

如果表达式12>3成立,返回yes,否则返回no;

select if(12>3,'yes','no');

(2)分别显示emp表有奖金和没奖金的员工信息。

在数据库chap04下创建emp表,包含id int primary,name char(30) nut null,comm int三个字段

create table emp(id int primary key,name char(30) not null,comm int);

给表emp中插入数据

insert into emp values (1,'xioaming',2000),(2,'xiaohong',300),(3,'xiaohei',3200);

insert into emp (id,name) values (4,'xiaobai'),(5,'xiaolan');

查看表emp的所有信息

select * from emp;

分别显示emp表有奖金和没奖金的员工信息。

select id,name,if(comm is null,'没奖金','有奖金') '备注' from emp;

2,IFNULL(v1,v2) 

IFNULL(v1,v2)  判断是否为空,如果 v1 不为 NULL,则 IFNULL 函数返回 v1,否则返回 v2

IFNULL() 函数语法格式为:IFNULL(expression, alt_value)

IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为NULL 则返回第一个参数的值。

select ifnull(null,2);

3,CASE value WHEN

使用CASE value WHEN语句执行分支操作

语法:CASE  <表达式>

   WHEN<值1> THEN<操作>

   WHEN<值2> THEN<操作>

   ...

   ELSE<操作>

END

 

将 <表达式> 的值逐一和每个 when的 <值> 进行比较,如果跟某个<值>相等,则执行它后面的 <操作> ,如果所有 when的值都不匹配,则执行 else的操作,如果 when的值都不匹配,且没写 else,则会报错。

(1)判断输入的值是否为3,如果是3,输出three;

select case 3 when 1 then 'one' when 2 then 'two' when 3 then 'three' else 'other' end;

(2)

employee的所有信息如下

查找employee表下的dept_id,name,部门,当dept_id等于1,部门为boss,当dept_id等于2,部门为'finamce' ,3 ,'sale'; 4, 'tech'

select dept_id,name,case dept_id when 1 then 'boss' when 2 then 'finamce' when 3 then 'sale' when 4 then 'tech' end '部门' from employee;

4,CASE WHEN

使用CASE WHEN语句执行分支操作

判断条件放到when后面

select name,salary,casewhen salary<=300 then '[0,300]'when salary<=500 then '(300,500]'when salary<=1000 then '(500,1000]'end'salary level'from employee;

 

 

 

二,多表关联查询

1,inner join:内连接

inner join:内连接,只取得键值一致的部分,代表选择的是两个表键值交叉的部分。

语法如下:

SELECT列名1,列名2... FROM表1 INNER JOIN 表2 ON表1.列=表2.列 [and条件表达式 ][ WhERE条件语句 ] [ orderby列 [desc] ];

查看dept表的所有信息

select * from dept;

查看employee表的所有信息

select * from employee;

employee表中的dept_id是dept表中d_id的外键

(1)查找employeedept_id中和dept表中d_id相等的所有记录

select * from employee e inner join dept d on e.dept_id=d.d_id;

(2)查找职员的部门

select e.name,d_name from employee e inner join dept d on e.dept_id=d.d_id;

(3)查找销售部门的职员姓名

select e.name,d_name from employee e inner join dept d on e.dept_id=d.d_id where d.d_name='sale';

(4)查找工资大于等于300的职员信息

方法一:

select e.name,d_name,e.salary from employee e inner join dept d on e.dept_id=d.d_id and salary>=300;

方法二:

select e.name,d_name,e.salary from employee e inner join dept d on e.dept_id=d.d_id where salary>=300;

2,leftjoin:左连接

leftjoin:左连接,代表选择的是前面一个表的全部。左连接是以左表为标准,只查询在左边表中存在的数据。语法如下:

SELECT列名1 FROM表1 LEFTOUTERJOIN表2 ON表1.列=表2.列 WhERE条件语句;

employee表中的所有记录如下所示:

select * from employee;

dept表中的所有记录如下所示

select * from dept;

显示所有员工的信息,包括没有部门的员工

select * from employee e left join dept d on e.dept_id=d.d_id;

显示所有部门的信息,包括没有员工的部门

select * from dept d left join employee e on e.dept_id=d.d_id;

工资大于等于300的信息

select * from employee e left join dept d on e.dept_id=d.d_id where salary>=300;

工资大于等于300的信息按升序排序

select * from employee e left join dept d on e.dept_id=d.d_id where salary>=300 order by salary;

 

 

3,rightjoin:右连接

3.rightjoin:右连接,代表选择的是后面一个表的全部。右连接将会以右边作为基准,进行检索。语法如下:

SELECT列名1 FROM表1 RIGHTOUTERJOIN表2 ON表1.列=表2.列 WhERE条件语句;

显示所有部门的信息,包括没有员工的部门

select * from employee e right join dept d on e.dept_id=d.d_id;​

 

 

显示所有员工的信息,包括没有部门的员工

select * from dept d right join employee e on e.dept_id=d.d_id;

 

 4,自连接

自连接,自连接顾名思义就是自己跟自己连接,参与连接的表都是同一张表。(通过给表取别名虚拟出)

查找比自己mgr岁数大的员工和mgr的姓名和年龄

(1)创建表t4

create table t4(name char(30),age int,mgr char(20));

 

(2)向表t4中插入数据:

insert into t4 values ('xiaoming',29,'xiao'),('xiaohong',26,'xiao'),('zhouyi',19,'zhou'),('xiao',28,'booss'),('zhou',30,'boss');

 

 (3)查看t4表的所有信息

select * from t4;

 

 (4)查找比自己mgr岁数大的员工和mgr的姓名和年龄(两张表之间的逗号也可以换为join)

select e.name,e.age,m.name mgr,m.age mgr_age from t4 e,t4 m where e.mgr=m.name and e.age > m.age;

5,​交叉连接

交叉连接:不适用任何匹配条件。生成笛卡尔积

表t1的信息如下:

select * from t1;

表dept的信息如下:

select * from dept;

查询表t1与表table的交叉连接

select * from dept,t1;

相关文章:

【数据库】sql函数和多表关联查询

目录 一&#xff0c;SQL函数 1&#xff0c;聚合函数 1&#xff0c; count函数 2&#xff0c; AVG函数 3&#xff0c; SUM函数 4&#xff0c; MAX函数 5&#xff0c; MIN函数 6&#xff0c;数据分组——GROUP BY 7&#xff0c;限定组的结果&#xff0c;HAVING 8&#x…...

6-周赛332总结

6-周赛332总结 过了Q1和Q2&#xff0c;Q2知道用二分但是边界处理的不是很好&#xff0c;迷迷糊糊过的&#xff08;手动再移动了下返回值…&#xff09; Q3知道将子字符串的值取出来&#xff0c;将最短位置放在哈希表中&#xff0c;然后异或在哈希表中找值。但是我这个猪头脑袋…...

嵌入式Qt 开发一个音乐播放器

上篇文章&#xff1a;RK3568源码编译与交叉编译环境搭建&#xff0c;进行了OK3568开发板软件开发环境搭建&#xff0c;通过编译RK3568的源码&#xff0c;可以得到Qt开发的交叉编译相关工具。 本篇&#xff0c;就来在搭建好的软件开发中&#xff0c;进行Qt软件的开发测试。由于…...

2023秋招万得集团AI算法岗面经分享

本专栏分享 计算机小伙伴秋招春招找工作的面试经验和面试的详情知识点 专栏首页:秋招算法类面经分享 主要分享计算机算法类在面试互联网公司时候一些真实的经验 2022年 11.22下午AI算法岗面试 (1)一面35min 1、自我介绍 2、科研:长文本MRC...

RoI Transformer论文翻译详解

Learning RoI Transformer for Oriented Object Detection in Aerial Images 0.摘要 航空图像中的目标检测是计算机视觉中一个活跃而又具有挑战性的任务&#xff0c;因为它具有鸟瞰视角、高度复杂的背景和变化的物体外观。特别是在航空图像中检测密集的目标时&#xff0c;基于…...

Prometheus 自动发现监控AWS EC2实例

本文章简述对接自动发现AWS云EC2实例 前提环境&#xff1a; PromethuesGrafanaAWS IAM权限 涉及参考文档&#xff1a; AWS EC2Grafana 通用监控模板 一、IAM 用户创建 1、创建Prometheus 策略 策略规则&#xff1a; {"Version": "2012-10-17",&quo…...

从recat源码角度看setState流程

setState setState() 将对组件 state 的更改排入队列批量推迟更新&#xff0c;并通知 React 需要使用更新后的 state 重新渲染此组件及其子组件。其实setState实际上不是异步&#xff0c;只是代码执行顺序不同&#xff0c;有了异步的感觉。 使用方法 setState(stateChange | u…...

【Java|golang】1234. 替换子串得到平衡字符串---双指针

有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符串 s&#xff0c;请通过「替换一个子串」的方式&#xff0c;…...

自监督表征学习方法——BYOL(Bootstrap Your Own Latent)

自监督表征学习方法——BYOL(Bootstrap Your Own Latent) 参考文献&#xff1a;《Bootstrap Your Own Latent A New Approach to Self-Supervised Learning》 1.前言背景 学习良好的图像表示是计算机视觉中的一个关键挑战&#xff0c;因为它允许对下游任务进行有效的训练。许…...

均衡负载集群(LBC)-1

均衡负载集群&#xff08;LBC&#xff09; 客户–>通过Internet—>负载调度器—>n台真实服务器 负载调度器&#xff1a; 软件&#xff1a;LVS&#xff1b;Nginx&#xff1b;Haproxy硬件&#xff1a;F5&#xff1b; LVS架构&#xff1a; 使用到C/S&#xff08;B/S…...

WebSocket

关于WebSocket&#xff1a; WebSocket 协议在2008年诞生&#xff0c;2011年成为国际标准。现在所有浏览器都已经支持了。 WebSocket 的最大特点就是&#xff0c;服务器可以主动向客户端推送信息&#xff0c;客户端也可以主动向服务器发送信息&#xff0c;是真正的双向平等对话…...

GA-PEG-GA,Glutaric Acid-PEG-Glutaric Acid,戊二酸-聚乙二醇-戊二酸供应

英文名称&#xff1a;Glutaric Acid-PEG-Glutaric Acid&#xff0c;GA-PEG-GA 中文名称&#xff1a;戊二酸-聚乙二醇-戊二酸 GA-PEG-GA是一种线性双功能PEG羧酸试剂。PEG和羧基COOH之间存在C4酯键。PEG羧酸可用于与氨基反应&#xff0c;与NHS和DCC、EDC等肽偶联试剂反应。 P…...

使用sqlmap + burpsuite sql工具注入拿flag

使用sqlmap burpsuite sql工具注入拿flag 记录一下自己重新开始学习web安全之路③。 目标网站&#xff1a;http://mashang.eicp.vip:1651/7WOY59OBj74nTwKzs3aftsh1MDELK2cG/ 首先判断网站是否存在SQL注入漏洞 1.找交互点 发现只有url这一个交互点&#xff0c;搜索框和登录…...

替代AG9300|替代NCS8823|CS5260 Type-C转VGA视频转换方案

替代AG9300|替代NCS8823|CS5260 Type-C转VGA视频转换方案 CS5260是一款是一款实现USB TYPE-C到VGA视频转换的单片机解决方案转换器。CS5260支持USB Type-C显示端口交替模式&#xff0c;CS5260可以将视频和音频流从USB Type-C接口传输到VGA端口。在CS5260芯片中&#xff0c;显示…...

乐鑫特权隔离机制的 OTA 固件升级

固件空中升级 (OTA, Over-The-Air) 是任何联网设备的重要功能之一&#xff0c;支持开发人员通过远程更新固件&#xff0c;以发布新功能或修复错误。乐鑫特权隔离框架中包含两类应用程序&#xff1a;受保护的应用程序 (protected_app) 和用户应用程序 (user_app) &#xff0c;这…...

C++数据结构 —— 二叉搜索树

目录 1.二叉搜索树的基本概念 1.1二叉搜索树的基本特征 2.二叉搜索树的实现 2.1数据的插入(迭代实现) 2.2数据的搜索(迭代实现) 2.3中序遍历(递归实现) 2.4数据的删除(迭代实现) 2.5数据的搜索(递归实现) 2.6数据的插入(递归实现) 2.7数据的删除(递归实现) 2.8类的完…...

Maven面试题及答案

1、Maven有哪些优点和缺点 优点&#xff1a; 1、简化项目依赖管理 2、方便与持续集成工具(Jenkins)整合 3、有助于多模块项目开发&#xff0c;比如一个模块开发好后发布到仓库&#xff0c;依赖该模块时可以直接从远程仓库更新&#xff0c;不用自己手动去编译 4、有很多插件&am…...

WebRTC系列-Qos系列之接收放RTX处理

文章目录 1. RTX详解1.1 RTX包头解析1.2 RTX包中的OSN2. RTX在WebRTC中处理2.1 组包2.2 解包2.3 发送及接收处理流程2.3.1 发送流程2.3.2 rtx标记的设置流程2.3.3 解析流程2.3.4 RTX解包在上一篇 WebRTC系列-Qos系列之接收NACK文章中分析了接收到nack后解析的主要流程。在WebR…...

国内能否炒伦敦金,2023国际十大正规伦敦金交易平台排名

在目前的投资市场环境中&#xff0c;现货黄金是一种屡见不鲜的投资选择&#xff0c;它依靠国际化的投资环境&#xff0c;成为了世界范围内投资者的重要选择对象。进行现货黄金投资&#xff0c;人们除了要认识市场发展基本现状之外&#xff0c;更要做好基本面和技术面分析工作&a…...

react路由 - react-router-dom

react路由 现代的前端应用大多都是 SPA&#xff08;单页应用程序&#xff09;&#xff0c;也就是只有一个 HTML 页面的应用程序。因为它的用户体验更好、对服务器的压力更小&#xff0c;所以更受欢迎。为了有效的使用单个页面来管理原来多页面的功能&#xff0c;前端路由应运而…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...