Oracle 数据库查询:单表查询
作者:IvanCodes
日期:2025年6月22日
专栏:Oracle教程
在 Oracle 数据库操作中,查询数据是最频繁、最核心的操作之一。单表查询,即仅从一个表中检索信息,是所有复杂查询的基础。本笔记将系统梳理单表查询的关键子句及其用法,并特别介绍Oracle中伪列的使用。
思维导图
一、SELECT 语句基本结构
一个完整的单表查询语句通常包含以下按执行顺序排列 (逻辑上) 的子句:
SELECT <select_list> -- 5. 选择要显示的列或表达式
FROM <table_name> -- 1. 指定数据来源表
[WHERE <filter_conditions>] -- 2. 行过滤条件
[GROUP BY <group_by_expression>] -- 3. 分组依据
[HAVING <group_filter_conditions>] -- 4. 分组后的过滤条件
[ORDER BY <order_by_expression>]; -- 6. 结果排序
- FROM 子句:最先执行,确定查询的数据源表。
- WHERE 子句:其次执行,根据指定条件筛选满足要求的行。
- GROUP BY 子句:在
WHERE
过滤后执行,将符合条件的行按一个或多个列的值进行分组。 - HAVING 子句:在
GROUP BY
分组后执行,用于过滤分组后的结果集 (通常与聚合函数配合使用)。 - SELECT 子句:在上述操作完成后,选择最终要显示的列、表达式或聚合函数结果。
- ORDER BY 子句:最后执行,对最终结果集进行排序。
二、SELECT 子句:选择列与表达式
- 选择所有列:
SELECT *
SELECT * FROM employees;
- 选择特定列:
SELECT column1, column2, ...
SELECT employee_id, first_name, salary FROM employees;
- 使用列别名 (AS): 提高可读性或避免重名。
SELECT employee_id AS "员工编号", first_name "名", salary "月薪" FROM employees;
SELECT salary * 12 AS annual_salary FROM employees;
- 计算列/表达式: 可以在
SELECT
中进行算术运算、字符串拼接、函数调用等。
SELECT last_name || ', ' || first_name AS full_name, salary / 30 AS daily_rate FROM employees;
SELECT SYSDATE - hire_date AS days_employed FROM employees;
SELECT UPPER(first_name) AS upper_first_name FROM employees;
- 去除重复行 (DISTINCT): 只显示唯一的行组合。
SELECT DISTINCT department_id FROM employees;
SELECT DISTINCT department_id, job_id FROM employees;
- 常量值: 可以在查询结果中包含常量。
SELECT first_name, salary, 'Oracle Corp' AS company_name FROM employees;
三、FROM 子句:指定表
对于单表查询,FROM
子句非常简单,就是指定要查询的那个表名。
FROM employees;
可以为表指定别名,在单表查询中不常用,但在多表连接或子查询中非常有用。
FROM employees e;
四、WHERE 子句:行过滤
WHERE
子句用于根据指定的条件筛选出满足要求的行。
常用比较运算符:
=
(等于), >
(大于), <
(小于), >=
(大于等于), <=
(小于等于), <>
或 !=
(不等于)。
逻辑运算符:
AND
(与), OR
(或), NOT
(非)。
其他常用条件:
BETWEEN ... AND ...
: 范围判断 (包含边界值)。
SELECT first_name, salary FROM employees WHERE salary BETWEEN 5000 AND 10000;
IN (value1, value2, ...)
: 匹配列表中的任何一个值。
SELECT first_name, department_id FROM employees WHERE department_id IN (10, 20, 30);
LIKE
: 模糊匹配字符串。%
: 匹配任意数量 (包括零个) 的字符。_
: 匹配任意单个字符。ESCAPE 'char'
: 定义转义字符,用于匹配%
或_
本身。
SELECT first_name FROM employees WHERE first_name LIKE 'A%';
SELECT last_name FROM employees WHERE last_name LIKE '_o%';
SELECT note FROM notes WHERE note LIKE '100\%%' ESCAPE '\';
IS NULL
/IS NOT NULL
: 判断是否为空值。
SELECT first_name, commission_pct FROM employees WHERE commission_pct IS NULL;
代码案例:
查询薪水大于8000且部门ID为90的员工:
SELECT employee_id, first_name, salary, department_id
FROM employees
WHERE salary > 8000 AND department_id = 90;
查询部门ID为10或20,或者职位ID以 ‘SA_’ 开头的员工:
SELECT employee_id, department_id, job_id
FROM employees
WHERE department_id IN (10, 20) OR job_id LIKE 'SA\_%';
五、Oracle 伪列 (Pseudocolumns)
Oracle 提供了一些特殊的列,它们不实际存储在表中,但可以像普通列一样在SQL语句中引用。这些被称为伪列。
常用的伪列:
ROWID
:- 唯一标识数据库中每一行的物理地址。
- 它是访问表中行的最快方式。
ROWID
的值看起来像一串十六进制字符。- 虽然唯一,但如果表发生重组或迁移,行的
ROWID
可能会改变。因此,不建议将其作为持久的行标识符。
SELECT ROWID, employee_id, first_name FROM employees WHERE ROWNUM <= 5;
ROWNUM
:- 对于查询返回的每一行,
ROWNUM
会按顺序分配一个从1开始的数字。 ROWNUM
是在数据被检索出来之后,但在任何ORDER BY
子句应用之前分配的。- 常用于限制查询结果的行数 (分页查询的基础)。
- 重要:不能直接在
WHERE
子句中使用ROWNUM > n
(n>1) 来获取第n行之后的数据,因为ROWNUM
是逐行分配的。如果第一行不满足ROWNUM > 1
,那么就没有第二行可以被分配ROWNUM = 2
。
- 对于查询返回的每一行,
-- 获取前5名员工 (基于默认顺序或ORDER BY之前的顺序)
SELECT employee_id, first_name, salary FROM employees WHERE ROWNUM <= 5;-- 错误的方式尝试获取第6到第10名员工
-- SELECT * FROM employees WHERE ROWNUM > 5 AND ROWNUM <= 10; (通常不会返回任何结果)-- 正确的分页方式 (使用子查询)
SELECT *
FROM (SELECT employee_id, first_name, salary, ROWNUM AS rnFROM (SELECT employee_id, first_name, salaryFROM employeesORDER BY salary DESC)) -- 内层先排序
WHERE rn BETWEEN 6 AND 10;
LEVEL
:- 与层次查询 (Hierarchical Queries) 一起使用 (
CONNECT BY
子句)。 - 表示当前行在层次结构中的级别。根节点为
LEVEL 1
。
- 与层次查询 (Hierarchical Queries) 一起使用 (
-- 假设employees表有 manager_id 列,形成层级关系
SELECT LEVEL, employee_id, first_name, manager_id
FROM employees
START WITH manager_id IS NULL -- 定义根节点
CONNECT BY PRIOR employee_id = manager_id; -- 定义父子关系
NEXTVAL
和CURRVAL
(与序列 Sequence 相关):sequence_name.NEXTVAL
: 获取序列的下一个值。每次调用都会使序列递增。sequence_name.CURRVAL
: 获取序列的当前值 (必须在当前会话中至少调用过一次NEXTVAL
之后才能使用)。- 常用于在
INSERT
语句中为主键列生成唯一值。
-- 假设存在一个名为 employee_seq 的序列
CREATE SEQUENCE employee_seq START WITH 200 INCREMENT BY 1;INSERT INTO employees (employee_id, first_name, last_name, email)
VALUES (employee_seq.NEXTVAL, 'New', 'Employee', 'new.emp@example.com');SELECT employee_seq.CURRVAL FROM dual; -- 查看当前会话中序列的当前值
六、GROUP BY 子句:数据分组
GROUP BY
子句将具有相同值的行组织成一个摘要组。通常与聚合函数 (如 COUNT()
, SUM()
, AVG()
, MAX()
, MIN()
) 一起使用,对每个组进行计算。
聚合函数: (与之前版本相同)
COUNT(*)
,COUNT(column_name)
,COUNT(DISTINCT column_name)
SUM(column_name)
,AVG(column_name)
MAX(column_name)
,MIN(column_name)
使用规则:
SELECT
列表中所有未包含在聚合函数中的列,都必须出现在GROUP BY
子句中。WHERE
子句先于GROUP BY
执行;HAVING
子句后于GROUP BY
执行。
代码案例:
查询每个部门的员工人数:
SELECT department_id, COUNT(*) AS num_employees
FROM employees
GROUP BY department_id;
七、HAVING 子句:分组过滤
HAVING
子句用于在数据分组后对分组结果进行进一步筛选。它通常包含聚合函数。
代码案例:
查询平均薪水大于8000的部门:
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id
HAVING AVG(salary) > 8000;
八、ORDER BY 子句:结果排序
ORDER BY
子句用于对最终查询结果集进行排序。它是查询语句中逻辑上最后执行的部分。
排序方式: (与之前版本相同)
ASC
(升序, 默认),DESC
(降序)- 多列排序, 列别名排序, 列序号排序 (不推荐)
NULLS FIRST
/NULLS LAST
代码案例:
按薪水降序排列员工信息:
SELECT employee_id, first_name, salary
FROM employees
ORDER BY salary DESC;
总结: 单表查询是 Oracle SQL 的基石。熟练掌握各子句的功能、用法、执行顺序,以及伪列 (特别是 ROWNUM
和 ROWID
) 的特性,是编写高效、准确查询的关键。
练习题
背景表:
假设我们有一个 products
表,结构如下:
CREATE TABLE products (
product_id NUMBER PRIMARY KEY,
product_name VARCHAR2(100) NOT NULL,
category_id NUMBER,
supplier_id NUMBER,
unit_price NUMBER(10,2),
units_in_stock NUMBER,
discontinued CHAR(1) DEFAULT 'N' -- 'Y' or 'N'
);
-- 插入一些样例数据 (请自行补充更多数据以测试所有题目)
INSERT INTO products VALUES (1, 'Chai', 10, 1, 18.00, 39, 'N');
INSERT INTO products VALUES (2, 'Chang', 10, 1, 19.00, 17, 'N');
INSERT INTO products VALUES (3, 'Aniseed Syrup', 20, 1, 10.00, 13, 'N');
INSERT INTO products VALUES (4, 'Chef Anton''s Cajun Seasoning', 20, 2, 22.00, 53, 'N');
INSERT INTO products VALUES (5, 'Chef Anton''s Gumbo Mix', 20, 2, 21.35, 0, 'Y');
INSERT INTO products VALUES (6, 'Grandma''s Boysenberry Spread', 30, 3, 25.00, 120, 'N');
INSERT INTO products VALUES (7, 'Northwoods Cranberry Sauce', 20, 3, 40.00, 6, 'N');
INSERT INTO products VALUES (8, 'Mishi Kobe Niku', 40, 4, 97.00, 29, 'Y');
INSERT INTO products VALUES (9, 'Ikura', 40, 4, 31.00, 31, 'N');
INSERT INTO products VALUES (10, 'Queso Cabrales', 40, 5, 21.00, 22, 'N');
COMMIT;
假设 category_id
10=‘Beverages’, 20=‘Condiments’, 30=‘Confections’, 40=‘Dairy Products’。
请为以下每个场景编写相应的SQL查询语句。
题目:
- 查询
products
表中所有产品的ROWID
和product_name
。 - 查询
products
表中前5条记录的product_id
,product_name
,unit_price
(基于它们在表中的物理存储顺序,不指定特定排序)。 - 查询
products
表中按unit_price
降序排列后的第3到第5条产品记录的product_name
和unit_price
。 - 查询每个
category_id
下有多少种产品,并为每个类别结果行分配一个行号 (基于category_id
的默认分组顺序)。 - 查询所有
category_id
为 20 (Condiments) 的产品名称和库存量 (units_in_stock
),并给product_name
列起别名为 “调味品名称”,units_in_stock
列起别名为 “当前库存”。 - 查询单价 (
unit_price
) 大于等于20且小于50的所有产品信息 (使用BETWEEN
或比较运算符均可)。 - 查询产品名称 (
product_name
) 以 “Chef Anton” 开头的所有产品ID和产品名称。 - 统计每个
supplier_id
供应的产品中,已停产 (discontinued
= ‘Y’) 的产品数量。只显示供应了已停产产品的供应商ID及其对应的已停产产品数量。 - 查询所有产品信息,并按
category_id
升序排序,在同一类别中再按units_in_stock
降序排序,并将库存量为NULL
的产品排在最后。 - (与序列相关,假设已创建序列
product_pk_seq
) 使用序列product_pk_seq.NEXTVAL
作为product_id
,插入一条新产品记录:product_name=‘New Test Product’, category_id=10, unit_price=15.00, units_in_stock=100。然后查询该序列的当前值。(只需写INSERT和查询序列的语句)
答案与解析:
- 查询
ROWID
和product_name
:
SELECT ROWID, product_name FROM products;
- 解析:
ROWID
是一个伪列,可以直接在SELECT
列表中引用。
- 查询前5条记录 (基于物理顺序):
SELECT product_id, product_name, unit_price FROM products WHERE ROWNUM <= 5;
- 解析:
ROWNUM
在WHERE
子句中用于限制返回的行数。此时的顺序是Oracle获取数据的自然顺序,不保证特定排序。
- 分页查询 (排序后取特定范围):
SELECT product_name, unit_price
FROM (SELECT product_name, unit_price, ROWNUM AS rnFROM (SELECT product_name, unit_priceFROM productsORDER BY unit_price DESC))
WHERE rn BETWEEN 3 AND 5;
- 解析: 这是Oracle分页的标准写法。最内层查询先按价格降序排序,中间层查询为排序后的结果分配
ROWNUM
(并赋予别名rn
),最外层查询根据rn
筛选出第3到第5条记录。
- 分组并为组结果分配行号 (分析函数):
(严格来说,为分组结果分配行号通常使用分析函数如ROW_NUMBER() OVER()
,ROWNUM
在GROUP BY
之后应用是对聚合后的结果行进行编号)
如果题目意图是统计后给结果行编号:
SELECT category_id, COUNT(*) AS product_count, ROWNUM AS group_row_num
FROM products
GROUP BY category_id;
- 解析: 先按
category_id
分组并用COUNT(*)
统计。然后对这个聚合后的结果集中的每一行分配ROWNUM
。
如果意图是在每个组内部分配行号,则需要分析函数(超出单表查询基础范围,但可作了解):
-- SELECT product_name, category_id, ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY product_name) AS rn_in_category
-- FROM products;
- 使用列别名并过滤 (同前):
SELECT product_name AS "调味品名称", units_in_stock AS "当前库存"
FROM products
WHERE category_id = 20;
- 范围查询 (多种写法):
使用BETWEEN AND
:
SELECT * FROM products WHERE unit_price BETWEEN 20 AND 49.99;
使用比较运算符:
SELECT * FROM products WHERE unit_price >= 20 AND unit_price < 50;
- 解析:
BETWEEN
包含边界。如果题目是大于等于20且小于50,则用第二种更精确。
- 模糊查询 (LIKE):
SELECT product_id, product_name FROM products WHERE product_name LIKE 'Chef Anton%';
- 解析:
LIKE 'Chef Anton%'
匹配以 “Chef Anton” 开头的所有字符串。
- 分组统计已停产产品:
SELECT supplier_id, COUNT(*) AS discontinued_product_count
FROM products
WHERE discontinued = 'Y'
GROUP BY supplier_id
HAVING COUNT(*) > 0; -- 或者直接不加HAVING,如果没有已停产的供应商则不会显示
- 解析: 先用
WHERE
筛选出已停产产品,然后按supplier_id
分组并用COUNT(*)
统计。HAVING COUNT(*) > 0
确保只显示那些确实有已停产产品的供应商。
- 多列排序与NULLS LAST:
SELECT *
FROM products
ORDER BY category_id ASC, units_in_stock DESC NULLS LAST;
- 解析: 先按
category_id
升序,再按units_in_stock
降序,NULLS LAST
确保units_in_stock
为NULL的记录排在每个类别的最后。
- 使用序列插入并查询当前值:
(假设序列product_pk_seq
已创建:CREATE SEQUENCE product_pk_seq START WITH 11 INCREMENT BY 1;
)
INSERT INTO products (product_id, product_name, category_id, unit_price, units_in_stock)
VALUES (product_pk_seq.NEXTVAL, 'New Test Product', 10, 15.00, 100);SELECT product_pk_seq.CURRVAL FROM dual;
- 解析:
product_pk_seq.NEXTVAL
获取序列的下一个值并用于插入。product_pk_seq.CURRVAL
从dual
表查询当前会话中该序列的当前值 (必须在同一会话中先调用过NEXTVAL
)。
相关文章:
Oracle 数据库查询:单表查询
作者:IvanCodes 日期:2025年6月22日 专栏:Oracle教程 在 Oracle 数据库操作中,查询数据是最频繁、最核心的操作之一。单表查询,即仅从一个表中检索信息,是所有复杂查询的基础。本笔记将系统梳理单表查询的关…...
【DDD】——带你领略领域驱动设计的独特魅力
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
阿里云CentOS系统搭建全攻略:开启云端技术之旅
前期准备:开启云端征程前的必备事项 在当今数字化时代,云计算已成为企业和开发者构建应用和服务的重要基础设施。阿里云作为全球领先的云计算服务提供商,提供了丰富的云计算产品和服务,其中 CentOS 系统在阿里云上的应用非常广泛…...
Flink图之间流转解析:从逻辑构建到物理执行的深度剖析
在Flink强大的数据处理体系中,Table Connectors实现了与外部结构化数据的高效交互,而Flink作业从代码到实际执行的背后,是各类图结构之间的流转与转换。这些图结构承载着作业的逻辑定义、任务划分与资源调度等关键信息,其流转过程…...
详解Redis数据库和缓存不一致的情况及解决方案
数据库与缓存不一致是分布式系统中常见问题,本质是数据在缓存层和存储层出现版本差异。 一、并发写操作导致不一致(最常见) 场景描述 线程A更新数据库 → 线程B更新数据库 → 线程B更新缓存 → 线程A更新缓存 结果:缓存中存储的…...
【CSS】CSS3媒体查询全攻略
媒体查询教程 媒体查询(Media Queries)是CSS3中引入的强大功能,允许内容根据设备特性(如屏幕尺寸、分辨率、方向等)进行自适应调整。以下是媒体查询的详细教程: 基本语法 media mediatype and (media feature) {/* CSS规则 */ }常用媒体类型 all - 所…...
深入理解Spring的ResponseBodyAdvice接口
什么是ResponseBodyAdvice? ResponseBodyAdvice是Spring框架4.2版本引入的一个非常有用的接口,它允许我们在控制器方法执行后、响应体写入前对响应进行统一处理。这个接口为开发者提供了对返回数据进行统一拦截和修改的能力,是Spring MVC响应处理流程中…...
C++法则5: 在函数调用过程中,具有非引用类型的参数要进行拷贝初始化。
C法则5: 在函数调用过程中,具有非引用类型的参数要进行拷贝初始化。 在 C 中,法则5指的是:当函数参数是非引用类型(即按值传递)时,传递给函数的实参会进行拷贝初始化(copy initializ…...
Python 使用 Requests 模块进行爬虫
目录 一、请求数据二、获取并解析数据四、保存数据1. 保存为 CSV 文件2. 保存为 Excel 文件打开网页图片并将其插入到 Excel 文件中 五、加密参数逆向分析1. 定位加密位置2. 断点调试分析3. 复制相关 js 加密代码,在本地进行调试(难)4. 获取 …...
day039-nginx配置补充
文章目录 0. 老男孩思想-如何提升能力?1. nginx登录认证功能1.1 创建密码文件1.2 修改子配置文件1.3 重启服务 2. nginx处理请求流程3. 配置默认站点4. location 命令5. 案例1-搭建大型直播购物网站5.1 配置本地hosts解析5.2 编写子配置文件5.3 创建相关目录/文件并…...
K8s入门指南:架构解析浓缩版与服务间调用实战演示
目录 前言一、k8s概念理解1、k8s整体架构(1) Master 主节点(2) Node 工作节点(3) Etcd 键值存储数据库 2、Pod被视为最小的部署单元3、k8s的五种控制器类型(1)…...
如何用AI开发完整的小程序<10>—总结
通过之前9节的学习。 如何用Ai制作一款简单小程序的内容就已经都介绍完了。 总结起来就以下几点: 1、搭建开发制作环境 2、创建页面(需要手动) 3、在页面上制作UI效果(让Ai搞,自己懂了后可以自己调) 4…...
Javaweb - 3 CSS
CSS 层叠样式表(Cascading Style Sheets),能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。 简单来说,HTML 搭建一个毛坯房,C…...
【算法】【优选算法】优先级队列
目录 一、1046.最后一块石头的重量二、703. 数据流中的第 K 大元素三、692. 前 K 个⾼频单词四、295. 数据流的中位数 一、1046.最后一块石头的重量 题目链接:1046.最后一块石头的重量 题目描述: 题目解析: 题意就是让我们拿出提供的数组…...
PaddleOCR + Flask 构建 Web OCR 服务实战
1、前言 随着图像识别技术的发展,OCR(光学字符识别)已经成为很多应用场景中的基础能力。PaddleOCR 是百度开源的一个高性能 OCR 工具库,支持中英文、多语言、轻量级部署等特性。 而 Flask 是一个轻量级的 Python Web 框架,非常适合快速构建 RESTful API 或小型 Web 应用…...
openapi-generator-maven-plugin自动生成HTTP远程调用客户端
Java开发中调用http接口的时候,有很多可选的技术方案,比如:HttpURLConnection、RestTemplate、WebClient、Feign、Retrofit、Okhttp等,今天我们来看一个更优的技术方案OpenAPI Generator(http://openapi-generator.tech/) OpenAP…...
ms-swift 部分命令行参数说明
参考链接 命令行参数 — swift 3.6.0.dev0 文档 Qwen Chat num_train_epochs 训练的epoch数,默认为3 假设你有 1000 条训练样本,并且设置了: num_train_epochs 3 这意味着: 模型会完整地遍历这 1000 条数据 3 次。每一次…...
【学习笔记】深入理解Java虚拟机学习笔记——第10章 前端编译与优化
第10章 前端编译与优化 10.1 概述 1>前端编译器:Javac命令。 【.java文件->.class文件】 2>即时编译器:Hotspot.C1.C2 【.class文件->机器码】 3>提前编译器:JDK的Jaotc等【.java->机器码】 10.2 Javac 编译器 10.2.1 …...
删除node并且重装然后重装vue
参考第一篇文章 node.js卸载与安装超详细教程_node卸载重装-CSDN博客 第二篇文章安装vue Vue安装与配置教程(非常详细)_安装vue-CSDN博客...
Flink源码阅读环境准备全攻略:搭建高效探索的基石
想要深入探索Flink的底层原理,搭建一套完整且适配的源码阅读环境是必经之路。这不仅能让我们更清晰地剖析代码逻辑,还能在调试过程中精准定位关键环节。接下来,结合有道云笔记内容,从开发工具安装、源码获取导入到调试配置&#x…...
【破局痛点,赋能未来】领码 SPARK:铸就企业业务永续进化的智慧引擎—— 深度剖析持续演进之道,引领数字化新范式
摘要 在瞬息万变的数字时代,企业对业务连续性、敏捷创新及高效运营的需求日益迫切。领码 SPARK 融合平台,秉持“持续演进”这一核心理念,以 iPaaS 与 aPaaS 为双擎驱动,深度融合元数据驱动、智能端口调度、自动化灰度切换、AI 智…...
Flink SQL Connector Kafka 核心参数全解析与实战指南
Flink SQL Connector Kafka 是连接Flink SQL与Kafka的核心组件,通过将Kafka主题抽象为表结构,允许用户使用标准SQL语句完成数据读写操作。本文基于Apache Flink官方文档(2.0版本),系统梳理从表定义、参数配置到实战调优…...
Linux 服务器运维:磁盘管理与网络配置
🤵♂️ 个人主页:布说在见 ✍🏻作者简介: 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏…...
PyTorch 入门学习笔记
目录 1 张量 1)张量的初始化和属性 2)张量操作 3)使用 NumPy 进行桥接 2 torch.autograd 1)背景 2)在 PyTorch 中的使用 3)Autograd 的微分机制 4)计算图原理 3 神经网络 1ÿ…...
9大策略深度解析MySQL多表JOIN性能优化
一、多表JOIN的现实挑战 在实际开发中,MySQL多表JOIN场景主要源于两类场景: • 历史遗留系统:老代码中未严格遵循范式设计的SQL语句• 数据库迁移:从Oracle迁移至MySQL时保留的复杂关联查询 这类操作潜藏多重风险: …...
CSS 逐帧动画
CSS 逐帧动画实现指南 逐帧动画(frame-by-frame animation)是一种通过快速连续显示一系列静态图像来创造运动效果的技术。以下是使用CSS实现逐帧动画的几种方法。 1. 使用 steps() 计时函数 这是实现逐帧动画最常用的方法,通过animation-timing-function的steps(…...
UE5 游戏模板 —— ThirdPersonGame
UE5 游戏模板 —— ThirdPersonGame 前言一、初始化旋转控制参数1.参数一2.参数二3.参数三4.参数四 二、输入系统总结 前言 有了前面的铺垫,第三人称模板简直是手到擒来了,我们只需要注意一些初始化的变量是做什么的即可,因为UE的Character …...
java中关于异步转同步的一些解决方案的对比与思考。【spring mvc堵塞式】
文章目录 1、Spring MVC堵塞式编程中的技术方案a) 最简单的方案,使用 DeferredResult 代码如下,代码解读:最终控制台输出如下。用户收到的结果 b) 上点难度,使用redis监听事件,根据事件的不同返回不同的数据…...
【数据结构与算法】数据结构核心概念系统梳理
第一章 绪论:基础概念体系 🚩算法:问题求解步骤的描述。 🚩非递归的算法效率更高。 1.1 逻辑结构 vs 存储结构 维度逻辑结构存储结构(物理结构)定义数据元素之间的逻辑关系数据结构在计算机中的实现方式分类线性/树形/图/集合顺序/链式/索引/散列独立性独立于存储结构…...
《HTTP权威指南》 第7章 缓存
带着问题学习: 缓存如何提高性能如何衡量缓存的有效性缓存置于何处作用最大HTTP如何保持缓存副本的新鲜度缓存如何与其他缓存及服务器通信 web缓存是可以自动保存常见文档副本的HTTP设备。 缓存优点 减少冗余的数据传输,节省网络费用缓解网络瓶颈问题&…...
【Zephyr 系列 28】MCU 闪存文件系统详解:LittleFS + NVS + 块设备设计实战
🧠关键词:Zephyr 文件系统、LittleFS、NVS、Flash 分区、嵌入式存储、断电保护、wear leveling 📌 1. 为什么 MCU 上需要文件系统? 在嵌入式开发中,很多开发者起初直接操作 Flash 保存参数,但随着需求增长…...
ICML 2025 | 时间序列(Time Series)论文总结
ICML 2025将在2025年7月13日至7月19日(周六)在温哥华会议中心举行,本文总结了ICML 2025有关时间序列(Time Series)相关文章,共计63篇。 时间序列Topic:预测,分类,异常检测,生成&…...
理解后端开发中的中间件(以gin框架为例)
中间件(Middleware)是后端开发中的一个核心概念,它在请求(Request)和响应(Response)之间扮演着桥梁角色。以下是关于中间件的详细解释: 基本概念 中间件是在请求到达最终处理程序之前或响应返回客户端之前执行的一系列函数或组件。它可以: 访…...
【分布式技术】Bearer Token以及MAC Token深入理解
Bearer Token以及MAC Token深入理解 **Bearer Token 详解****1. 什么是 Bearer Token?****2. Bearer Token 的构建详情****(1)生成流程****(2)Token 示例(JWT)****(3)Tok…...
WebRTC(七):媒体能力协商
目的 在 WebRTC 中,每个浏览器或终端支持的音视频编解码器、分辨率、码率、帧率等可能不同。媒体能力协商的目的就是: 确保双方能“听得懂”对方发的媒体流;明确谁发送、谁接收、怎么发送;保障连接的互操作性和兼容性。 P2P的基…...
(线性代数最小二乘问题)Normal Equation(正规方程)
Normal Equation(正规方程) 是线性代数中的一个重要概念,主要用于解决最小二乘问题(Least Squares Problem)。它通过直接求解一个线性方程组,找到线性回归模型的最优参数(如权重或系数ÿ…...
【机器学习】数学基础——标量
目录 一、标量的定义 二、标量的核心特征:无方向的纯粹量级 2.1 标量 vs 矢量 直观对比 三、 标量的数学本质:零阶张量 3.1 张量阶数金字塔 3.2 标量的数学特性 四、 现实世界的标量图谱 4.1 常见标量家族 4.2 经典案例解析 五、 标量的运算奥秘…...
基于python代码的通过爬虫方式实现TK下载视频(2025年6月)
Tk的视频页面通常需要登录才能获取完整数据,但通过构造匿名游客的请求,我们可以绕过登录限制,提取视频的元信息(如标题、ID和播放地址)。核心思路如下: 构造匿名Cookie:通过模拟浏览器的请求,获取Tk服务器分配的游客Cookie。解析网页:利用BeautifulSoup解析HTML,定位…...
Go 语言的堆糖图片爬虫
基于 Go 语言的堆糖图片爬取探索之旅 在互联网的浩瀚海洋中,堆糖网以其丰富多样的高清图片、美图壁纸等内容吸引了众多用户。对于图片爱好者来说,能高效获取心仪的图片资源无疑是一件极具吸引力的事情。今天,就带大家走进一段基于 Go 语言的…...
python+uni-app基于微信小程序的儿童安全教育系统
文章目录 具体实现截图本项目支持的技术路线源码获取详细视频演示:文章底部获取博主联系方式!!!!本系统开发思路进度安排及各阶段主要任务java类核心代码部分展示主要参考文献:源码获取/详细视频演示 ##项目…...
DAY 39 图像数据与显存
图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader ,…...
ELK搭建
1、elasticsearch和kibana搭建配置见 https://blog.csdn.net/yh_zeng2/article/details/148812447?spm1001.2014.3001.5501 2、logstash 下载 下载和elasticsearch版本一致的logstash,下载地址: Past Releases of Elastic Stack Software | Elastic …...
【ELK(Elasticsearch+Logstash+Kibana) 从零搭建实战记录:日志采集与可视化】
ELK(ElasticsearchLogstashKibana) 从零搭建实战记录:日志采集与可视化 本文记录了我在搭建ELK(Elasticsearch, Logstash, Kibana)技术栈时的完整实战过程。使用Docker Compose快速搭建了ELK服务端(监控主机),并通过Filebeat实现…...
反无人机系统:技术利刃如何守护低空安全?
反无人机系统:技术利刃如何守护低空安全? ——从军事防御到城市安防的全景解析 一、技术体系:从“电磁软杀伤”到“激光硬摧毁”的立体防御网 反无人机技术本质是一场“降维打击”:用百万级防御系统对抗千元级消费无人机。当前…...
第十章——8天Python从入门到精通【itheima】-102-Python基础综合案例-数据可视化(pyecharts的入门使用+数据处理)
目录 102节——pyecharts的入门使用 1.学习目标 2.pyecharts入门——基础折线图 3.pyecharts的配置对象有哪些? 4.全局配置——set_global_opts 5.小节总结 103节——数据处理 1.学习目标 2.无法继续关于第一阶段的pyecharts的相关学习 因为关于JSON数据获…...
Neo4j 中存储和查询数组数据的完整指南
Neo4j 中存储和查询数组数据的完整指南 图形数据库 Neo4j 不仅擅长处理节点和关系,还提供了强大的数组(Array)存储和操作能力。本文将全面介绍如何在 Neo4j 中高效地使用数组,包括存储、查询、优化以及实际应用场景。 数组在 Neo4j 中的基本使用 数组…...
云原生/容器相关概念记录
文章目录 网络与虚拟化技术云平台与架构容器与编排容器网络方案性能优化与工具硬件与协议 网络与虚拟化技术 P4可编程网关 P4: Programming Protocol-independent Packet Processors一种基于P4语言的可编程网络设备,支持自定义数据包处理逻辑。P4可编程技术详解&am…...
uni-app项目实战笔记21--uniapp缓存的写入和读取
一、缓存的写入 uni.setStorageSync("storageClassList",classifyList.value) 二、缓存的读取,如果缓存不存在,则返回空数组 const storageClassList uni.getStorageSync("storageClassList") || []; 三、对读取到的数据进行转…...
操作系统概述
覆盖了操作系统概述、运行机制、中断、异常、操作系统的五大结构、虚拟机。 借鉴:王道、我的好朋友杨某、我的笔记。 一、操作系统概念 概念 1.操作系统体现了封装思想 由于底层硬件只接受二进制的指令不方便用户操作,所以操作系统把这些封装成简易的…...
探索数据的力量:Elasticsearch中指定链表字段的统计查询记录
目录 一、基本的数据结构说明 二、基本的统计记录 (一)统计当前索引中sellingProducts的所有类型 (二)检索指定文档中sellingProducts的数据总量 (三)检索指定文档中sellingProducts指定类型的数量统计…...