基于emp的mysql查询

SQL命令

结构化查询语句:Structured Query Language

结构化查询语言是高级的非过程化变成语言,允许用户在高层数据结构上工作。是一种特殊目的的变成语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

它不需要用户指定对数据的存放防范,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的结构。数据化查询语句可以嵌套,这使它具有极大的灵猴性和强大的功能。

分类:

  • DDL:创建数据库,创建表
  • DML: 给创建好的表中添加数据的
  • DQL: 查看数据–尽量模拟用户对软件的使用
  • DCL: 授权的

问题:

上述四种类型的sql语句,哪个对于测试来讲最重要?

1+1 = ?

期望:2

实际结果:页面3 数据库2

那么就是bug,臭虫

1 准备工作

针对当前DBMS创建属于自己的数据库,数据库名字要求:

  • 不要中文
  • 不要有空格
  • 不要数字开头
  • 不要是已经存在的数据库名字

创建数据库:

  • 通过命令进行创建
  • 通过界面操作进行创建

image-20210831154012704

创建表格:

  • 通过命令进行创建
# 创建表 dept
create table dept(
	deptno int primary key auto_increment, -- 部门编号
	dname varchar(14) ,	  -- 部门名字
	loc varchar(13)   -- 地址
) ;
# 给dept中插入四条数据
insert into dept values(10,'财务部','北京');
insert into dept values(20,'研发部','上海');
insert into dept values(30,'销售部','广州');
insert into dept values(40,'行政部','深圳');


# 创建表emp
create table emp(
	empno int primary key auto_increment,-- 员工编号
	ename varchar(10), -- 员工姓名										-
	job varchar(9),	-- 岗位
	mgr int,	 -- 直接领导编号
	hiredate date, -- 雇佣日期,入职日期
	sal int, -- 薪水
	comm int,  -- 提成
	deptno int not null, -- 部门编号
	foreign key (deptno) references dept(deptno)
);

# 给emp表插入14条数据
insert into emp values(7369,'刘一','职员',7902,'1980-12-17',800,null,20);
insert into emp values(7499,'陈二','推销员',7698,'1981-02-20',1600,300,30);
insert into emp values(7521,'张三','推销员',7698,'1981-02-22',1250,500,30);
insert into emp values(7566,'李四','经理',7839,'1981-04-02',2975,null,20);
insert into emp values(7654,'王五','推销员',7698,'1981-09-28',1250,1400,30);
insert into emp values(7698,'赵六','经理',7839,'1981-05-01',2850,null,30);
insert into emp values(7782,'孙七','经理',7839,'1981-06-09',2450,null,10);
insert into emp values(7788,'周八','分析师',7566,'1987-06-13',3000,null,20);
insert into emp values(7839,'吴九','总裁',null,'1981-11-17',5000,null,10);
insert into emp values(7844,'郑十','推销员',7698,'1981-09-08',1500,0,30);
insert into emp values(7876,'郭十一','职员',7788,'1987-06-13',1100,null,20);
insert into emp values(7900,'钱多多','职员',7698,'1981-12-03',950,null,30);
insert into emp values(7902,'大锦鲤','分析师',7566,'1981-12-03',3000,null,20);
insert into emp values(7934,'木有钱','职员',7782,'1983-01-23',1300,null,10);
  • 通过界面操作

2 DQL基础查询

数据查询语言:student:学生,class:班级

表与表之间关系:一对一,一对多,多对多

学生表对班级表:一个学生只有一个班级

班级表对学生表:一个班级对应多个学生

2.1 部门表字段解析
  • emp:雇员表
    • empno:员工编号
    • ename:雇员名称
    • mgr:领导编号
    • job:岗位
    • sal:薪水
    • comm:奖金
    • hiredate:入职日期
    • deptno:部门编号
  • dept:部门表
    • deptno:部门编号
    • dname:部门名称
    • loc:地址
2.2 单表简单查询
# 查看所在的数据库
select database();

# **********全查询
# 语法:select  什么 from 表名;
# 案例:查询emp表中所有的数据
select * from emp;  # 所有的列
# 案例:查询dept表中所有的数据
select * from dept;

# **********部分列查询
# 语法:select 列名1,列名2,列名3... from 表名;
# 案例:查询emp表中的员工姓名和员工工资
select ename,sal from emp ;
select * from emp;


# ********** 列名起别名
# 语法:select 列名 列的别名,列名2 列的别名 from 表名
# 案例:查询emp表中的员工姓名和员工工资,标题以姓名和工资显示
# mysql和oracle区别:oracle语法要比mysql严谨
select ename  '姓名', sal '工资' from emp;  # ****
select ename as  '姓名', sal as '工资' from emp;
select ename  姓名, sal 工资 from emp;


# ********** 限制查询
# 语法:select * from 表名 limit 开始的行,行数
# 案例:查询emp表中的第2行到第四行数据
select * from emp limit 1,3;

# ********** 排序查询
# 语法:select * from 表名 order by 列名 排序规则(asc:正向排序;desc:反向排序);
# 案例:查询员工信息,工资按照降序排序
select * from emp order by sal desc;
# 案例:查询员工信息,部门按照升序排序,工资按照降序排序
select * from emp order by deptno asc,sal desc;

# ******** 去重查询
# 语法:select distinct(列名) from 表名;
# 案例:查询工作类型有哪些
select distinct(job) from emp;


# ********* 单条件查询
# 语法:select 列 from 表名 where 列名=值;
# 案例:查询张三的工资
select ename,sal from emp where ename = '张三';

# ********* 多条件查询
# 运算符:
# 	算数运算符:+ - * /
# 	逻辑运算符:and or not
# 	比较运算符:> < >= <= !=
# 语法:select 列 from 表 where 条件1 条件2 条件3;
# 案例:查询张三和李四1的工资
select ename,sal from emp where ename='张三' and ename='李四1';
select ename,sal from emp where ename='张三' or ename='李四1';
# 案例:查询工资大于1000小于3000的员工信息
# 案例:查询部门编号不是10的员工信息
# 案例:查询工资大于3000或者工资小于1000的员工信息
# 案例:查询工资为第二到第六的员工信息

# 练习
-- 1.查询dept表中的所有数据
-- 2.查询dept中地址为北京的部门名称
-- 3.查询入职时间在1983年以后的员工姓名和员工工资
-- 4.查询员工的年工资和员工姓名
-- 5.查询员工的薪水的百分之30

2.3 单表复杂查询
2.3.1 内置函数
  1. 聚合函数
# ********** 聚合函数
# 关键字:求和sum(),求数量count(),求最大值max(),求最小值min(),求平均值avg()
# 语法:select 聚合函数 from 表名;
-- 案例:查询公司的最高工资
select sal from emp order by sal desc limit 1;
select max(sal) from emp ;

-- 案例:查询公司每个月支出的工资总数
select sum(sal) from emp;

-- 案例:查询公司总共有多少员工
select count(*) from emp;   # 统计emp表中的行数
select count(ename) from emp;  # 统计emp表中名字的个数
select count(comm) from emp;   # 4   
select count(mgr) from emp;  # 13

-- 案例:查询有奖金的员工信息
select * from emp where comm >=0;
select * from emp where comm is not Null;
-- 案例:查询没有奖金的员工信息
select * from emp where comm is  Null;

-- 案例:查询10部门员工的平均工资
select avg(sal) from emp where deptno = 10;

-- 案例:查询公司的最低工资
select sal from emp order by sal asc limit 1;
select min(sal) from emp;
  1. 数字函数
# abs() 绝对值
select abs(-99999);
# POW(X,Y) x的y次方
select pow(5,3);

select round(153.123456789,-2);		# 四舍五入,可以定义保留的小数位数   200
select floor(123.9999);	# 123 向下取整
select ceil(123.1111111) # 124 向上取整
  1. 字符串函数
# concat(s1,s2,s3,...)  拼接
select 'say hello world' ;		# 把字符串查询出来
select ename from emp;		# 查询emp中的员工姓名
select concat(ename,'say hello world') from emp;
select concat(ename,'的工资为',sal,'元') from emp;
# insert(s1,x,len,s2) 在字符串s1的x的位置,开始替换为s2的字符串长度为len
SELECT INSERT("某人欠我x钱", 5, 1, "1000000000000000000000000000");
  1. 时间函数
# adddate(t,n)
select adddate('2021-09-01',INTERVAL 10 DAY);
select now();
2.3.2 复杂查询
# **************** 模糊查询 **************************************
# 通配符:_代表一个字符   %代表0-多个字符
# 语法:
# 案例:查询名字为三个字的员工信息
# 伪代码:选择 所有列 从 员工信息表  哪里  名字为3个字
select * from emp where ename like '__';
# 案例:查询工作类型第一个字是推的员工信息   # 推销员 推 推车
# 伪代码:选择 所有列 从 员工信息表  哪里  工作类型 推XXXX
select * from emp where job like '推%';


# **************** 集合操作 ****************************************
# 关键字:in not in
# 语法:select * from tbname where 列 in(值1,值2,值3);
# 案例:查询工 资为1000,2000,3000,4000,5000,6000的员工信息
# 伪代码:选择 所有列信息 从 员工表 哪里 工资为1000 工资为2000 ...
select * from emp where sal = 1000 or sal = 2000 or sal = 3000 
or sal = 4000 or sal = 5000 or sal = 6000;
select * from emp where sal in (1000,2000,3000,4000,5000,6000);
# 案例:查询工资不等于1000,2000,3000的员工信息
select * from emp where sal not in (1000,2000,3000);


# ******************* 分组查询 ***************************
# 语法:select 分组列,聚合函数 from tbname group by 分组的列; 
-- 案例:查询每个部门的人数 (先按部门划分,之后在对每个部门统计人数)
-- 问题:如果使用*,又使用分组,那么分组之后,就是三个组,每个组执行占用一行,
select deptno,count(*) from emp group by deptno;

-- 案例:查询每个部门的最高工资
select deptno,max(sal) from emp group by deptno;

-- 案例:查询每个部门的平均工资
select deptno,avg(sal) from emp group by deptno;

-- 案例:查询每个部门的最低工资
select deptno,min(sal) from emp group by deptno;

-- 案例:查询每个部门每个月支出工资总额
select deptno,sum(sal) from emp group by deptno;

-- 案例:查询不在10部门的其他部门的平均工资,保留两位小数
-- 结果:avg(sal)
-- 条件:where deptno not in (10) 或者 where deptno != 10
-- 注意:where只能跟在表后面
select deptno,round(avg(sal),2) from emp  where deptno != 10 group by deptno ;


-- 案例:查询平均工资大于2000的部门和部门平均工资
-- 思考:分组之前筛选条件?还是分组之后筛选条件
-- having: 有
select deptno,round(avg(sal),2) from emp where  avg(sal) > 2000 group by deptno;


-- 查询部门人数大于3的部门编号和人数
-- 查询每个部门中工作岗位为2个字符,且这样的员工人数大于3的部门编号和员工人数

3 DQL的进阶查询

3.1 子查询
3.1.1 单行子查询

子查询的结果只有一行数据

可以使用的运算符:

  • 所有的比较运算符
  • = > < >= <=
# ******************* 子查询
-- 案例: 查询工资比张三高的员工信息
-- 1.先查询出张三的工资
-- 2.查询比步骤1高的员工信息
select sal from emp where ename = '张三';  # 等价于1250
select * from emp where sal > (select sal from emp where ename = '张三');

-- 案例:查询跟张三同部门的员工信息
-- 1.查询张三的部门编号
-- 2.查询部门编号跟步骤1相同的员工信息
select deptno from emp where ename = '张三';  # 30
select * from emp where deptno = (select deptno from emp where ename = '张三');

3.1.2 多行子查询

子查询的结果有多行数据

-- 案例:查询工作地点在北京的员工信息-->deptno为10的员工信息
select * from emp;		# 没有工作地点的
select * from dept;		# loc=北京的部门编号是10

-- 1.查询出在北京的部门编号
-- 2.查询出部门编号在步骤1结果中的员工信息
select deptno from dept where loc = '北京';		# (10,20)
select * from emp where deptno in (select deptno from dept where loc = '北京');
select * from emp where deptno in (10,20);
3.2 多表查询
3.2.1 笛卡尔积查询

image-20210903154000997

  1. 语法:select * from tbname1, tbname2 where 连接条件;
-- 笛卡尔积查询
-- 案例:查询部门信息和员工信息
select * from dept,emp  where emp.deptno = dept.deptno ;		
select * from mydemo3.woniuclass;
-- 案例:查询员工姓名和该员工所在的部门名称
-- 结果:ename, dname
-- 表格:emp, dept
-- 条件:员工所在的部门
select emp.ename,dept.dname from dept,emp  where emp.deptno = dept.deptno ;		

-- mydemo3中看
-- 查询学生姓名和所在班级名称
-- 结果:学生姓名,班级名称

-- 查询学生信息和班级信息
select * from woniuclass,woniustudent;
-- 加入连接条件,查询学生姓名和班级名称
select woniuclass.cname,woniustudent.sname from woniuclass,woniustudent where woniuclass.cid = woniustudent.cid;

-- 如果连接结果中的列名是唯一的,可以不使用表名.列名方式访问
select cname,sname from woniuclass,woniustudent where woniuclass.cid = woniustudent.cid;

-- 存在列别名,那么也存在表别名
-- 表名.列名 == 表别名.列名
-- 语法:
select a.cname, b.sname from woniuclass a,woniustudent b where a.cid = b.cid;

上面案例中使用到的mydemo3数据库信息如下:

image-20210903144323497

  1. 练习题

数据库信息:

image-20210903144414546

练习题如下:

-- -- 练习题 部门表中
-- select * from dept,emp  where emp.deptno = dept.deptno ;	
select * from dept,emp where dept.deptno=emp.deptno ;
	
-- 1.查询部门名称和员工信息   ------ 查询部门信息和员工信息
select dept.dname,emp.empno,emp.ename,emp.job,emp.mgr,emp.hiredate,emp.sal,emp.comm,emp.deptno from dept,emp where dept.deptno=emp.deptno ;
select dept.dname, emp.* from dept,emp where dept.deptno=emp.deptno ;

-- 2.查询部门名称和员工姓名,员工工资
-- 结果:dname,ename,sal
select dept.dname,emp.ename,emp.sal from dept,emp where dept.deptno=emp.deptno ;
select d.dname, e.ename, e.sal from dept d,emp e where d.deptno=e.deptno ;

-- 3.查询部门名称和部门下员工人数
select d.dname,count(e.empno) from dept d,emp e where d.deptno=e.deptno group by e.deptno ;

-- 4.查询部门名称和部门下最高工资
select d.dname,max(e.sal) from dept d,emp e where d.deptno=e.deptno group by e.deptno ;

-- 
-- -- 练习题 学生表
-- 1.查询老师姓名和其所带课程名称
-- 2.查询课程名称以及该课程下学生编号和分数
-- 3.查询学生姓名,课程名称,课程分数
-- 4.查询学生姓名,课程名称,老师姓名,课程分数
3.2.2 内连接 == 笛卡尔积

image-20210903154247324

  1. 语法:select * from A inner join B on A.xx = B.xx;
3.2.3 左外连

image-20210903154542585

  1. 语法:select * from A left [outer] join B on A.xx = B.xx;
  2. 左表:在连接语句中,处于join左边的表,我们称之为左表
  3. 右表:在连接语句中,处于join右表的表,我们称之为右表
  4. 定义:两张表进行连接,结果会把符合连接条件的数据显示出来,同时,会把左表中不符合连接条件的数据也显示出来,且右表的列以空值进行填充
3.2.4 右外连

image-20210903155036836

  1. 语法:select * from A right [outer] join B on A.xx = B.xx;
  2. 左表:在连接语句中,处于join左边的表,我们称之为左表
  3. 右表:在连接语句中,处于join右表的表,我们称之为右表
  4. 定义:两张表进行连接,结果会把符合连接条件的数据显示出来,同时,会把右中不符合连接条件的数据也显示出来,且左表的列以空值进行填充
3.2.5 全外连(mysql不支持全外连)

image-20210903155211642

3.2.6 练习
-- 内连
-- select * from A inner join B on A.xx = B.xx;
-- 左外连
-- select * from A left [outer] join B on A.xx = B.xx;
-- 右外连
-- select * from A right [outer] join B on A.xx = B.xx;

-- 1.查询部门名称和员工姓名,只查询有员工的部门
select * from  dept, emp where dept.deptno = emp.deptno;
select dept.dname, emp.ename from dept inner join emp on dept.deptno=emp.deptno;  # 查询速度快

use mydemo1;
-- 2.查询部门名称和员工姓名,显示所有的部门
select dept.dname, emp.ename from dept left outer join emp on dept.deptno=emp.deptno;  # 查询速度快

-- 3.查询部门名称和员工姓名,显示所有的员工
select dept.dname, emp.ename from dept right outer join emp on dept.deptno=emp.deptno;  # 查询速度快


use mydemo3;
select * from woniuclass;
select * from woniustudent;
select * from woniuclass , woniustudent where woniuclass.cid = woniustudent.cid;
-- 查询学生信息以及班级信息,同时没有班级的学生也要查询出来
select * from woniuclass right outer join woniustudent  on woniuclass.cid = woniustudent.cid;
select * from woniustudent left outer join woniuclass  on woniuclass.cid = woniustudent.cid;

-- 查询学生信息以及班级信息,同时没有学生的班级也要显示
select * from woniuclass left outer join woniustudent  on woniuclass.cid = woniustudent.cid;

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

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

相关文章

Python 网络与并发编程(四)

文章目录 协程Coroutines协程的核心(控制流的让出和恢复)协程和多线程比较协程的优点协程的缺点 asyncio实现协程(重点) 协程Coroutines 协程&#xff0c;全称是“协同程序”&#xff0c;用来实现任务协作。是一种在线程中&#xff0c;比线程更加轻量级的存在&#xff0c;由程…

android脱壳第二发:grpc-dumpdex加修复

上一篇我写的dex脱壳&#xff0c;写到银行类型的app的dex修复问题&#xff0c;因为dex中被抽取出来的函数的code_item_off 的偏移所在的内存&#xff0c;不在dex文件范围内&#xff0c;所以需要进行一定的修复&#xff0c;然后就停止了。本来不打算接着搞得&#xff0c;但是写了…

基础SQL DCL语句

DCL是数据控制语言&#xff0c;用来管理数据库用户&#xff0c;还有控制用户的访问权限 1.用户的查询 MySQL的用户信息存储在mysql数据库中&#xff0c;查询用户时&#xff0c;我们需要使用这个数据库。 后面&#xff0c;还有很多数据&#xff0c;因为篇幅的问题&#xff0c;就…

【FFmpeg】音视频录制 ② ( 使用 Screen Capturer Recorder 软件生成 ffmpeg 可录制的音视频设备 )

文章目录 一、使用 Screen Capturer Recorder 软件生成音视频设备1、设备查找问题 - 引入 Screen Capturer Recorder 软件2、下载安装 Screen Capturer Recorder 软件3、验证 Screen Capturer Recorder 生成的设备 一、使用 Screen Capturer Recorder 软件生成音视频设备 1、设…

【PyTorch】torch.gather() 用法

gather常被用于image做mask的操作中&#xff0c;对哪些地方进行赋值0/1 API&#xff1a; torch.gather — PyTorch 2.2 documentation torch.gather(input, dim, index, outNone) → Tensor gather()的意义&#xff1a; 顾名思义&#xff0c;聚集、集合&#xff1a;gather…

在mac上安装node.js及使用npm,yarn相关命令教程

1、安装node.js 官网&#xff1a;Node.js — Download Node.js 选择需要的版本&#xff0c;点击DownLoad 2、点击继续&#xff0c;直到安装成功。 2.1打开终端输入命令node -v 显示版本号则说明已安装成功 3、全局安装yarn命令 1、sudo npm install --global yarn &#xf…

Python构建学生信息管理系统:构建RESTful API - 学生信息管理系统的后端逻辑

在之前的博客里&#xff0c;我们已经完成了项目初始化&#xff0c;在本篇博客中&#xff0c;我们将深入探讨如何使用Flask框架实现学生信息管理系统的后端逻辑&#xff0c;特别是通过RESTful API来实现学生信息的增删改查&#xff08;CRUD&#xff09;操作。 Flask RESTful AP…

计网笔记:第1章 计算机网络概论

计网笔记&#xff1a;第1章 计算机网络概论 第1章 计算机网络概论1.1 计算机网络发展与分类1.2 OSI和TCP/IP参考模型OSI与TCP/IP参考模型图 1.3 数据封装与解封过程借助OSI模型理解数据传输过程(封装)借助OSI模型理解数据传输过程(解封) 1.4 本章例题 第1章 计算机网络概论 1.…

详解Al作画算法原理

ChatGPT AI作画算法&#xff0c;又称为AI图像生成算法&#xff0c;是一种人工智能技术&#xff0c;它可以根据给定的输入自动生成图像。这类算法近年来变得非常流行&#xff0c;尤其是随着深度学习技术的发展。这里我将聚焦于目前最先进的一类AI作画算法&#xff0c;即生成对抗…

PHP定期给自己网站目录做个特征镜像供快速对比

效果图 上代码&#xff1a; <style> h1{font-size:24px;line-height:180%;font-weight:600;margin:1px 2px;color:#0180cf;} h2{font-size:20px;line-height:140%;font-weight:600;margin:2px 4px;color:green;} h3{font-size:16px;line-height:140%;font-weight:600;m…

Hive——DML(Data Manipulation Language)数据操作语句用法详解

DML 1.Load Load语句可将文件导入到Hive表中。 hive> LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2 ...)];关键字说明&#xff1a; local&#xff1a;表示从本地加载数据到Hive表&#xff1b;否则从HD…

react实现时钟翻牌效果

需求&#xff1a;随着数字的变动要求有时钟翻动动效 问题&#xff1a;只在加载时有动效 解决方案&#xff1a;通过判断数字改变&#xff08;这里通过新旧数值变动来判断&#xff0c;不贴代码啦&#xff09;&#xff0c;每次变动的时候手动把animationIterationCount设置为inf…

linux安装MySQL8.0,密码修改权限配置等常规操作详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

python爬虫之xpath4

1 最终项目实现的代码 仙剑 #!/usr/bin/env python ​ import logging import requests import re from urllib.parse import urljoin import pymongo import multiprocessing ​ mongo_client pymongo.MongoClient("mongodb://192.168.135.131:27017/") db mong…

短视频评论ID批量爬虫提取获客软件|视频评论下载采集工具

短视频评论批量抓取软件&#xff1a;智能拓客&#xff0c;精准抓取用户反馈 主要功能一览 1. 智能抓取任务创建&#xff1a; 软件提供了任务创建功能&#xff0c;用户只需输入任务名称、搜索关键词以及评论监控词&#xff0c;即可开始智能抓取。不仅能够搜索关键词匹配的视频…

【学习记录】autoware标定相机与激光雷达外参

一、autoware选择 这里踩了好几个坑&#xff0c;首先autoware作为一个无人驾驶知名框架&#xff0c;其内部实际上是有两套标定的东西的&#xff0c;这一点绝大多数博客没有提到。其中最常用的是一个叫标定工具箱的东西&#xff0c;这个ros包已经在1.10往后的版本中被删掉了&am…

全彩屏负氧离子监测站的使用

TH-FZ5在繁忙的都市生活中&#xff0c;我们往往忽视了一个至关重要的问题——空气质量。随着工业化的进程加速&#xff0c;空气污染已成为影响人们健康的一大隐患。为了实时监测和了解身边的空气质量&#xff0c;全彩屏负氧离子监测站应运而生&#xff0c;成为了我们守护呼吸健…

百篇博客 · 千里之行

时光荏苒流逝&#xff0c;白驹匆匆过隙&#xff0c;不知不觉间&#xff0c;Damon小智已经在CSDN上记录了第一百多篇文章。恰逢128天创作纪念日的此刻&#xff0c;我感慨良多&#xff0c;这百余篇博客不仅是我的创作历程&#xff0c;更见证了我在这五年技术生涯中走过心路历程。…

用友政务财务系统 FileDownload 任意文件读取漏洞复现

0x01 产品简介 用友政务财务系统具有多项核心功能,旨在满足各类组织的财务管理需求。首先,它提供了财务核算功能,能够全面管理企业的总账、固定资产、现金、应付应收等模块,实时掌握企业的财务状况,并通过科目管理、凭证处理、报表分析等功能为决策提供有力支持。 0x02 …