【SQL】子查询详解(附例题)
子查询
子查询的表示形式为:(SELECT 语句),它是IN
、EXISTS
等运算符的运算数,它也出现于FROM子句和VALUES子句。包含子查询的查询叫做嵌套查询。嵌套查询分为相关嵌套查询和不想关嵌套查询
WHERE子句中的子查询
比较运算符
子查询的结果是元组的集合,即一个表,一般情况下,其关系模式有多列,关系实例有若干行。如果子查询的结果是一个单列且单行的表,则可作为比较运算符的运算对象
例1 查询与学号2000012的学生在同一个系的学生的详细信息
注:本文所有例题涉及的关系实例如下:
学生信息都在Student表中;要查询全部信息,使用*选择所有列;查询条件是和学号为‘2000012’的学生同一个系。
可以先查询学号为‘2000012’的学生的系,再作为父查询的条件查询最终结果
SELECT * --父查询
FROM Student
WHERE Sdept = (SELECT Sdept --子查询FROM StudentWHERE Sno = '2000012');
查询结果
(实验环境:SQL Sever 2012)
上面的SQL语句的WHERE子句中出现了子查询,该语句的执行过程为:先执行子查询,得到一个值’计算机’,再用这个值替换子查询,得到一个新的SQL语句:
SELECT * --父查询
FROM Student
WHERE Sdept = '计算机';
然后执行新的SQL语句,得到结果。
该例的子查询不依赖于父查询而单独执行,这样的嵌套查询叫做不相关嵌套查询
例:查询选修了1156号课程并且成绩大于该课程平均成绩的学生的学号和成绩
SELECT Sno, Grade
FROM SC
WHERE Cno = '1156' AND Grade > (SELECT AVG(Grade)FROM SCWHERE Cno = '1156');
因为AVG是一个聚集函数,所以子查询返回一个单行单列的数据,可以按上述方法使用
如果子查询返回一个单列多行的表,则这个子查询不能直接出现在比较表达式,需要使用SOME
或ALL
修饰符,SOME是值集合的某一元素,ALL代表集合的全体元素
例:查询其他系比管理系某一学生年龄小的学生的姓名和年龄
查询管理系学生的年龄:
SELECT Sage
FROM Student
WHERE Sdept = '管理';
该查询结果为{18, 19, 19},不是一个单值。比某一学生年龄小要使用表达式Sage<SOME(18,19,19),如果Sage的值小于集合中某一元素的值,则比较结果为真,否则为假
SELECT Sname, Sage
FROM Student
WHERE Sdept <> '管理' AND Sage < SOME (SELECT SageFROM StudentWHERE Sdept = '管理');
上面的查询还可以使用聚集函数实现
比某一学生年龄就,就是要小于所有学生年龄的最大值
SELECT Sname, Sage
FROM Student
WHERE Sdept <>'管理' AND Sage < (SELECT MAX(Sage)FROM StudentWHERE Sdept = '管理');
例:查询其他系比管理系所有学生年龄都小的学生的姓名和年龄
SELECT Sname, Sage
FROM Student
WHERE Sdept <> '管理' AND Sage < ALL(SELECT SageFROM StudentWHERE Sdept = '管理');
该查询同样可以使用聚集函数
比所有学生年龄小,就是要小于所有学生年龄的最小值
SELECT Sname, Sage
FROM Student
WHERE Sdept <>'管理' AND Sage < (SELECT MIN(Sage)FROM StudentWHERE Sdept = '管理');
不存在这样的学生,所以查询结果为空
SOME、ALL修饰符与聚集函数及谓词IN的对应关系如表所示
= | <> | < | <= | > | >= | |
---|---|---|---|---|---|---|
SOME | IN | <MAX | <=MAX | >MIN | >=MIN | |
ALL | NOT IN | <MIN | <=MIN | >MAX | >=MAX |
例:查询平均成绩不小于85分的学生的姓名和所在系
按照题意,设计查询过程:首先从Student表中任取一个学生,假设为x,然后从SC表中汇总出x的平均成绩,如果平均成绩不小于85,则输出x的姓名和所在系
求学生x的平均成绩的SQL语句为:
SELECT Sno, AVG(Grade)
FROM SC
WHERE Sno = x.Sno;
在SELECT语句中,除了表名、列名外,现在还出现了一个变量x,x叫做元组变量,表示某个表的一个元组。元组变量的名称只能是表名或表的别名,这样,通过元组变量的名称就知道它代表哪个表的元组
最终查询语句如下:
SELECT x.Sname, x.Sdept
FROM Student x
WHERE (SELECT AVG(Grade)FROM SCWHERE x.Sno = SC.Sno) > 85;
这样的嵌套查询叫做相关嵌套查询,因为子查询有一个变量x,当未确定x的值时,无法得到查询结果,而x代表父查询的元组,与父查询相关。不相关嵌套查询的子查询先于父查询执行,并且只执行一次,而相关嵌套查询对父查询的每个元组都要执行一次子查询
上述语句的执行过程如下:
-
执行父查询,顺序扫描Student表
-
取Student表的一个元组赋予元组变量x
-
执行父查询的WHERE子句
- 将第2步获取的x传送到子查询
- 执行子查询,得到平均成绩
- 判断平均成绩是否大于等于85
-
如果WHERE子句的条件为真,则输出x.Sname和x.Sdept
-
重复步骤2~4,继续处理下一个元组,直到处理完Student表的所有元组
为了易于理解,可以使用表名作为元组变量名
谓词IN
谓词IN是二元运算符,一般书写形式为A IN S
,A是一个列名,S是一个集合。如果A是集合S的元素,则结果为真,否则结果为假
例:查询选修了1024号课程的学生的姓名和所在系
本例涉及Student表和SC表,分两步构造。首先在SC表中查询选修了1024号课程的学生集合,记为S
SELECT Sno
FROM SC
WHERE Cno = '1024';
然后对Student表的每个元组t,如果t.Sno∈S
成立,则t是查询结果之一。使用IN代替∈,使用元组变量表示t,就得到了下面的SQL语句
SELECT t.Sname, t.Sdept
FROM Student t
WHERE t.Sno IN(SELECT SnoFROM SCWHERE Cno = '1024');
也可以直接用表名做为元组变量
SELECT Student.Sname, Student.Sdept
FROM Student
WHERE Student .Sno IN(SELECT SnoFROM SCWHERE Cno = '1024');
上述语句执行过程为:先执行子查询,得到一个选了1024号课程的学生的集合,再执行外查询,对Student表中的每个元组,测试元组在Sno列上的分量值是否在子查询的结果中,如满足则输出这个元组
例:查询选修了“管理学”的学生学号和姓名
选修了管理学的学生:
SELECT Sno
FROM SC, Course
WHERE SC.Cno = Course.Cno AND Course.Cname = '管理学';
判断Student表中的每个元组在Sno上的分量是否在学生集合中,得:
SELECT Sno, Sname
FROM Student
WHERE Student.Sno IN(SELECT SnoFROM SC, CourseWHERE SC.Cno = Course.Cno AND Course.Cname = '管理学');
或
SELECT Sno, Sname
FROM Student
WHERE Sno IN(SELECT SnoFROM SCWHERE Cno IN(SELECT CnoFROM CourseWHERE Cname = '管理学'));
谓词EXISTS
谓词EXISTS是一元运算符,运算数是一个集合,如果该集合不是空集,则运算结果为真,否则运算结果为假。
例:查询所有选修了1024号课程的学生的姓名
SELECT Sname
FROM Student
WHERE Sno IN (SELECT SnoFROM SCWHERE Cno='1024');
这是一个不相关嵌套查询,也可以使用EXISTS谓词实现
对Student表的任何一个元组x,如果选修了1024号课程,则SC表中存在x的选课记录,该记录在Sno列上的分量等于x.Sno,在Cno上的分量等于’1024’。因此,集合SELECT * FROM SC WHERE Sno = x.Sno AND Cno = '1024'
一定不是空集,则表达式EXISTS(SELECT * FROM SC WHERE Sno = x.Sno AND Cno = '1024)
为真;如果x没有选修1024号课程,则表达式结果为假
SELECT x.Sname
FROM Student x
WHERE EXISTS(SELECT *FROM SCWHERE Sno = x.Sno AND Cno = '1024');
例:查询至少选修了学号为2000014的学生所选修的全部课程的学生的姓名及所在系
用R表示学号为2000014的学生所选修的全部课程的集合,S表示学生x选修的全部课程的集合,如果R⊆S成立,则x是要查找的学生
SELECT x.Sname x.Sdept
FROM Student x
WHERE x.Sno!='2000014' ANDNOT EXISTS (SELECT t.CnoFROM SC tWHERE Sno='2000014' AND NOT EXISTS(SELECT CnoFROM SCWHERE Sno = x.Sno AND Cno=t.Cno));
例:查询与学号为2000014的学生所选修的课程相同的学生的姓名
用R表示学号为2000014的学生选修的所有课程的集合,用S表示学生x选修的课程,如果R=S,则x是要查询的学生
SELECT Student x
FROM Student x
WHERE x.Sno != '2000014' AND NOT EXISTS (SELECT Cno --R∈SFROM SC yWHERE Sno = '2000014' AND NOT EXISTS(SELECT CnoFROM SCWHERE Sno = x.Sno AND Cno = y.Cno))ANDNOT EXISTS (SELECT CnoFROM SC zWHERE Sno = x.Sno AND NOT EXISTS(SELECT CnoFROM SCWHERE Sno = '2000014' AND Cno = z.Cno));
FROM 子句中的子查询
FROM子句可以指定查询要使用的表。子查询的结果是一个表,但只是一个中间结果,并没有存放在数据库。为了在FROM子句使用子查询,要给子查询生成的临时表命名,有时还要命名临时表的列
例:查询每门课的名称和平均成绩
首先可以很容易的写出查询每门课的课程号和平均成绩的SQL语句
SELECT Cno, AVG(Grade)
FROM SC
GROUP BY Cno;
为了得到课程的名字,将临时表和Course表连接即可
SELECT Cname, Grade
FROM Course, (SELECT Cno, AVG(Grade)FROM SCGROUP BY Cno) AS tmp(Cno, Grade) --命名临时表
WHERE Course.Cno = tmp.Cno;
也可以使用连接操作和分组操作实现
SELECT Cname, AVG(Grade)
FROM Course, SC
WHERE Course.Cno = SC.Cno
GROUP BY Cname;
外连接
使用条件连接运算时,只有满足连接条件的元组才能作为查询条件。假设A表和B表做条件连接,有时A表中会有某个元组t,由于在B表中没有任何一个元组满足与t的连接条件,因此t不会出现在连接结果中。
为了解决参与连接的表的某些元组没有出现在连接结果中的问题,需要使用左外连接、右外连接和全外连接运算,作为区分,前面介绍的连接叫做内连接
左外连接
A表和B表做左外连接,其过程是先按照连接条件做连接运算,得到一个结果。如果A的某个元组t不在结果中,则将t和B的一个“万能元组”做连接,这个万能元组在所有列上取空值,即(NULL, NULL, …, NULL),形成一个新元组,加入最终结果。这个“万能元组”并不真实存在
表达为
A LEFT OUTER JOIN B ON Condition
Course表和SC表做左外连接运算,物理课出现在查询结果中
SELECT *
FROM Course LEFT OUTER JOIN SC ON Course.Cno = SC.Cno
右外连接
A表和B表做右外连接,其过程是先按照连接条件做连接运算,得到一个结果。如果B的某个元组t不在结果中,则将t和A的一个“万能元组”做连接,形成一个新元组,加入最终结果。
表达为
A RIGHTOUTER JOIN B ON Condition
全外连接
全外连接是左外连接和右外连接的并
例:查询每门课的选修人数
根据题意,查询结果需要包括每门课程,所以使用左外连接,然后对查询结果分组、统计
有两种写法:
SELECT Cname, COUNT(*)
FROM Course LEFT OUTER JOIN SC ON Course.Cno = SC.Cno
GROUP BY Cname;
SELECT Cname, COUNT(Sno)
FROM Course LEFT OUTER JOIN SC ON Course.Cno = SC.Cno
GROUP BY Cname;
COUNT(*)函数用于统计分组中的元组数,不会省略值为NULL的元组,所以尽管无人选修物理课,任然会计数1,这是错误的;而COUNT(Sno)
在计数时舍弃了NULL值,所以统计结果为0,是符合要求的
未完待续…
相关文章:
【SQL】子查询详解(附例题)
子查询 子查询的表示形式为:(SELECT 语句),它是IN、EXISTS等运算符的运算数,它也出现于FROM子句和VALUES子句。包含子查询的查询叫做嵌套查询。嵌套查询分为相关嵌套查询和不想关嵌套查询 WHERE子句中的子查询 比较运算符 子查询的结果是…...
AI和传统命理的结合
deepseek的火热 也带来了AI命理学的爆火 1. 精准解析:AI加持,数据驱动 通过先进的人工智能算法,我们对海量的传统命理知识进行了深度学习和整合。无论是八字排盘、紫微斗数,还是风水布局、生肖运势,AI都能根据您的个…...
Java设计模式之抽象工厂模式:从入门到架构级实践
设计模式是构建高质量软件的基石,而抽象工厂模式作为创建型模式的代表,不仅解决了对象创建的问题,更在架构设计中扮演着关键角色。本文将从基础到高阶、从单机到分布式,全面剖析抽象工厂模式的应用场景与实战技巧。 一、从问题出发…...
摄像头模块对焦方式的类型
摄像头模块的对焦方式直接影响成像清晰度和使用场景适应性,不同技术各有其优缺点。以下是常见对焦方式及其原理、特点和应用场景的详细说明: 1. 固定对焦(Fixed Focus) 原理:镜头固定在特定距离(…...
九屏图分析法以手机为例
九屏图的两种视角 时间九屏图:关注系统的时间演化(过去、现在、未来),强调技术或产品的生命周期。空间九屏图:关注系统的层次结构(子系统、本系统、超系统࿰…...
【模板】前缀和
链接:【模板】前缀和 题目描述 给定一个长度为n的数组a1,a2,....ana_1, a_2,....a_na1,a2,....an. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出alal1....ara_la_{l1}....a_ralal1....ar 输入描述: 第一行包含两个整数n和q. 第…...
微信小程序多线程的使用
微信小程序的多线程主要通过 Worker 实现,用于处理复杂计算任务以避免阻塞主线程。以下是完整的使用指南和最佳实践: 一、Worker 核心机制 运行环境隔离 主线程与 Worker 线程内存不共享通信通过 postMessage 完成(数据拷贝而非共享ÿ…...
FPGA设计职位介绍|如何成为一名合格的数字前端设计工程师?
近年来FPGA行业持续升温,随着国产替代浪潮的加快推进,国家对可重构计算、边缘计算、自主可控等领域的扶持力度不断加大,FPGA作为灵活性高、可编程性强的重要芯片种类,在人工智能、通信、工业控制等应用中广受青睐。FPGA人才长期紧…...
Shell 基础
刷题: 思维导图: #include <stdio.h> // 手动定义32位有符号整数的范围 #define INT_MAX 2147483647 #define INT_MIN (-2147483647 - 1) int reverse(int x) { int rev 0; // 初始化反转后的数字为0 while (x ! 0) { // 当x不为0时ÿ…...
软件信息安全性测试如何进行?有哪些注意事项?
随着信息技术的高速发展,软件已经成为我们生活和工作中不可或缺的一部分。然而,随着软件产品的广泛普及,软件信息安全性问题也日益凸显,因此软件信息安全性测试必不可少。那么软件信息安全性测试应如何进行呢?在进行过程中又有哪…...
ragflow开启https访问:浏览器将自签证书添加到受信任的根证书颁发机构 ,当证书过期,还需要添加吗?
核心机制解析 信任链原理: 当您将自签名证书添加到"受信任的根证书颁发机构"后,系统会永久信任该证书的颁发者身份但证书本身的有效期和密钥匹配仍需验证证书更新的两种情况: 相同密钥续期:如果新证书使用相同的密钥对,浏览器通常会保持信任重新生成密钥:如果执…...
ragflow开启https访问:自签证书到期了,如何自动生成新证书
自动生成和更新自签名证书的方案 对于使用公网IP和自签名证书的RagFlow服务,要实现证书的自动生成和更新,可以采用以下方案: 方案一:使用脚本自动更新(推荐) 1. 创建自动更新脚本 在服务器上创建 ./docker/nginx/auto_renew_cert.sh 文件: #!/bin/bash# 证书路径 C…...
LLM面试题八
推荐算法工程师面试题 二分类的分类损失函数? 二分类的分类损失函数一般采用交叉熵(Cross Entropy)损失函数,即CE损失函数。二分类问题的CE损失函数可以写成:其中,y是真实标签,p是预测标签,取值为0或1。 …...
小行星轨道预测是怎么做的?从天文观测到 AI 模型的完整路径
目录 ☄️ 小行星轨道预测是怎么做的?从天文观测到 AI 模型的完整路径 🌌 一、什么是小行星轨道预测? 🔭 二、观测数据从哪里来? 🧮 三、经典动力学方法:数值积分 🤖 四、现代方…...
华为OD机试2025A卷 - 正整数到excel编号之间的转换(Java Python JS C++ C )
最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 用过 excel 的都知道excel的列编号是这样的: a b c … z aa ab ac … az ba bb bc … yz za zb zc … zz aaa aab aac … 分别代表以下编号: 1 2 3 … 26 27 28 29 … 52 53 54 55…...
2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激…...
Vue3 实现进度条组件
样式如下,代码如下 <script setup> import { computed, defineEmits, defineProps, onMounted, ref, watch } from vue// 定义 props const props defineProps({// 初始百分比initialPercentage: {type: Number,default: 0,}, })// 定义 emits const emits…...
I²S协议概述与信号线说明
IIS协议概述 IS(Inter-IC Sound)协议,又称 IIS(Inter-IC Sound),是一种专门用于数字音频数据传输的串行总线标准,由飞利浦(Philips)公司提出。该协议通常用于微控制器…...
Redis 面经
1、说说什么是 Redis? Redis 是 Remote Dictionary Service 三个单词中加粗字母的组合,是一种基于键值对的 NoSQL 数据库。但比一般的键值对,比如 HashMap 强大的多,Redis 中的 value 支持 string、hash、 list、set、zset、Bitmaps、Hyper…...
设计模式 四、行为设计模式(1)
在设计模式的世界里,23种经典设计模式通常被分为三大类:创建型、结构型和行为型。创建型设计模式关注对象创建的问题,结构性设计模式关注于类或对象的组合和组装的问题,行为型设计模式则主要关注于类或对象之间的交互问题。 行为设…...
Python错误分析与调试
在Python编程的过程中,我们难免会遇到各种各样的错误,而有效地分析和调试这些错误,能让我们的代码快速恢复正常运行,今天就来和大家聊聊Python中错误分析与调试的相关内容。 错误分析 Python中的错误大致可以分为语法错误和逻…...
vue实现大转盘抽奖
用vue实现一个简单的大转盘抽奖案例 大转盘 一 转盘布局 <div class"lucky-wheel-content"><div class"lucky-wheel-prize" :style"wheelStyle" :class"isStart ? animated-icon : "transitionend"onWheelTransitionE…...
《从零搭建Vue3项目实战》(AI辅助搭建Vue3+ElemntPlus后台管理项目)零基础入门系列第二篇:项目创建和初始化
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 《从零搭建Vue3项目实战》(AI辅助…...
yum拒绝连接
YUM 拒绝连接的解决方案 当遇到 yum 无法连接的问题时,通常可以通过更换为更稳定的镜像源来解决问题。以下是具体的解决方法: 更换为阿里云源 如果当前的 yum 配置文件存在问题或网络不稳定,可以尝试将其替换为阿里云的镜像源。 备份原始配…...
信息学奥赛一本通 1861:【10NOIP提高组】关押罪犯 | 洛谷 P1525 [NOIP 2010 提高组] 关押罪犯
【题目链接】 ybt 1861:【10NOIP提高组】关押罪犯 洛谷 P1525 [NOIP 2010 提高组] 关押罪犯 【题目考点】 1. 图论:二分图 2. 二分答案 3. 种类并查集 【解题思路】 解法1:种类并查集 一个囚犯是一个顶点,一个囚犯对可以看…...
代码随想录算法训练营第十一天
LeetCode/卡码网题目: 144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102. 二叉树的层序遍历107.二叉树的层次遍历II199. 二叉树的右视图637. 二叉树的层平均值429. N 叉树的层序遍历515. 在每个树行中找最大值116. 填充每个节点的下一个右侧节点指针117. 填…...
浅谈进程的就绪状态与挂起状态
就绪状态 进程获得除 CPU 之外的所需资源,一旦得到 CPU 就可以立即运行,不能运行的原因是还是因为 CPU 的资源太少,只能等待分配 CPU 资源。在系统中,处于就绪状态的进程可能有多个,通常是将它们组成一个进程就绪队列…...
37、web前端开发之Vue3保姆教程(一)
一、课程简介 本课程旨在帮助学员从零基础逐步掌握Web前端开发的核心技术,涵盖当前前端开发中的关键工具和框架。课程内容包括: Vue 3:主流前端框架,支持组件化开发和响应式数据管理,帮助学员高效构建现代Web应用。TypeScript:增强版JavaScript,提供静态类型支持,提高…...
cenos7升级gcc 9.3和Qt5.15版本教程
cenos7升级gcc 9.3和Qt5.15版本教程 文章目录 cenos7升级gcc 9.3和Qt5.15版本教程0、背景1、现状2、目标和思路3、升级前环境准备3.1 虚拟机联网配置3.2 镜像设置 4、升级gcc 9.35 升级Qt6 测试验证7 总结 0、背景 之前编码的环境一直是“拿来主义”,拷贝现成的虚拟…...
Scala总结(七)
集合(二) 数组 不可变数组与可变数组的转换 arr1.toBuffer //不可变数组转可变数组 arr2.toArray //可变数组转不可变数组 arr2.toArray 返回结果才是一个不可变数组,arr2 本身没有变化arr1.toBuffer 返回结果才是一个可变数组ÿ…...
linux 使用 usermod 授权 普通用户 属组权限
之前写过这篇文章 linux 普通用户 使用 docker 只不过是使用 root 用户编辑 /etc/group用户所属组文件的方式 今天带来一种 usermod 命令行方式 以下3步,在root用户下操作 第一步,先创建一个普通用户测试使用 useradd miniuser第二步,授权到…...
Redis持久化
Redis持久化 一.认识持久化1.简单介绍2.持久化策略 二.RDB1.快照2."定期"fork 3.RDB演示(1)手动执行save&bgsave触发一次生成快照(2)插入key,不手动执行bgsave(3)执行bgsave后,新旧文件的替换(4)通过配置自动生成rdb快照(5)rdb文件内容被故…...
什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度)
什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度) 在 Kubernetes(K8s)中,Taints(污点)和 Tolerations(容忍度)用于影响 Pod 调度到节点的行为…...
是德科技KEYSIGHT校准件85039B
是德科技KEYSIGHT校准件85039B 是德科技KEYSIGHT校准件85039B 85039B Agilent | 85039B|校准件|网络分析仪校准件|3GHz|75欧|N型 品牌: 安捷伦 | Agilent | 惠普 | HP 主要技术指标 DC to 3GHz frequency range 主要描述 常用型号: 一、频谱分析仪或…...
以UE5第三方插件库为基础,编写自己的第三方库插件,并且能够在运行时复制.dll
首先,创建一个空白的C 项目,创建第三方插件库。如下图所示 编译自己的.Dll 和.lib 库,打开.sln 如下图 ExampleLibrary.h 的代码如下 #if defined _WIN32 || defined _WIN64 #define EXAMPLELIBRARY_IMPORT __declspec(dllimport) #elif d…...
StarRocks执行原理与SQL性能优化策略探索
https://zhuanlan.zhihu.com/p/15707561363 聚合优化实践 -- 通过count group by 优化 count distinct数据倾斜问题 除了前面所说的聚合度会对分组聚合造成比较大的影响外,我们还要考虑一个点,即数据倾斜问题。 背景: 如下为最初的用户计算uv的SQL SE…...
Java全栈面试宝典:JMM内存模型与Spring自动装配深度解析
目录 一、Java内存模型(JMM)核心原理 🔥 问题8:happens-before原则全景解析 JMM内存架构图 happens-before八大规则 线程安全验证案例 🔥 问题9:JMM解决可见性的三大武器 可见性保障机制 volatile双…...
拉普拉斯变换
【硬核】工科生都逃不掉的拉氏变换,居然又炫酷又实用|拉普拉斯变换原理、图解与应用,傅里叶变换进阶,控制理论必修课【喵星考拉】...
JavaScript之Json数据格式
介绍 JavaScript Object Notation, js对象标注法,是轻量级的数据交换格式完全独立于编程语言文本字符集必须用UTF-8格式,必须用“”任何支持的数据类型都可以用JSON表示JS内内置JSON解析JSON本质就是字符串 Json对象和JS对象互相转化 前端…...
Android WiFi协议之P2P介绍与实践
Android WiFi P2P WiFi P2P (Peer-to-Peer) 是 Android 提供的一种允许设备之间直接通过 WiFi 进行通信的技术,无需接入传统的 WiFi 网络或互联网。这种技术也被称为 WiFi Direct。 一、WiFi P2P 基本概念 1. 核心组件 P2P 设备:支持 WiFi P2P 的 And…...
android TabLayout中tabBackground和background的区别
在这段代码中,android:background"color/white" 和 app:tabBackground"android:color/transparent" 是两个不同的属性,它们的作用范围和用途完全不同。以下是它们的区别: 1. android:background 作用: 设置整…...
使用 `keytool` 生成 SSL 证书密钥库
使用 keytool 生成 SSL 证书密钥库:详细指南 在现代 Web 应用开发中,启用 HTTPS 是保护数据传输安全性和增强用户体验的重要步骤。对于基于 Java 的应用,如 Spring Boot 项目,keytool 是一个强大的工具,用于生成和管理…...
DC-DC电路和LDO电路
一、DC-DC电路 在电子电路中,将输入的直流电压转换为电路中所需要的直流电压的电路被称为DC-DC电源电路。 1、buck电路(降压电路) 功能:把12V输入电压转化为5V的输出电压。 上图中电池为12V供电,需要给负载输出5V电…...
智谛达科技引领AI人形机器人新时代
在这个科技日新月异的时代,人工智能(AI)如同一股不可阻挡的洪流,以前所未有的速度改变着我们的生活方式、工作模式乃至整个社会的运行逻辑。而在这场波澜壮阔的科技革命中,智谛达科技集团凭借其深厚的技术底蕴、前瞻性的战略眼光以及在AI人形机器人领域的深厚积累,正引领着整个…...
在ubuntu24上装ubuntu22
实验室上有一台只装了ubuntu24的电脑,但是项目要求在22上进行 搞两个ubuntu系统! 步骤一:制作22的启动盘 步骤二:进入bios安装界面 步骤三:选择try or install ubuntu 步骤四:选择try ubuntu 步骤五&…...
高精度算法
高精度加法 输入两个数,输出他们的和(高精度) 输入样例 111111111111111111111111111111 222222222222222222222222222222 输出样例 333333333333333333333333333333 #include <bits/stdc.h> using namespace std;string a,b; in…...
2019年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析
2019年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...
UIMeter-UI自动化软件(产品级)
前言:作为一个资深测试工程师,UI测试,webUI自动化测试是我们必备的技能,我们都知道常用的框架比如selenium、playwright、rebootframwork等等,但是无论哪一种框架,都需要测试人员去编写代码,进行…...
Porting Layer - 跨平台函数接口封装(RTOS/Windows)- C语言
目录 概述具体实现使用说明 概述 在嵌入式开发中,一般会在某个开发板上某个系统上实现某个功能,为了开发模块的移植性更好,因此需要对不同的操作系统有一层封装层。当换一个操作系统时,模块中的code不用修改,只需要根…...
Kafka负载均衡挑战解决
本文为 How We Solve Load Balancing Challenges in Apache Kafka 阅读笔记 kafka通过利用分区来在多个队列中分配消息来实现并行性。然而每条消息都有不同的处理负载,也具有不同的消费速率,这样就有可能负载不均衡,从而使得瓶颈、延迟问题和…...