详解SQL数据查询功能
数据查询
- 一、 单表查询
- 1. 选择表中的若干列
- 2. 选择表中的若干元组
- 3. `ORDER BY` 子句
- 4. 聚合函数
- 5. `GROUP BY` 子句
- 6. `LIMIT` 子句
- 综合示例:
- 二、 多表查询
- 1. 等值连接查询 (Equi-Join)
- 2. 非等值连接查询 (Non-Equi Join)
- 3. 自然连接查询 (Natural Join)
- 4. 复合条件连接查询
- 5. 自身连接查询 (Self Join)
- 6. 外连接查询 (Outer Join)
- 7. 多表连接查询
- 总结
- 三、 嵌套查询
- 1. 带有 `IN` 谓语的子查询
- 2. 带有比较运算符的子查询
- 3. 带有 `ANY(SOME)` 或 `ALL` 谓语的子查询
- 示例 1:`ANY` 谓语
- 示例 2:`ALL` 谓语
- 4. 带有 `EXISTS` 谓语的子查询
- 总结
- 四、集合查询
- 1. UNION
- 2. UNION ALL
- 3. INTERSECT
- 4. EXCEPT
- 注意事项
- 总结
一、 单表查询
1. 选择表中的若干列
语法:
SELECT column1, column2, ...
FROM table_name;
column1, column2: 表中需要查询的列。table_name: 查询的表名。
示例:
SELECT name, age
FROM students;
分析:
从 students 表中查询 name 和 age 两列,结果只显示这两列数据。
2. 选择表中的若干元组
语法:
SELECT *
FROM table_name
WHERE condition;
*: 表示选择所有列,或者可以指定具体列。WHERE condition: 查询满足指定条件的元组。
示例:
SELECT *
FROM students
WHERE age > 18;
分析:
查询 students 表中所有 age 大于 18 的元组,并返回这些元组的所有列。
3. ORDER BY 子句
语法:
SELECT column1, column2
FROM table_name
ORDER BY column_name [ASC|DESC];
ORDER BY: 用于指定排序列。ASC: 升序(默认)。DESC: 降序。
示例:
SELECT name, age
FROM students
ORDER BY age DESC;
分析:
从 students 表中查询 name 和 age 两列,并按 age 降序排列。
4. 聚合函数
语法:
SELECT aggregate_function(column_name)
FROM table_name;
- 常见聚合函数:
COUNT(column_name): 统计记录数。SUM(column_name): 计算总和。AVG(column_name): 计算平均值。MAX(column_name): 获取最大值。MIN(column_name): 获取最小值。
示例:
SELECT AVG(age) AS average_age
FROM students;
分析:
计算 students 表中 age 列的平均值,并将结果命名为 average_age。
5. GROUP BY 子句
语法:
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name;
GROUP BY: 用于对查询结果按指定列分组。- 常与聚合函数配合使用。
示例:
SELECT department, COUNT(*) AS student_count
FROM students
GROUP BY department;
分析:
按 department 列对 students 表中的数据分组,并统计每个 department 的学生数量,结果命名为 student_count。
6. LIMIT 子句
语法:
SELECT column1, column2
FROM table_name
LIMIT number_of_rows;
LIMIT: 用于限制返回的记录数。
示例:
SELECT *
FROM students
LIMIT 5;
分析:
从 students 表中查询前 5 条记录。
综合示例:
假设有一张名为 students 的表,结构如下:
| id | name | age | department | grade |
|---|---|---|---|---|
| 1 | Alice | 20 | Computer Sci | 90 |
| 2 | Bob | 22 | Math | 85 |
| 3 | Charlie | 19 | Computer Sci | 95 |
| 4 | David | 21 | Physics | 88 |
| 5 | Eva | 20 | Math | 92 |
查询示例:
SELECT department, AVG(grade) AS average_grade
FROM students
WHERE age > 20
GROUP BY department
ORDER BY average_grade DESC
LIMIT 2;
分析:
- 筛选出
age > 20的学生。 - 按
department列分组。 - 计算每个
department的平均成绩average_grade。 - 按平均成绩降序排列。
- 返回前 2 条记录。
查询结果:
| department | average_grade |
|---|---|
| Math | 85 |
| Physics | 88 |
二、 多表查询
1. 等值连接查询 (Equi-Join)
语法:
SELECT 列名
FROM 表1 AS 别名1
JOIN 表2 AS 别名2
ON 表1.列名 = 表2.列名;
示例:
假设有两个表:
表 employees:
| emp_id | name | dept_id |
|---|---|---|
| 1 | 张三 | 101 |
| 2 | 李四 | 102 |
| 3 | 王五 | 103 |
表 departments:
| dept_id | dept_name |
|---|---|
| 101 | 财务部 |
| 102 | 人事部 |
| 103 | 技术部 |
查询员工姓名及其所在部门名称:
SELECT e.name, d.dept_name
FROM employees AS e
JOIN departments AS d
ON e.dept_id = d.dept_id;
结果:
| name | dept_name |
|---|---|
| 张三 | 财务部 |
| 李四 | 人事部 |
| 王五 | 技术部 |
分析:
- 等值连接查询通过
ON子句将两个表的公共列用等值条件连接。 - 查询的结果集只包含满足连接条件的记录。
2. 非等值连接查询 (Non-Equi Join)
语法:
SELECT 列名
FROM 表1
JOIN 表2
ON 表1.列名 <> 表2.列名;
示例:
假设有一个表 grades 定义了工资的等级范围:
表 salaries:
| emp_id | salary |
|---|---|
| 1 | 5000 |
| 2 | 8000 |
| 3 | 12000 |
表 grades:
| grade | min_salary | max_salary |
|---|---|---|
| A | 10000 | 15000 |
| B | 7000 | 9999 |
| C | 4000 | 6999 |
查询每个员工的工资等级:
SELECT s.emp_id, s.salary, g.grade
FROM salaries AS s
JOIN grades AS g
ON s.salary BETWEEN g.min_salary AND g.max_salary;
结果:
| emp_id | salary | grade |
|---|---|---|
| 1 | 5000 | C |
| 2 | 8000 | B |
| 3 | 12000 | A |
分析:
- 非等值连接使用条件运算符(如
<,>,<=,>=,BETWEEN等)连接表。 - 非等值连接通常用于范围查询。
3. 自然连接查询 (Natural Join)
语法:
SELECT 列名
FROM 表1
NATURAL JOIN 表2;
示例:
假设表 employees 和 departments 的公共列名为 dept_id。
查询员工姓名及其所在部门名称:
SELECT name, dept_name
FROM employees
NATURAL JOIN departments;
结果:
| name | dept_name |
|---|---|
| 张三 | 财务部 |
| 李四 | 人事部 |
| 王五 | 技术部 |
分析:
- 自然连接自动基于两个表中的同名列进行等值连接。
- 如果同名列的值不匹配,该行不会出现在结果中。
4. 复合条件连接查询
语法:
SELECT 列名
FROM 表1
JOIN 表2
ON 条件1 AND 条件2 OR 条件3;
示例:
假设有三个表:
表 students:
| student_id | name | course_id |
|---|---|---|
| 1 | 张三 | 101 |
| 2 | 李四 | 102 |
| 3 | 王五 | 103 |
表 courses:
| course_id | course_name | teacher_id |
|---|---|---|
| 101 | 数学 | 1 |
| 102 | 英语 | 2 |
| 103 | 物理 | 3 |
表 teachers:
| teacher_id | teacher_name |
|---|---|
| 1 | 王老师 |
| 2 | 李老师 |
| 3 | 张老师 |
查询学生姓名、所学课程名称及授课老师:
SELECT s.name AS student_name, c.course_name, t.teacher_name
FROM students AS s
JOIN courses AS c
ON s.course_id = c.course_id
JOIN teachers AS t
ON c.teacher_id = t.teacher_id;
结果:
| student_name | course_name | teacher_name |
|---|---|---|
| 张三 | 数学 | 王老师 |
| 李四 | 英语 | 李老师 |
| 王五 | 物理 | 张老师 |
分析:
- 复合条件连接可以通过多个
AND或OR子句实现复杂的多条件连接。 - 查询需要逻辑上关联的多张表。
5. 自身连接查询 (Self Join)
语法:
SELECT a.列名1, b.列名2
FROM 表名 AS a
JOIN 表名 AS b
ON a.列名 = b.列名;
示例:
假设有一个表 employees,表示员工及其上级的关系:
表 employees:
| emp_id | name | manager_id |
|---|---|---|
| 1 | 张三 | NULL |
| 2 | 李四 | 1 |
| 3 | 王五 | 1 |
查询每个员工及其上级姓名:
SELECT e.name AS employee_name, m.name AS manager_name
FROM employees AS e
LEFT JOIN employees AS m
ON e.manager_id = m.emp_id;
结果:
| employee_name | manager_name |
|---|---|
| 张三 | NULL |
| 李四 | 张三 |
| 王五 | 张三 |
分析:
- 自身连接在一张表中使用别名,作为两张表进行连接。
- 常用于层级结构的查询。
6. 外连接查询 (Outer Join)
语法:
-- 左外连接
SELECT 列名
FROM 表1
LEFT JOIN 表2
ON 表1.列名 = 表2.列名;-- 右外连接
SELECT 列名
FROM 表1
RIGHT JOIN 表2
ON 表1.列名 = 表2.列名;-- 全外连接
SELECT 列名
FROM 表1
FULL OUTER JOIN 表2
ON 表1.列名 = 表2.列名;
示例:
假设有两个表:
表 employees:
| emp_id | name | dept_id |
|---|---|---|
| 1 | 张三 | 101 |
| 2 | 李四 | 102 |
表 departments:
| dept_id | dept_name |
|---|---|
| 101 | 财务部 |
| 103 | 技术部 |
查询所有员工及其所在部门(即使部门未匹配):
SELECT e.name, d.dept_name
FROM employees AS e
LEFT JOIN departments AS d
ON e.dept_id = d.dept_id;
结果:
| name | dept_name |
|---|---|
| 张三 | 财务部 |
| 李四 | NULL |
分析:
- 外连接用于获取一个表中所有记录,即使另一表中没有匹配记录。
- 左外连接:保留左表的所有记录。
- 右外连接:保留右表的所有记录。
- 全外连接:保留两表的所有记录。
7. 多表连接查询
语法:
SELECT 列名
FROM 表1
JOIN 表2
ON 条件1
JOIN 表3
ON 条件2;
示例:
参照 复合条件连接查询 中的三表连接示例。
分析:
- 多表连接可以任意组合等值连接、外连接、非等值连接等。
- 每次添加新表需要通过
ON子句指定与其他表的连接条件。
总结
| 类型 | 关键特点 | 适用场景 |
|---|---|---|
| 等值连接 | 使用 = 条件 | 查找两个表中匹配记录 |
| 非等值连接 | 使用范围条件 | 范围匹配 |
| 自然连接 | 基于公共列的同名和等值条件自动匹配 | 自动匹配同名列 |
| 复合条件连接 | 多个条件组合 | 多条件复杂查询 |
| 自身连接 | 表与自身的关联 | 层级关系 |
| 外连接 | 保留一张表中的所有记录 | 查询非匹配记录 |
| 多表连接 | 同时连接多张表 | 复杂查询 |
三、 嵌套查询
1. 带有 IN 谓语的子查询
语法:
SELECT 列名
FROM 表名
WHERE 列名 IN (子查询);
示例:
假设有两张表:
employees:员工表,包含字段id,name,department_iddepartments:部门表,包含字段id,name
查询属于某些特定部门的员工:
SELECT name
FROM employees
WHERE department_id IN (SELECT idFROM departmentsWHERE name IN ('HR', 'Sales')
);
分析:
- 子查询首先从
departments表中选出名称为 “HR” 和 “Sales” 的部门id。 - 主查询将这些
id与employees表中的department_id进行匹配,选出符合条件的员工姓名。
特点:
- 子查询结果是一组值,适用于
IN谓语。 IN用于判断字段值是否存在于子查询的返回结果集中。
2. 带有比较运算符的子查询
语法:
SELECT 列名
FROM 表名
WHERE 列名 运算符 (子查询);
示例:
查询工资大于公司平均工资的员工:
假设 employees 表中包含字段 id, name, salary。
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary)FROM employees
);
分析:
- 子查询计算
employees表中员工的平均工资。 - 主查询筛选出工资高于该平均值的员工。
特点:
- 子查询返回单一值(如
SUM,AVG,MAX等)。 - 运算符可以是
=,>,<,>=,<=, 或<>等。
3. 带有 ANY(SOME) 或 ALL 谓语的子查询
语法:
ANY(SOME):至少满足子查询结果中的某一个条件。
SELECT 列名
FROM 表名
WHERE 列名 运算符 ANY (子查询);
ALL:必须满足子查询结果中的所有条件。
SELECT 列名
FROM 表名
WHERE 列名 运算符 ALL (子查询);
示例 1:ANY 谓语
查询工资大于某个部门中任意一个员工的工资的员工:
SELECT name, salary
FROM employees
WHERE salary > ANY (SELECT salaryFROM employeesWHERE department_id = 3
);
分析:
- 子查询返回部门
id = 3的所有员工工资。 - 主查询筛选出工资比部门
3中至少一名员工工资高的员工。
示例 2:ALL 谓语
查询工资高于所有部门 3 员工的员工:
SELECT name, salary
FROM employees
WHERE salary > ALL (SELECT salaryFROM employeesWHERE department_id = 3
);
分析:
- 子查询返回部门
id = 3的所有员工工资。 - 主查询筛选出工资比部门
3中所有员工工资都高的员工。
特点:
ANY(或等价的SOME)适合查找与子查询结果中任意值匹配的记录。ALL用于查找符合子查询结果中所有值的记录。
4. 带有 EXISTS 谓语的子查询
语法:
SELECT 列名
FROM 表名
WHERE EXISTS (子查询);
示例:
查询至少参与了一个项目的员工:
假设有两张表:
employees:员工表,包含字段id,nameprojects:项目表,包含字段id,employee_id,project_name
SELECT name
FROM employees e
WHERE EXISTS (SELECT 1FROM projects pWHERE p.employee_id = e.id
);
分析:
- 子查询检查每个员工是否存在于
projects表的employee_id中。 - 如果子查询返回结果,则
EXISTS谓语为真,主查询返回该员工的姓名。
特点:
- 子查询的返回值并不重要,只需确认是否存在符合条件的记录。
- 通常用来检查关联关系是否存在。
总结
| 谓语 | 子查询返回值类型 | 用途 |
|---|---|---|
IN | 一组值 | 判断字段值是否存在于返回结果集中 |
| 比较运算符 | 单一值 | 用于比较字段值与子查询的结果 |
ANY | 一组值 | 判断字段值是否与子查询结果中任意值匹配 |
ALL | 一组值 | 判断字段值是否符合子查询结果中所有值 |
EXISTS | 判断是否存在记录(无具体值) | 检查子查询是否返回任何记录 |
四、集合查询
1. UNION
UNION 用于将两个查询的结果合并成一个结果集,同时去除重复的行。
语法:
SELECT column_list FROM table1
UNION
SELECT column_list FROM table2;
示例:
假设有两个表:
employees 表:
| id | name | department |
|---|---|---|
| 1 | Alice | HR |
| 2 | Bob | Sales |
| 3 | Charlie | IT |
managers 表:
| id | name | department |
|---|---|---|
| 4 | David | HR |
| 5 | Emily | IT |
| 6 | Bob | Sales |
查询所有员工和经理的姓名(去重):
SELECT name FROM employees
UNION
SELECT name FROM managers;
结果:
name
-----
Alice
Bob
Charlie
David
Emily
分析:
UNION会自动去除重复的行,因此Bob只会出现一次。- 数据必须具有相同的列数和兼容的数据类型。
2. UNION ALL
UNION ALL 与 UNION 类似,但它不去重,会包含所有重复的行。
语法:
SELECT column_list FROM table1
UNION ALL
SELECT column_list FROM table2;
示例:
查询所有员工和经理的姓名(包括重复):
SELECT name FROM employees
UNION ALL
SELECT name FROM managers;
结果:
name
-----
Alice
Bob
Charlie
David
Emily
Bob
分析:
UNION ALL的性能优于UNION,因为它省略了去重操作。- 当不需要去重时,推荐使用
UNION ALL。
3. INTERSECT
INTERSECT 用于返回两个查询结果中公共的部分。
语法:
SELECT column_list FROM table1
INTERSECT
SELECT column_list FROM table2;
示例:
查询同时是员工和经理的姓名:
SELECT name FROM employees
INTERSECT
SELECT name FROM managers;
结果:
name
-----
Bob
分析:
- 只有两个查询结果中都存在的行才会被返回。
- 结果集会自动去重。
4. EXCEPT
EXCEPT 用于返回第一个查询结果中有,但第二个查询结果中没有的行。
语法:
SELECT column_list FROM table1
EXCEPT
SELECT column_list FROM table2;
示例:
查询仅是员工但不是经理的姓名:
SELECT name FROM employees
EXCEPT
SELECT name FROM managers;
结果:
name
-----
Alice
Charlie
分析:
- 结果是从第一个查询中排除了与第二个查询重复的部分。
- 自动去重。
注意事项
- 列数和数据类型必须一致:
- 集合查询的两个或多个子查询中,
SELECT子句中的列数必须相同。 - 每列的数据类型必须兼容(例如,
VARCHAR和CHAR是兼容的,但VARCHAR和INT不是)。
- 集合查询的两个或多个子查询中,
- 排序:
- 如果需要对结果集排序,可以在集合操作后使用
ORDER BY,例如:SELECT name FROM employees UNION SELECT name FROM managers ORDER BY name;
- 如果需要对结果集排序,可以在集合操作后使用
- 性能:
UNION和INTERSECT由于会去重,性能可能较差。- 如果可以接受重复值,推荐使用
UNION ALL。
总结
| 操作符 | 功能描述 | 是否去重 |
|---|---|---|
UNION | 合并两个结果集 | 是 |
UNION ALL | 合并两个结果集 | 否 |
INTERSECT | 返回两个结果集的交集 | 是 |
EXCEPT | 返回第一个结果集中独有的部分 | 是 |
相关文章:
详解SQL数据查询功能
数据查询 一、 单表查询1. 选择表中的若干列2. 选择表中的若干元组3. ORDER BY 子句4. 聚合函数5. GROUP BY 子句6. LIMIT 子句综合示例: 二、 多表查询1. 等值连接查询 (Equi-Join)2. 非等值连接查询 (Non-Equi Join)3. 自然连接查询 (Natural Join)4. 复合条件连接…...
车载以太网测试-11【网络层-ICMP协议】
目录 1 摘要2 ICMP协议帧结构2.1 IP头部2.2 ICMP头部2.3 ICMP数据部分2.4 示例:ICMP回显请求(Ping请求) 3 ICMP协议在车载以太网的应用3.1 为什么需要ICMP?3.1.1 网络连通性测试3.1.2 错误报告3.1.3 网络性能监测3.1.4 路径MTU发现…...
leetcode:728. 自除数(python3解法)
难度:简单 自除数 是指可以被它包含的每一位数整除的数。 例如,128 是一个 自除数 ,因为 128 % 1 0,128 % 2 0,128 % 8 0。 自除数 不允许包含 0 。 给定两个整数 left 和 right ,返回一个列表ÿ…...
【QT】-一文读懂抽象类
抽象类(Abstract Class)是面向对象编程中的一个概念,指的是无法被实例化的类,它通常作为其他类的基类。抽象类的作用是定义一个接口(或约定),让派生类(继承自抽象类的类)来实现具体的功能。 抽象类的特点: 包含纯虚函数(Pure Virtual Function): 抽象类通常包含一…...
vue3-computed计算属性和reactive响应式系统结合使用
1.前言 vue3中使用reactive函数创建一个响应式对象,当对象数据发生变化的时候,依赖这些数据的计算属性和模板会自动的更新。 2.实例 2.1 简写 <template><div><p>用户名: {{ userName }}</p><p>用户名的大写形式: {{ u…...
Dubbo请求调用本地服务
文章目录 前言配置 Dubbo 本地调用方法一:application.yml 中配置方法二:DubboReference 注解中指定 注意个人简介 前言 在微服务架构中,Apache Dubbo 作为一款高性能、轻量级的 RPC 框架,被广泛应用于分布式系统。通常ÿ…...
Pycharm 社区版安装教程
找到安装包双击安装文件---点击下一步 一般路径是:C:\Rambo\Software\Development 选择完成后就是如下地址: C:\Rambo\Software\Development\PyCharm Community Edition 2024.3.3 点击上述3个位置就可以了----下一步 等待安装就可以了---完成后点击完成…...
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组
Linux红帽:RHCSA认证知识讲解(六)创建、管理和删除本地用戶和组 前言一、用户和组概念用户类型对比表格主要组和补充组对比表格: 二、本地用户账户增删改查三、本地组账户 前言 上篇博客我们详细了解了从红帽和 DNF 软件仓库下载…...
在虚拟环境里面配置Linux系统
Linux系统有很多版本,常用的有Ubantu乌班图,和CentOS 不同的版本在使用的时候,有部分执行方式的不同 安装的流程都一样 首先,想要安装Ubantu,要去它的官网,找下载连接,然后下载iso后缀的安装…...
React开发指南:核心、实践与案例
文章目录 一、React核心架构与设计哲学1.1 虚拟DOM与Diff算法1.2 JSX编译原理1.3 组件化设计模式1.4 Fiber架构解析1.5 组件生命周期(类组件) 二、React核心特性详解2.1 数据流管理2.2 Hooks革命2.3 Context API进阶2.4 自定义Hooks设计模式 三、React 1…...
分享vue好用的pdf 工具实测
vue3-pdf-app: 带大纲,带分页,带缩放,带全屏,带打印,带下载,带旋转 下载依赖: yarn add vue3-pdf-appornpm install vue3-pdf-app 配置类: 创建文件 pdfConfig.ts /…...
Redis分布式锁深度剖析:从原理到Redisson实战,破解脑裂与高并发锁难题
一、📌 分布式锁的核心应用场景 场景类型典型案例风险说明🚀 高并发场景电商秒杀、票务抢购库存超卖风险⏰ 定时任务场景集群日志清理、数据统计任务重复执行🔄 幂等场景支付接口重试、订单创建资金重复扣款 二、🔧 Redis分布式锁…...
Markdown Poster – 免费Markdown转图片工具|优雅图文海报制作与社交媒体分享
Markdown Poster是什么 Markdown Poster 是一款高效的 Markdown 转图片工具,利用灵活编辑和实时预览功能帮助用户轻松制作优雅的图文海报。该工具内置丰富的海报模板和多种主题选项,支持导出为图片和 HTML 代码,适用于社交媒体分享、网站集成…...
掌握市场先机:9款销售渠道管理工具深度测评
本文主要介绍了以下9款销售渠道管理工具:1.纷享销客; 2.销帮帮; 3.小满CRM; 4.有赞; 5.Oracle NetSuite; 6.Salesforce Sales Cloud; 7.Cin7; 8.Pipedrive; 9.BigCommerc…...
OpenCV图像加权函数:addWeighted
1 addWeighted函数 在OpenCV 里,addWeighted 函数的作用是对两个图像进行加权求和,常用于图像融合、图像过渡等场景。函数如下: cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1:第一个输入图…...
直方图(信息学奥赛一本通-1115)
【题目描述】 给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。假设 Fmax(Fmax<10000)是数组里最大的数,那么我们只统计{0,1,2.....Fmax}里每个数出现的次数。 【输入】 第一行n是数组的大小。…...
docker桌面版启动redis,解决无法连接
docker run -d --name redis -p 6379:6379 -v E:\2\redis\redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf 在本地创建一个目录,里面有个redis.conf文件,内容如下,启动时绑定这个配置文件目…...
Scratch 3.0安装包,支持Win7/10/11、Mac电脑手机平板、少儿便编程的启蒙软件。
Scratch是一款由麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不使用键盘,就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以…...
Java创造型模式之原型模式详解
设计模式是面向对象设计中的一种标准方法,用于解决常见的设计问题。原型设计模式(Prototype Pattern)是23种经典设计模式之一,属于创建型模式,它允许通过复制现有对象来创建新对象,而不是通过构造函数或工厂…...
JVM的各种细节
(1)JVM 核心结构(必须知道) 类加载器 负责将.class()文件加载到内存中,供 JVM 使用。 方法区 存储类元数据(类名、字段、方法)、常量池、静态变量等。 JDK 8:由元空间(Metaspace)…...
JavaScript基本知识
文章目录 一、JavaScript基础1.变量(重点)1-1 定义变量及赋值1-2 变量的命名规则和命名规范判断数据类型: 2.数据类型转换2-1 其他数据类型转成数值2-2 其他数据类型转成字符串2-3 其他数据类型转成布尔 3.函数3-1函数定义阶段3-2函数调用阶段…...
Navicat for Snowflake 震撼首发,激活数据仓库管理全新动能
近日,Navicat 家族迎来了一位全新成员 — Navicat for Snowflake。Snowflake 是一款基于云架构的现代数据仓库解决方案,以其弹性扩展、高性能和易用性著称。这次首发的Navicat for Snowflake 专为简化 Snowflake 数据库管理任务而精心打造。它凭借其直观…...
pjsip 自定义获取和设置麦克风、扬声器
获取麦克风和扬声器列表结果Device ID: 0 Name: “Wave mapper” Input channels: 2 Output channels: 2 Default sample rate: 16000 Device ID: 1 Name: “麦克风 (USB Microphone)” Input channels: 2 Output channels: 0 Default sample rate: 16000 Device ID: 2 Name: “…...
C++ 左值(lvalue)和右值(rvalue)
在 C 中,左值(lvalue)和右值(rvalue)是指对象的不同类别,区分它们对于理解 C 中的表达式求值和资源管理非常重要,尤其在现代 C 中涉及到移动语义(Move Semantics)和完美转…...
深度学习基础:线性代数本质2——线性组合、张成的空间与基
目录 一、线性组合 1. 用一个有趣的角度看向量坐标 2. 如果我们选择不同的基向量会怎样? 3. 线性组合 4. 张成的空间 ① 二维向量的张成的空间 ② 三维向量的张成的空间编辑 5.线性相关 6.线性无关 7. 基的定义 一、线性组合 1. 用一个有趣的角度看向量坐…...
第五天 Labview数据记录(5.4 EXCEL文件读写)
5.4 EXCEL文件读写 Excel 文件读写在数据处理、自动化办公、数据分析等领域具有重要的意义。以下是 Excel 文件读写的主要应用场景和意义:1. 数据管理和整理;2. 自动化办公;3. 数据分析和可视化;4. 系统集成;5. 报表生…...
iOS 模块化架构设计:主流方案与实现详解
随着 iOS 工程规模的扩大,模块化设计成为提升代码可维护性、团队协作效率和开发灵活性的关键。本文将探讨为什么需要模块化,介绍四种主流的模块化架构方案(协议抽象、依赖注入、路由机制和事件总线),并通过代码示例和对…...
【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?
查看 WPS 的输入静态地理数据方法总结 方法 1:使用 gdal_translate 将二进制数据转换为 GeoTIFFgdal_translate 工具概述使用 gdal_translate 将二进制数据转换为 GeoTIFF方法 2:使用 ncdump 查看 geo_em.dXX.nc方法 3:使用 Python xarray + matplotlib 可视化 geo_em.dXX.n…...
麒麟系统利用pycharm生成deb文件
在麒麟系统(Kylin OS)上使用 PyCharm 进行 Python 开发并生成 .deb 可安装软件包,可以按照以下步骤进行操作: 1. 准备工作 安装 PyCharm:确保已经在麒麟系统上安装了 PyCharm,可以使用官方提供的安装包进…...
【日志队列】log日志实时写入队列,流式输出
有一个这样的任务:在网页上流式输出执行一个函数在终端产生的日志,但是目前只有终端日志,可以通过 自定义 loguru 的 Sink 将日志消息定向到线程安全的队列中,主线程从队列中实时获取日志。 import threading import queue from …...
