当前位置: 首页 > news >正文

【数据库】详解基本SQL语句用法

一、SELECTING DATA FROM TABLES【查询数据】

SELECT命令是表上所有查询的基础,因此给出它的完整描述以显示它的功能。在描述之后提供各种格式的示例。

1.1 整体描述

SELECT column1, column2, ...
FROMtable1
[INNER | LEFT | RIGHT] JOIN table2 on conditions
WHEREconditions
GROUP BY column1
HAVING group_conditions
ORDER BY column1
LIMIT offset, length

SELECT语句由几个句子组成,如下图所示:

  • SELECT 后接逗号分隔的列或者星号(*),表示要返回的列或者所有列
  • FROM 指定要查询的表或视图
  • JOIN 根据特定的连接条件从其他表中获取相关数据
  • WHERE 根据指定条件过滤
  • GROUP BY 将具有相同值的行分组为汇总行,通常与聚合函数一起使用,例如 COUNT、SUM、AVG 等
  • HAVING 根据条件过滤分组。通常与 GROUP BY 一起使用
  • ORDER BY 根据一个或多个列对结果集进行排序
  • LIMIT 限制查询返回的行数。语法 LIMIT offset, length 允许指定起始点(offset)和要返回的行数(length

说明:从一个或多个表中选择行和列。可以用作命令,也可以用作另一个SELECT、UPDATE或其他SQL命令中的子查询(对子句有一定的限制)。

1.2 一些参数与子句

1. ALL

  • 用法ALL 用于 SELECT 语句中,表示包括所有查询结果中的行,包括重复的行。
  • 默认行为:由于 ALL 是默认行为,因此通常不需要明确指定它。SQL 查询默认包括所有行而不去除重复行。

2. DISTINCT

  • 用法DISTINCT 用于去除结果集中的重复行,确保每一行都是唯一的。
  • 目的:当你只想检索唯一值时,特别是对于某列或列组合,使用 DISTINCT 可以去除重复。

3. *(星号)

  • 用法:星号(*)用于选择表中的所有列。
  • 目的:快速检索所有列,而不需要逐一指定每一列

4. 列名

  • 用法:指定列名允许你只检索感兴趣的列。
  • 目的:提供对检索数据的更多控制,使结果更易于理解。

5. 别名(Aliases)

  • 用法:别名为结果集中显示的列或表提供临时名称。
  • 目的:使列名更具可读性或缩短名称以方便使用。别名使用 AS 关键字定义,也可以直接跟在列名后面。

6. FROM 子句

  • 用法:指定要从中检索数据的表或视图。
  • 目的:定义查询的数据来源。如果指定了多个表,则表示进行连接操作。
  • 别名用法:可以为表使用别名,以简化查询或提高可读性。别名在表名后立即定义。

1.3 WHERE子句

WHERE 子句用于对查询结果进行筛选,只有符合条件的行才会被检索出来。你可以使用多种比较操作符和特殊 SQL 操作符来构造 WHERE 子句的条件.

1.3.1 比较操作符

  • = (等于):检查字段是否等于指定的值
  • !=  和  ^=  和  <> (不等于):检查字段是否不等于指定的值
  • > (大于)  和 >=(大于等于) 和 <(小于) 和 <=(小于等于)

1.3.2 特殊SQL操作符

  • BETWEEN low AND high 包含范围:  检查字段是否在指定的范围内(包括边界值)
  • IN (value1, value2, value3, ...): 在集合中, 检查字段是否匹配集合中的任一值。字符型值需要用单引号括起来。
  • LIKE 'string pattern' 模糊匹配: 使用 %_ 作为通配符来进行模糊匹配。% 代表任意数量的字符,_ 代表单个字符。
  • IS NULL 检查 NULL 值:检查字段是否为 NULL。NULL 表示字段没有值。
  • NOT:用来取反上述所有条件。比如:NOT IN、NOT BETWEEN等

1.3.3 多条件搜索(逻辑运算符)

ANDOR 逻辑运算符在 SQL 查询中非常重要,它们用于组合多个条件来筛选数据。

  • AND:只有当所有条件都为真时,才会选中行。
  • OR:只要其中一个条件为真,就会选中行。
  • AND 的优先级高于 OR

二、THE ORDER BY CLAUSE【排序子句】

在 Oracle 数据库中,ORDER BY 子句用于对查询结果进行排序。默认情况下,Oracle 会以无序的方式显示数据,因此需要使用 ORDER BY 子句来指定排序的规则。ORDER BY 子句应始终放在查询的最后部分。

2.1 ORDER BY子句基本用法

  • 默认排序顺序

    • 数字(NUMERICS):按数值的升序排序(从小到大)。
    • 日期(DATES):按时间的升序排序(从早到晚)。
    • 字符(CHAR):按字母的升序排序(从 A 到 Z)。
  • 降序排序

    • DESC:使用 DESC 关键字可以将排序顺序反转,进行降序排序(从大到小)。
  • NULL 值的排序

    • 在排序中,NULL 值通常排在所有非 NULL 值的前面(在升序排序时)或后面(在降序排序时)。

2.2 排序顺序的注意事项

  • 多列排序:可以在 ORDER BY 子句中指定多个列,每个列之间用逗号分隔。例如,ORDER BY job, sal DESC
  • 默认排序:没有指定 ASCDESC 时,默认是升序(ASC)。
  • 排序列的使用:可以使用列的名字或者列的索引(在 ORDER BY 中列的位置索引)。

三、JOINING TABLES 【连接表格】

3.1 连接表

在某些查询中,需要连接两个或更多的表。这通过在两个表之间建立一个关系(通常是等式关系)来完成,这个关系通常是通过外键来实现的。简单的连接通常称为等值连接。当在 FROM 子句中引用多个表时,会自动执行连接。

SELECT ename, sal, loc 
FROM emp, dept
WHERE ename = 'ALLEN'  -- 搜索条件
AND emp.deptno = dept.deptno;  -- 连接条件

此查询从 EMP 表中查找名为 'ALLEN' 的员工的姓名和薪水,并从 DEPT 表中获取 'ALLEN' 所在部门的地点。

3.2 缩写表名

表名可以缩写,以简化查询输入。在下面的示例中,EDempdept 的缩写名。

SELECT D.name, E.* 
FROM emp E, dept D
WHERE E.deptno = D.deptno 
AND loc = 'LUTON'
ORDER BY E.deptno;

3.3 自连接

表标签不仅可以用来缩写表名,还可以用来将一个表连接到它自身,就像将其视为两个独立的表一样。这在只需通过一次 SELECT 查询完成比较时非常有用。

SELECT WORKER.ename, WORKER.sal 
FROM emp WORKER, emp MANAGER
WHERE WORKER.deptno = MANAGER.deptno
AND WORKER.sal > MANAGER.sal;

在这个查询中,emp 表被当作两个独立的表来处理,一个是 WORKER,另一个是 MANAGER。首先通过 WORKER 的部门编号(WORKER.deptno)和 MANAGER 的部门编号(MANAGER.deptno)将所有的 WORKER 连接到同部门的 MANAGER 上。WHERE 子句找出了同部门中员工薪资高于经理的那部分员工。

3.4 选择所有可能的行组合

如果 WHERE 子句中不包含连接条件,则会显示所有可能的行组合。结果(笛卡尔积)通常是不希望的,因此通常会指定一个连接条件。这是一个常见的错误,应当避免,因为如果表 A 有 20 行,表 B 有 30 行,那么不使用连接条件将导致 600 行输出结果。

-- 将 EMP 表中的 'ALLEN' 行与 DEPT 表中的所有行连接
SELECT ename, loc 
FROM emp, dept
WHERE ename = 'ALLEN';

3.5 外连接

在处理 empdept 表之间的连接时,你会发现部门 40 的详细信息从未出现在输出中。这是因为部门 40 在 emp 表中没有对应的行,因此无法参与连接。如果需要包含表之间关系之外的记录,则必须使用外连接。

SELECT dept.deptno, dname, ename, sal 
FROM dept 
LEFT OUTER JOIN emp ON dept.deptno = emp.deptno;

左外连接实际上会为 emp 表中没有对应员工的每个部门记录添加一个虚拟行。然后,这个部门记录会与这个虚拟行连接,并在输出中出现一次,而 emp 表中的任何列都将为 NULL。

四、SQL函数 

在 SQL中,提供了广泛的函数可以应用于 Oracle 数据。这些函数分为四类:

  1. 字符串函数:用于搜索和操作字符串。
  2. 算术函数:用于对数值进行计算。
  3. 日期函数:用于重新格式化和进行日期计算。
  4. 日期函数:用于重新格式化和进行日期计算。

4.1 字符串函数

  • LOWER(string)
    将大写字母转换为小写字母。其他字符不受影响。

SELECT LOWER('MR. SAMUEL HILLHOUSE') FROM DUAL;
-- 结果: mr. samuel hillhouse
  • UPPER(string)
    将小写字母转换为大写字母。

SELECT UPPER('Mr. Rodgers') FROM DUAL;
-- 结果: MR. RODGERS
  • SUBSTR(string, startposition, length)
    显示从指定位置开始的字符串的一部分,长度为指定值。

SELECT SUBSTR('ABCDEF', 2, 3) FROM DUAL;
-- 结果: BCD
  • INSTR(string1, string2)
    查找一个字符串在另一个字符串中的起始位置。

SELECT INSTR('ABCDEF', 'DEF') FROM DUAL;
-- 结果: 4
  • STR_TO_DATE(string, [format])
    将字符串转换为日期。可以选择性地指定格式。

SELECT STR_TO_DATE('12-06-1996', '%d-%m-%Y') FROM DUAL;
  • LPAD(str, len, padstr)
    用指定的填充字符将字符串左侧填充到指定长度。

SELECT LPAD('hi', 4, '??') FROM DUAL;
-- 结果: ??hi
  • RPAD(str, len, padstr)
    用指定的填充字符将字符串右侧填充到指定长度。

SELECT RPAD('hi', 4, '??') FROM DUAL;
-- 结果: hi??
  • LTRIM(string)
    返回去除前导空格的字符串。

SELECT LTRIM('   barbar') FROM DUAL;
-- 结果: barbar
  • RTRIM(string)
    返回去除尾随空格的字符串。

SELECT RTRIM('barbar   ') FROM DUAL;
-- 结果: barbar
  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM ] str)
    返回去除给定字符串中所有前缀或后缀的字符串。

SELECT TRIM('a' FROM 'aaaabcaaa') FROM DUAL;
-- 结果: bc
  • IFNULL(expression1, expression2)
    如果第一个表达式不为 NULL,则返回第一个表达式。否则,返回第二个表达式。

SELECT IFNULL(Comm, 0) FROM EMP;
  • LENGTH(char)
    返回指定字符串的字符长度。

SELECT LENGTH('Anderson') FROM DUAL;
-- 结果: 8

4.2 算术函数

  • ABS(numeric)
    返回数字的绝对值。

SELECT ABS(-15) AS "Absolute" FROM DUAL;
-- 结果: 15
  • MOD(num1, num2)
    返回 num1 除以 num2 的余数。

SELECT MOD(7, 5) AS "Modulo" FROM DUAL;
-- 结果: 2
  • ROUND(numeric[, d])
    将数字四舍五入到 d 位小数。可以选择四舍五入到小数点的两边。

SELECT ROUND(15.193, 1) AS "Round" FROM DUAL;
-- 结果: 15.2
  • TRUNCATE(numeric[, d])
    截断数字到 d 位小数,不进行四舍五入。

SELECT TRUNCATE(15.79, 1) AS "Truncate" FROM DUAL;
-- 结果: 15.7
  • CEIL(numeric)
    向上取整到最接近的整数。

SELECT CEIL(10.6) FROM DUAL;
-- 结果: 11
  • FLOOR(numeric)
    向下取整到最接近的整数。

SELECT FLOOR(10.6) FROM DUAL;
-- 结果: 10
  • SQRT(numeric)
    返回数字的平方根。如果数字为负,返回 NULL。

SELECT SQRT(25) FROM DUAL;
-- 结果: 5
  • TO_CHAR(numeric[, format])
    将数字转换为字符字符串,并按照指定的格式进行格式化。

SELECT TO_CHAR(1234.5678, '9999.99') FROM DUAL;
-- 结果: 1234.57
  • DATE_FORMAT(date, format)(MySQL 特有)
    按照指定格式将日期格式化为字符串。

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') FROM DUAL;
-- 结果: 2024-09-11 14:30:45

4.3 聚合函数

  • AVG([DISTINCT] Column)
    计算列中所有值的平均值。DISTINCT 用于去除重复值。

SELECT AVG(sal) AS "AverageSalary" FROM emp;
  • COUNT(*)
    计算表中的总行数,包括 NULL 值。

SELECT COUNT(*) AS "TotalEmployees" FROM emp;
  • COUNT(column-name)
    计算指定列中非 NULL 值的数量。

SELECT COUNT(sal) AS "NonNullSalaries" FROM emp;
  • COUNT(DISTINCT column-name)
    计算指定列中唯一非重复值的数量。

SELECT COUNT(DISTINCT job) AS "UniqueJobs" FROM emp;
  • MAX(column)
    返回指定列中的最大值。

SELECT MAX(sal) AS "HighestSalary" FROM emp;
  • MIN(column)
    返回指定列中的最小值。

SELECT MIN(sal) AS "LowestSalary" FROM emp;
  • SUM(expression)
    计算指定表达式的总和。

SELECT SUM(sal + COALESCE(comm, 0)) AS "TotalEarnings" FROM emp WHERE job = 'SALESMAN';

4.4 日期函数

  • DATE_FORMAT (date, format)  这个函数用于将日期按照指定的格式进行显示。
SELECT DATE_FORMAT(now(), '%Y-%m-%d'); 
-- 将返回当前的日期,格式为“年-月-日”。
  • DATE_ADD (start_date, INTERVAL expr unit) 这个函数用于在日期或时间戳上加上一个指定的时间间隔。你可以指定间隔的单位,如天、小时、分钟等。
SELECT DATE_ADD(now(), INTERVAL 1 DAY); 
-- 将返回当前日期加上一天的结果。
  • TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2) 用于计算两个日期或时间戳之间的差异,并返回以指定单位表示的结果。
SELECT TIMESTAMPDIFF(YEAR, HIREDATE, now()) FROM emp; 
-- 将返回员工入职年份到现在年份的差值。
  • LAST_DAY(date)  这个函数接受一个日期或时间戳作为参数,并返回该月份的最后一天的日期。如果输入的日期无效,则返回NULL。
SELECT LAST_DAY(NOW()); 
-- 将返回当前月份最后一天的日期。
  • DATE(expr)  这个函数用于从日期或时间戳表达式中提取日期部分。如果表达式包含时间信息,时间部分将被忽略。
SELECT DATE('2003-12-31 01:02:03'); 
-- 将返回“2003-12-31”。
  • DATE_FORMAT(date, format)  此函数在前面的解释中已经提及,但这里再次强调其格式字符串的多样性。你可以使用不同的格式字符串来定制日期的显示方式
  • %Y-%m-%d 将会显示为“年-月-日”
  • %a %b %e %Y 将会显示为“缩写星期名 缩写月份名 日 年”(如 Thu Jul 4 2019)
  • %H:%i:%s 将会显示为“小时:分钟:秒”

补充:各种日期格式汇总

DATE_FORMAT string

Formatted date

%Y-%m-%d

7/4/2019

%e/%c/%Y

4/7/2019

%c/%e/%Y

7/4/2019

%d/%m/%Y

4/7/2019

%m/%d/%Y

7/4/2019

%e/%c/%Y %H:%i

4/7/2019 11:20

%c/%e/%Y %H:%i

7/4/2019 11:20

%d/%m/%Y %H:%i

4/7/2019 11:20

%m/%d/%Y %H:%i

7/4/2019 11:20

%e/%c/%Y %T

4/7/2019 11:20

%c/%e/%Y %T

7/4/2019 11:20

%d/%m/%Y %T

4/7/2019 11:20

%m/%d/%Y %T

7/4/2019 11:20

%a %D %b %Y

Thu 4th Jul 2019

%a %D %b %Y %H:%i

Thu 4th Jul 2019 11:20

%a %D %b %Y %T

Thu 4th Jul 2019 11:20:05

%a %b %e %Y

Thu Jul 4 2019

%a %b %e %Y %H:%i

Thu Jul 4 2019 11:20

%a %b %e %Y %T

Thu Jul 4 2019 11:20:05

%W %D %M %Y

Thursday 4th July 2019

%W %D %M %Y %H:%i

Thursday 4th July 2019 11:20

%W %D %M %Y %T

Thursday 4th July 2019 11:20:05

%l:%i %p %b %e, %Y

7/4/2019 11:20

%M %e, %Y

4-Jul-19

%a, %d %b %Y %T

Thu, 04 Jul 2019 11:20:05

五、THE GROUP BY CLAUSE 【分组子句】

5.1 GROUP BY基本概念

GROUP BY 子句用于将表中的行分割成组或子集,然后可以对这些记录组执行汇总计算。分组是基于列(或列集)中的匹配值进行的。

  • 作用:将表中的行分成多个组或子集,以便对这些组进行汇总计算。
  • 分组依据:基于一列或多列中的匹配值进行分组。
  • 输出:每个组只呈现一行输出。

5.2 使用示例

SELECT deptno, AVG(sal)   
FROM emp  
GROUP BY deptno;

这个查询将员工表(emp)按照部门编号(deptno)分组,并计算每个部门的平均薪水(AVG(sal))

5.3 GROUP BY规则

  1. SELECT 列表限制:SELECT 列表中只能包含聚合函数(如 MAX(sal), COUNT(empno))和 GROUP BY 子句中指定的列。
  2. 位置:GROUP BY 子句必须放在 WHERE 子句之后(如果有的话)。
  3. 通常选择:通常 SELECT 列表中会包含 GROUP BY 子句中指定的列,以便为计算结果提供标签。
  4. 默认分组:如果没有指定 GROUP BY 子句,则整个表被视为一个组,聚合函数将应用于整个表。

5.4 多列分组

可以基于多个列的值进行分组,例如同时按部门和职位对员工进行分组。

SELECT deptno, job, COUNT(*), AVG(sal)  
FROM emp  
GROUP BY deptno, job;

5.5 WHERE 和 GROUP BY 结合使用

WHERE 子句用于在分组前过滤行,而 GROUP BY 子句用于将过滤后的行分组。

SELECT deptno, AVG(sal)   
FROM emp  
WHERE job NOT IN ('MANAGER', 'PRESIDENT')  
GROUP BY deptno;

六、THE HAVING CLAUSE 【Having子句】

6.1 HAVING 的基本概念

  • 作用:与 WHERE 子句类似,但 HAVING 子句用于过滤分组后的结果集,即基于组的聚合值进行过滤。
  • 位置:HAVING 子句通常放在 GROUP BY 子句之后,ORDER BY 子句之前(如果有的话)。

6.2 使用示例

这个查询列出了员工数超过 2 人的职位,并计算了每个职位的员工数和平均薪水。

SELECT job, COUNT(*), AVG(sal)   
FROM emp  
GROUP BY job  
HAVING COUNT(*) > 2;

6.3 HAVING 与 WHERE 的区别

  • WHERE:在分组前过滤行。
  • HAVING:在分组后过滤组,基于聚合值。

6.4 复杂示例

SELECT deptno, job, COUNT(empno), SUM(sal)  
FROM emp  
WHERE hiredate > '01-JAN-90'  
GROUP BY deptno, job  
HAVING COUNT(empno) > 2  
ORDER BY deptno DESC, JOB;

这个查询列出了 1990 年 1 月 1 日之后入职的、每个部门中每个职位的员工数和薪水总和,但只包括员工数超过 2 人的组,并按部门编号降序和职位排序。

6.5  HAVING 子句中的子查询

HAVING 子句中可以包含子查询,用于将当前组的聚合值与另一个查询的结果进行比较。

SELECT job, AVG(sal)   
FROM emp  
GROUP BY job  
HAVING AVG(sal) > (SELECT AVG(sal) FROM emp WHERE job = 'MANAGER');

这个查询列出了平均薪水高于所有经理平均薪水的职位。

相关文章:

【数据库】详解基本SQL语句用法

一、SELECTING DATA FROM TABLES【查询数据】 SELECT命令是表上所有查询的基础&#xff0c;因此给出它的完整描述以显示它的功能。在描述之后提供各种格式的示例。 1.1 整体描述 SELECT column1, column2, ... FROMtable1 [INNER | LEFT | RIGHT] JOIN table2 on conditions…...

R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析

在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能处理空间异质性&#xff0c;因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法&#xff1a;经典地理加权回归&#xff0c;…...

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中…...

JavaScript中的控制流语句:break、continue、return、throw

在JavaScript编程中&#xff0c;控制流语句是控制代码执行流程的重要工具。这些语句包括break、continue、return和throw&#xff0c;它们可以在循环、函数以及其他代码块中使用&#xff0c;以改变正常的执行顺序。下面我们将逐一探讨这些语句的用途和示例。 break break语句…...

移动通信为啥要用双极化天线?

❝本文简单介绍下移动通信为啥要用双极化天线及其简单概述。 移动通信为啥要用双极化天线&#xff1f; - RFASK射频问问❝本文简单介绍下移动通信为啥要用双极化天线及其简单概述。什么是极化&#xff1f;电磁波的极化通常是用其电场矢量的空间指向来描述&#xff1a;在空间某…...

C语言从头学59——学习头文件math.h(二)

继续学习头文件<math.h>&#xff0c;编号接续前文。 六、三角函数 math.h中的三角函数包括&#xff1a; acos()&#xff1a;反余弦&#xff0c;参数范围-1至1&#xff0c;返回值double类型&#xff1a;0~PI asin()&#xff1a;反正弦&#xff0c;参…...

Leetcode 3283. Maximum Number of Moves to Kill All Pawns

Leetcode 3283. Maximum Number of Moves to Kill All Pawns 1. 解题思路2. 代码实现 题目链接&#xff1a;3283. Maximum Number of Moves to Kill All Pawns 1. 解题思路 这一题坦率地说没有想到什么好的思路&#xff0c;因此只能非常暴力地按照题意进行了一下构造。 显然…...

智能物流新“黑神话”:各位“天命人”,这份行业应用锦集请收下!

全球工业革新浪潮中&#xff0c;智能物流正成为制造业转型升级的核心驱动力之一。高柔性的智能物流解决方案可以帮助企业应对复杂的物流挑战&#xff0c;实现生产到仓储全过程的智能化、柔性化和高度集成&#xff0c;带来显著的经济效益。 作为行业领先的全场景柔性物流综合解…...

SpringSecurity原理解析(五):HttpSecurity 类处理流程

1、SpringSecurity 在spring boot中与SSM项目中基于配置文件的区别 通过前边的笔记我们可以知道&#xff0c;在传统的SSM项目中 SpringSecurity的使用是基于配置文件 的&#xff0c;然后spring 容器初始化的时候将 SpringSecurity 中的各种标签解析成对应的Bean对象&#xff0c…...

C++系列-匿名对象

匿名对象 &#x1f4a2;什么是匿名对象&#x1f4a2;匿名对象的创建方式及作用域&#x1f4a2;匿名对象的对象类型&#x1f4a2;&#x1f4a2;匿名的基本数据类型对象&#x1f4a2;&#x1f4a2;匿名的自定义的类类型对象&#x1f4a2;&#x1f4a2;匿名的标准库的类对象 &…...

tofixed和math.round什么区别

1、floor 返回不大于的最大整数&#xff08;向下取整&#xff09; 2、round 则是4舍5入的计算&#xff0c;入的时候是到大于它的整数&#xff08;当-1.5时可见&#xff0c;四舍五入后得到的结果不是我们期待的&#xff0c;解决办法是先对他取绝对值&#xff0c;然后在用round方…...

OPENAIGC开发者大赛高校组金奖 | 基于混合大语言模型与多模态的全过程通用AI Agent

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

MySql批量迁移数据库

导出数据库 将指定数据库实例&#xff08;MYSQL_HOST、MYSQL_PORT、MYSQL_USER、MYSQL_PASSWORD&#xff09;中的所有数据库&#xff08;表结构、数据&#xff09;导出到指定目录&#xff08;BACKUP_DIR&#xff09;下的多个单独的SQL脚本&#xff0c;每个SQL脚本名称即为数据…...

一、selenium自动化简介selenium工具集

文章目录 一、简介二、组成部分三、selenium工具集3.1 Selenium IDE3.2 Selenium WebDriver3.3 Selenium Grid3.4 Appium 一、简介 官方网站 Selenium 是支持 web 浏览器自动化的一系列工具和库的综合项目。 它提供了扩展来模拟用户与浏览器的交互&#xff0c;用于扩展浏览器分…...

CCF推荐B类会议和期刊总结:(计算机网络领域)

CCF推荐B类会议和期刊总结&#xff08;计算机网络领域&#xff09; 在计算机网络领域&#xff0c;中国计算机学会&#xff08;CCF&#xff09;推荐的B类会议和期刊代表了该领域的较高水平。以下是对所有B类会议和期刊的总结&#xff0c;包括全称、出版社、dblp文献网址以及所属…...

[Web安全 网络安全]-文件包含漏洞

文章目录&#xff1a; 一&#xff1a;前言 1.什么是文件包含漏洞 2.文件包含漏洞的成因 3.文件包含漏洞的分类 4.文件包含漏洞的防御策略 5.文件包含函数&#xff08;触发点Sink&#xff09; 6.环境 6.1 靶场 6.2 其他工具 二&#xff1a;文件包含LFI labs靶场实验…...

使用soui4实现一个拾色器

拾色器类 #pragma once class CClrPickerCtrl : public SWindow {DEF_SOBJECT(SWindow, L"clrpicker") public:CClrPickerCtrl(void);~CClrPickerCtrl(void);//跟solider控件设置色调void SetSliderPos(int nPos);//获取选取位置的颜色COLORREF GetColor(); protect…...

Thinkphp5 + Swoole实现邮箱异步通知

在 ThinkPHP 中实现邮箱异步通知的常见做法是通过队列系统来处理异步任务&#xff0c;结合 Swoole 来处理异步发送邮件的请求。这样可以避免同步处理邮件发送导致的阻塞&#xff0c;提高响应速度。 以下是基于 ThinkPHP5 框架和 Swoole 的异步邮件通知实现步骤&#xff1a; 一…...

LLM - 理解 多模态大语言模型 (MLLM) 的预训练与相关技术 (三)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/142063880 免责声明&#xff1a;本文来源于个人知识与公开资料&#xff0c;仅用于学术交流&#xff0c;欢迎讨论&#xff0c;不支持转载。 完备(F…...

工具篇之Joda-Time

在Java应用程序开发中&#xff0c;处理日期和时间是一项常见且复杂的任务。尽管Java标准库提供了基本的日期和时间操作类&#xff0c;但它们的使用常常不够直观和灵活。Joda-Time 是一个强大的日期和时间库&#xff0c;提供了丰富的API&#xff0c;用于简化日期和时间的操作。本…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...