6.MySQL基本查询

news2024/11/18 21:29:01

目录

  • 表的增删查改
    • Insert(插入)
      • 插入替换
      • 插入替换2
    • Retrieve(查找)
      • SELECT 列
        • 全列查找
        • 指定列查询
        • 查询字段为表达式
        • 为查询结果指定别名
        • 结果去重
      • WHERE 条件
      • order by子句
      • 筛选分页结果
    • Update(更新)
    • delete(删除)
      • 删除数据
      • 截断表
    • 插入查询结果
    • 聚合函数
    • 分组聚合
      • group by子句的使用(包含oracle 9i的经典测试表)

表的增删查改

表的增删查改也可简写为CRUD:Create(创建),Retrieve(读取),Update(更新),Delete(删除)

Insert(插入)

语法:

INSERT[INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)]...
value_list: value, [, value] .. 

示例:
在这里插入图片描述
在这里插入图片描述
也可以多列插入

插入替换

如果插入时,已经存在了,希望能更改原来的内容,而不是直接报错拦截。

语法:

INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...

示例:
在这里插入图片描述

插入成功后会返回 2 rows affected,这是什么意思呢?
0 rows affected:表中有冲突数据,但冲突数据的值和update的值相等
1 rows affected:表中没有冲突数据,数据被插入
2 rows affected:表中有冲突数据,并且数据已经被更新

插入替换2

语法:

REPLACE INTO table_name [(column [, column] ...)] VALUES (value_list) [, value_list]...

replace的特点
没有冲突,则直接插入;
如果有冲突,则删除后再插入。注意,这里与替换不同。

示例:
没有冲突,则直接插入
在这里插入图片描述
有冲突,则删除后再插入
在这里插入图片描述
可以看到他的id变了,说明不是直接替换,而是删除后再插入。

Retrieve(查找)

语法:

SELECT
	[DISTINCT] {* | {column [, column] ...}
	[FROM table_name]
	[WHERE ...]
	[ORDERBY column] [ASC | DESC], ...]
	LIMIT ...

先创建一个表
在这里插入图片描述

SELECT 列

全列查找

通常情况下不建议使用 * 进行全列查询。因为
1。查询的列越多,意味着需要传输的数据量越大;
2。可能会影响到索引的使用。

示例:
在这里插入图片描述

指定列查询

按照你的需求,从表中拿出数据

示例:
在这里插入图片描述

查询字段为表达式

select后面不仅能跟列属性,也能跟表达式。

示例:
在这里插入图片描述

为查询结果指定别名

有些时候我们查询到结果的时候,想给列名字重命名。

示例:
在这里插入图片描述

结果去重

示例:
在这里插入图片描述

WHERE 条件

有些时候我们想根据我们的需求对结果进行筛选,比如有需求筛选出成绩及格和成绩不及格的。就需要用where条件了,where可以看做我们学C/C++时的if语句。

比较运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,操作NULL时不安全,例如NULL=NULL的结果是NULL
<=>等于,NULL安全,例如NULL <=>NULL结果是TRUE(1)
!=, <>不等于
BETWEEN a0 AND a1范围匹配,[a0, a1], 如果a0 <= value <= a1, 返回TRUE(1)
IN (option, …)如果是option中的任意一个,返回TRUE(1)
IS NULL是NULL 返回TRUE(1)
IS NOT NULL不是NULL 返回TRUE(1)
LIKE模糊匹配。%表示任意多个(包括0个)任意字符;_表示任意一个字符
逻辑运算符说明
AND多个条件必须都为TRUE(1),结果才是TRUE(1)
OR任意一个条件为TRUE(1),结果为TRUE(1)
NOT条件为TRUE(1),结果为FALSE(0)

示例:
1.英语不及格的同学及英语成绩 ( < 60 )
在这里插入图片描述

2.语文成绩在[80, 90]分的同学及语文成绩
使用 AND 进行条件连接
在这里插入图片描述
使用 BETWEEN … AND …条件
在这里插入图片描述

3.数学成绩是58或者59或者98或者99分的同学及数学成绩
使用OR进行条件连接
在这里插入图片描述
使用IN条件
在这里插入图片描述

4.姓孙的同学及孙某同学
姓孙的同学

在这里插入图片描述
孙某同学
在这里插入图片描述

5.语文成绩好于英语成绩的同学
在这里插入图片描述

where后面:可以跟表达式,一个列可以和另一个列比较,也可以和常数比较,也可以和字符串比较,也可以模糊匹配。

6.总分在200分以下的同学
在这里插入图片描述
之前不是说可以对列进行重命名吗?那来试一下。
在这里插入图片描述
为什么报错了?报错显示total未找到,未知列。
这是因为select有执行顺序。select的执行顺序到底是怎么样的。
在这里插入图片描述
所以重命名并不能在where中被识别

7.语文成绩 大于 80并且不姓孙的同学
在这里插入图片描述

8.孙某同学,否则要求总成绩 大于 200 并且 语文成绩 小于 数学成绩 并且 英语成绩 大于 80
在这里插入图片描述

order by子句

语法:

--ASC 为升序(从小到大)
--DESC 为降序(从大到小)
--默认为 ASC
SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC | DESC], [...];

注意:没有ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

示例:
1.同学及数学成绩,按数学成绩升序显示
在这里插入图片描述

2.查询同学各门成绩,依次按数学降序,英语升序,语文升序的方式显示
解析:以数学降序来排序,如果数学成绩相等则按照英语升序来排序;如果英语成绩相等则按照语文升序来排序
在这里插入图片描述

3.查询同学及总分,由高到低
在这里插入图片描述
之前讲过where后面不能使用别名,为什么这里又能使用别名了?
所以我们还需要搞清楚语句执行的顺序是怎么样的。
1.from 表名
2.where子句筛选条件
3.select筛选出需要哪些属性
4.order by排序
5.最后显示到屏幕

4.查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
在这里插入图片描述

筛选分页结果

语法

-- 起始下标为 0

-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;

-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;

-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

建议:对未知表进行查询时,最好加一条 LIMIT 1,避免因为表中数据过大,查询全表数据导致数据库卡死

示例:
按 id 进行分页,每页 3 条记录, 分别显示第 1、2、3 页

第 1 页
在这里插入图片描述

第 2 页
在这里插入图片描述

第 3 页
在这里插入图片描述

我们在平时在网页上,鼠标点击页数,在数据库层面就会被转换为以上操作。

Update(更新)

update的时候,本质是先查询出数据,再修改。也就是先把select替换update操作,再进行修改。言外之意就是执行update的顺序是放在最后的。
语法:

UPDATE table_name SET column = expr [, column = expr ...] 
	[WHERE ...] [ORDER BY ...] [LIMIT ...]

示例:
1.将孙悟空同学的数学成绩变更为 80 分
查看原数据
在这里插入图片描述
数据更新
在这里插入图片描述

2.将曹孟德同学的数学成绩变更为60分,语文成绩变更为70分
在这里插入图片描述

3.将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
在这里插入图片描述
在这里插入图片描述
注意:update搭配limit使用时,只能如下操作,因为UPDATE 语句本身不支持使用 ORDER BY 和 LIMIT 来指定更新的行,因为数据库引擎不知道如何基于这些排序和限制条件来正确地应用更新。
在这里插入图片描述

4.将所有同学的语文成绩更新为原来的 2 倍
注意:如果没有where子句的筛选一定要慎用update
在这里插入图片描述

delete(删除)

语法:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

删除数据

示例:
1.删除孙悟空同学的考试成绩
在这里插入图片描述

2.删除整张表的数据
注意:该操作要谨慎操作,一定是确定了这些数据不要了才能删除。
在这里插入图片描述
可以看到删除了表的内容,但表的结构还是,auto_increment没有变,仍然是4。

删除表中的数据还有一种做法:

截断表

语法:

TRUNCATE [TABLE] table_name

示例:
在这里插入图片描述
发现truncate使auto_increment重置了。

truncate的特点与delete的区别
1.只能对整表操作,不能像DELETE一样正对部分数据操作。
2.比DELETE执行执行速度更快,但是TRUNCATE在删除数据的时候,并不经过真正的事务,所以无法回滚。
3.会重置AUTO_INCREMENT项。

插入查询结果

语法:

INSERT INTO table_name [(column [, column ...])] SELECT ...

示例:删除表中的重复记录,重复的数据只能有一份

创建原数据表
在这里插入图片描述
在这里插入图片描述
这不就去重了吗?这只是查找时的去重,并没有影响原始表。

那要如何做呢?
创建一个新表,将查询到去重的结果再插入到新表中;将要去重的表备份(即重命名),再将新表重命名为要去重表的名字。
1.创建和原表结构一样的表
在这里插入图片描述
2.把select的去重数据筛出来,插入到新表
在这里插入图片描述
3.备份+重命名
在这里插入图片描述

我们在上传10G文件到A目录的时候,有两个方案:
1。直接将10G文件传到A目录,并且要保证原子性,要让整个上传文件的过程保证他是原子态的传输状态,这是非常慢的。
2。将10G文件预处理传输到临时目录下,最后一步直接mv到A目录。只需保证最后一步mv是原子态即可。
第二种方案的操作是更推荐的,因为第二种的方法更比第一种更轻量。
这也就是为什么我们数据去重的时候,使用rename的方式,而不是直接对原表进行操作,因为采用原子性的时候,rename的方式能使效率更高。

聚合函数

为什么叫聚合函数?因为每一行函数执行出来的值相同,所以能被聚合压缩。
比如:
在这里插入图片描述
如果把 1 + 1 看做一个函数,每一行执行出来的结果都为2,因为很多行的结果都是一样的,所以能被聚合压缩成一行。这就是聚合压缩。

函数说明
COUNT([DISTINCT] expr)返回查询到的数据的数量
SUM([DISTINCT] expr)返回查询到的数据的总和,不是数字没有意义
AVG([DISTINCT] expr)返回查询到的数据的平均值,不是数字没有意义
MAX([DISTINCT] expr)返回查询到的数据的最大值,不是数字没有意义
MIN([DISTINCT] expr)返回查询到的数据的最小值,不是数字没有意义

示例:
在这里插入图片描述
1.统计班级共有多少同学

使用 * 做统计
在这里插入图片描述
使用 表达式 做统计
在这里插入图片描述

2.统计数学成绩的个数
在这里插入图片描述
执行的顺序是先统计,再去重
这样才能先去重,再统计
在这里插入图片描述

3.统计数学成绩的总分
在这里插入图片描述

4.统计数学成绩平均分
在这里插入图片描述

5.统计数学平均分
在这里插入图片描述
我也想显示每个人的名字和数学成绩,和平均数学成绩对比。
在这里插入图片描述
为什么报错了?
对于每个人来说平均成绩是一样的,所以平均成绩可以聚合。但是name对于每一个来说不是一样的,所以name的记录不能够被压成一个记录,所以没办法做聚合。那具体要如何做呢?后面会讲。

分组聚合

分组是将某个属性记录相同的分为同一组。聚合函数针对的是组,不是表,组是表的划分。
分组的目的是为了进行分组之后,方便进行聚合统计

group by子句的使用(包含oracle 9i的经典测试表)

语法:

select column1, column2, ... from table group by column;

准备工作,创建一个雇员信息表(来自oracle 9i的经典测试表)

  • EMP员工表
  • DEPT部门表
  • SALGRADE工资和最高工资
DROP database IF EXISTS `scott`;
CREATE database IF NOT EXISTS `scott` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
 
USE `scott`;
 
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
  `deptno` int(2) unsigned zerofill NOT NULL COMMENT '部门编号',
  `dname` varchar(14) DEFAULT NULL COMMENT '部门名称',
  `loc` varchar(13) DEFAULT NULL COMMENT '部门所在地点'
);
 
 
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
  `empno` int(6) unsigned zerofill NOT NULL COMMENT '雇员编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '雇员姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '雇员职位',
  `mgr` int(4) unsigned zerofill DEFAULT NULL COMMENT '雇员领导编号',
  `hiredate` datetime DEFAULT NULL COMMENT '雇佣时间',
  `sal` decimal(7,2) DEFAULT NULL COMMENT '工资月薪',
  `comm` decimal(7,2) DEFAULT NULL COMMENT '奖金',
  `deptno` int(2) unsigned zerofill DEFAULT NULL COMMENT '部门编号'
);
 
 
DROP TABLE IF EXISTS `salgrade`;
CREATE TABLE `salgrade` (
  `grade` int(11) DEFAULT NULL COMMENT '等级',
  `losal` int(11) DEFAULT NULL COMMENT '此等级最低工资',
  `hisal` int(11) DEFAULT NULL COMMENT '此等级最高工资'
);
 
 
insert into dept (deptno, dname, loc)
values (10, 'ACCOUNTING', 'NEW YORK');
insert into dept (deptno, dname, loc)
values (20, 'RESEARCH', 'DALLAS');
insert into dept (deptno, dname, loc)
values (30, 'SALES', 'CHICAGO');
insert into dept (deptno, dname, loc)
values (40, 'OPERATIONS', 'BOSTON');
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7844, 'TURNER', 'SALESMAN', 7698,'1981-09-08', 1500, 0, 30);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);
 
insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno)
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);
 
insert into salgrade (grade, losal, hisal) values (1, 700, 1200);
insert into salgrade (grade, losal, hisal) values (2, 1201, 1400);
insert into salgrade (grade, losal, hisal) values (3, 1401, 2000);
insert into salgrade (grade, losal, hisal) values (4, 2001, 3000);
insert into salgrade (grade, losal, hisal) values (5, 3001, 9999);

直接粘贴复制即可
在这里插入图片描述
在这里插入图片描述

示例:

1.显示每个部门的平均工资和最高工资
在这里插入图片描述
group by deptno:将相同的deptno分为了一组,组内的一定deptno一定是相同的,所以可以被聚合压缩

2.显示每个部门的每种岗位的平均工资和最低工资。
在这里插入图片描述
group by deptno, job:首先根据group by分为几个组,再根据job将这几个组分为更多的组。

显示平均工资低于2000的部门和它的平均工资
在这里插入图片描述
having是对聚合后的统计数据,再条件筛选。

having 和 where 的区别如何理解?只是执行的顺序不同。
示例:显示平均工资低于2000的部门和它的平均工资,但SMITH员工不参与统计
在这里插入图片描述
执行顺序:
1.from子句
2.where子句
3.group by子句
4.执行聚合函数,重命名
5.having子句
6.select子句,选择显示指定列

所以having和where的区别就是执行的顺序不同

总结:
不要单纯的认为,只有存入磁盘的表才叫表,中间筛选出来的,中途显示出来的表,也叫表,这些全部都是逻辑上的表。所以也可以总结出一句话“MySQL一切皆表”。

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

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

相关文章

代码随想录算法训练营第十七天|654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构建最大二…

LCD显示屏接口

LCD显示屏接口 设备对外接口&#xff1a;VGA、DVI、HDMIHDMI接口接口定义发展历史HDMI特点HDMI接口类型 设备对内接口&#xff1a;串口、并口小屏&#xff08;I2C、SPI、UART&#xff09;中屏&#xff1a;MCU、RGBRGB接口 MCU LCD屏和RGB LCD屏的区别大屏&#xff1a;MIPI、LVD…

OCR Fusion: EasyOCR/Tesseract/PaddleOCR/TrOCR/GOT

文章目录 前言一、基类 OCRExecutorBase二、EasyOCR1.安装2.模型下载3.DEMO 三、Tesseract1.安装2.使用问题3.DEMO 四、PaddleOCR1.安装2.DEMO 五、PaddleOCR&#xff08;PyTorch移植版&#xff09;1.代码整理2.DEMO 六、TrOCR1.安装2.模型下载3.DEMO 七、GOT1.安装2.模型下载3…

机器学习(5):机器学习项目步骤(二)——收集数据与预处理

1. 数据收集与预处理的任务&#xff1f; 为机器学习模型提供好的“燃料” 2. 数据收集与预处理的分步骤&#xff1f; 收集数据-->数据可视化-->数据清洗-->特征工程-->构建特征集和数据集-->拆分数据集、验证集和测试集 3. 数据可视化工作&#xff1f; a. 作用&…

这款免费工具让你的电脑焕然一新,专业人士都在用

HiBit Uninstaller 采用单一可执行文件的形式,无需复杂的安装过程,用户可以即刻开始使用。这种便捷性使其成为临时使用或紧急情况下的理想选择。尽管体积小巧,但其功能却异常强大,几乎不会对系统性能造成任何负面影响。 这款工具的一大亮点是其多样化的功能。它不仅能够常规卸…

鸿蒙harmonyos next纯flutter开发环境搭建

公司app是用纯flutter开发的&#xff0c;目前支持android和iOS&#xff0c;后续估计也会支持鸿蒙harmonyos。目前谷歌flutter并没有支持咱们国产手机操作系统鸿蒙harmonyos&#xff0c;于是乎国内有个叫OpenHarmony-SIG的组织&#xff0c;去做了鸿蒙harmonyos适配flutter开发的…

实验2 网络测试命令的使用及对等网组建

实验2 网络测试命令的使用及对等网组建 一、实验目的 1. 熟悉常用网络测试命令的语法及其功能&#xff1b; 2. 掌握常用的网络故障分析及排除的方法&#xff1b; 3. 熟悉Windows中的网络组建及各参数的设置和基本意义。 4.如何在对等网中建立共享及访问对方的共享资源。 二、…

精通推荐算法31:行为序列建模之ETA — 基于SimHash实现检索索引在线化

1 行为序列建模总体架构 2 SIM模型的不足和为什么需要ETA模型 SIM实现了长周期行为序列的在线建模&#xff0c;其GSU检索单元居功至伟。但不论Hard-search还是Soft-search&#xff0c;都存在如下不足&#xff1a; GSU检索的目标与主模型不一致。Hard-search通过类目属性来筛选…

《深度学习》【项目】OpenCV 发票识别 透视变换、轮廓检测解析及案例解析

目录 一、透视变换 1、什么是透视变换 2、操作步骤 1&#xff09;选择透视变换的源图像和目标图像 2&#xff09;确定透视变换所需的关键点 3&#xff09;计算透视变换的变换矩阵 4&#xff09;对源图像进行透视变换 5&#xff09;对变换后的图像进行插值处理 二、轮廓检测…

集翼智能视频营销管理平台 丨OPENAIGC开发者大赛企业组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

GreenPlum数开手册【语法篇】

GreenPlum数开手册 一、数据类型 1、基本数据类型 类型长度描述范围bigint8字节大范围整数-9223372036854775808 到 9223372036854775807smallint2字节小范围整数-32768到32767integer(int)4字节常用整数-2147483648 到 2147483647decimal可变长用户指定的精度&#xff0c;精…

服务运营 | 运营前沿:生成式AI改变医疗保健的运作方式

编者按 人工智能正在重塑医疗保健的运作方式&#xff0c;减少医生负担并优化病人的就医体验。从解答患者疑问到开发新药&#xff0c;人工智能正在快速革新医疗保健这一行业。编者团队此次将关注《哈佛商业评论》于2023年11月27日发布的文章《GenAI Could Transform How Health …

实验一 网络基础及仿真模拟软件Packet Tracer 入门

实验一 网络基础及仿真模拟软件Packet Tracer 入门 【实验目的】 一、认识 Packet Tracer 。 二、学习使用 Packet Tracer 进行拓扑的搭建。 三、学习使用 Packet Tracer 对设备进行配置&#xff0c;并进行简单的测试。 【实验内容和结果】 一、拖放设备和布置线缆 二、用…

国庆假节高速免费通行全攻略

关注▲洋洋科创星球▲一起成长&#xff01; 国庆节假期全国收费公路继续对7座以下&#xff08;含7座&#xff09;小型客车免收车辆通行费。 具体免费时段从 10月1日00&#xff1a;00开始 10月7日24&#xff1a;00结束 01 提前出发&#xff0c;免费离开&#xff1a; 如果你在…

HttpServletRequest简介

HttpServletRequest是什么&#xff1f; HttpServletRequest是一个接口&#xff0c;其父接口是ServletRequest&#xff1b;HttpServletRequest是Tomcat将请求报文转换封装而来的对象&#xff0c;在Tomcat调用service方法时传入&#xff1b;HttpServletRequest代表客户端发来的请…

数据结构:详解搜索二叉树

目录 一、搜索二叉树的概念 二、搜索二叉树的基本结构 三、搜索二叉树的插入 四、搜索二叉树的查找 五 、搜索二叉树的删除 一、搜索二叉树的概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树&#xff1a; 若它的左子树…

每天五分钟深度学习PyTorch:如何使用GPU来跑深度学习算法模型?

本文重点 我们前面介绍pytorch的时候,我们提到过它可以使用GPU加速,那么如何才能完成GPU的加速呢?在pytorch中非常简单,我们只需要将数据计算,模型放到GPU上就行,这样就可以使用GPU来跑深度学习算法模型了。 如何判断我们的电脑是否支持GPU pytorch中关于GPU的一些相关…

[JavaEE] IP协议

目录 一、 IP协议 1.1 基本概念 1.2 协议头格式 1.3 特殊IP 二、 地址管理 2.1 网段划分 2.2 CIDR(Classless Interdomain Routing) 2.3 私有IP地址和公网IP地址 2.4 NAT(Network Address Translation)-网络地址转换 2.5 路由选择 三、数据链路层 3.1 认识以太网 3…

嵌入式Linux系统TF卡热插拔检测问题

一、背景介绍 项目上使用linux系统&#xff0c;运行主控是君正T41&#xff0c;遇到一个系统无法识别TF卡的问题&#xff0c;经过一番探索最终成功解决。感觉挺有意思的&#xff0c;记录下分析和解决的过程。 二、现象描述 插入TF卡后系统无任何反应&#xff0c;也没有生成 /…

工业缺陷检测——Windows 10本地部署AnomalyGPT工业缺陷检测大模型

0. 引言 在缺陷检测中&#xff0c;由于真实世界样本中的缺陷数据极为稀少&#xff0c;有时在几千甚至几万个样品中才会出现一个缺陷数据。因此&#xff0c;以往的模型只需在正常样本上进行训练&#xff0c;学习正常样品的数据分布。在测试时&#xff0c;需要手动指定阈值来区分…