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

sql专题 之 常用命令

文章目录

  • 查询
    • 基础语法
      • 查询
        • 全表查询
        • 选择查询:
        • 常量和运算:
      • 条件查询
        • where
        • 运算符:=、 !=、<、>
        • 空值:null
        • 模糊查询:like
        • 逻辑运算:and or not
      • 去重:distinct
      • 排序:order by
      • 截断和偏移:limit offset
      • 条件分支:case when then end
    • 函数
      • 查询奇偶
      • 时间函数
      • 字符串处理
      • 聚合函数:sum、avg、count、max、min
    • 分组聚合
      • 单字段分组:group by
      • 多字段分组
      • having子句
    • 查询进阶
      • 关联查询
        • cross join
        • inner join ... on
        • outer join ... on:left join 和 right join
      • 子查询
        • 嵌套查询
        • exists
      • 组合查询
      • 开窗函数
        • sum over(partition by ...)
        • sum over by order by
        • rank() over(partition by ... order by ...)
        • row_number()
        • lag & lead
  • 添加
  • 修改
  • 删除

查询

我们先来常见一个student表,表中的字段及数据如下图:
在这里插入图片描述

基础语法

查询

全表查询
# 查询student表的所有信息
select * from student
选择查询:
# 选取所有学生的姓名(name)和年龄(age)信息,并为它们取别名为 学生姓名 和 学生年龄。
select name as 学生姓名,age as 学生年龄 from student
常量和运算:
# 查询student的数据表中所有学生的姓名(name)和分数(score),并且额外计算出分数的 2 倍(double_score)
select name,score,score*2 as double_score from student

条件查询

where

使用where子句在查询中设置过滤条件,只有满足条件的数据行才会被返回。

# 从student 表中选择出所有学生的姓名(name)和成绩(score),要求学生姓名为 '韩梅梅'
select name,score from student where name='韩梅梅'
运算符:=、 !=、<、>

SQL 中用于在条件查询中进行条件判断的特殊符号,如 =、 !=、<、> 等均为运算符

# 从student 的表中选择出所有学生的姓名(name)和年龄(age),要求学生姓名不等于 '韩梅梅' 
select name,age from student where name!='韩梅梅'
空值:null

在数据库中,有时候数据表的某些字段可能没有值,即为空值(NULL)。
空值表示该字段的值是未知的、不存在的或者没有被填写的。
在SQL查询中,我们可以使用 “IS NULL” 和 “IS NOT NULL” 来判断字段是否为空值或非空值

# 从student 的表中选择出所有学生的姓名(name)、年龄(age)和成绩(score),要求学生年龄不为空值
select name,age,score from student where age is not null
模糊查询:like

模糊查询使用的是like关键字,结合通配符来代表0个或多个字符,从而快速的查询到需要的数据。
百分号[%]:表示任意长度的任意字符序列
下划线[_]:表示任意单个字符

# 从student 表中选择出所有学生的姓名(name)和成绩(score),要求姓名(name)不包含 "李" 这个字
select name,score from student where name not like '%李%'
# 从student 表中选择出所有学生的姓名(name)和成绩(score),要求姓名(name)第二个子为"云" 
select name,score from student where name like '_云%'
逻辑运算:and or not

逻辑运算允许我们结合多个条件来过滤出符合特定条件的数据。
常用的运算符有:
and:表示逻辑与,要求同时满足多个条件,才返回 true。
or:表示逻辑或,要求满足其中任意一个条件,就返回 true。
not:表示逻辑非,用于否定一个条件(本来是 true,用了 not 后转为 false)

#  从 student 表中选择出所有学生的姓名(name)、成绩(score),要求学生的姓名包含 "李",或者成绩(score)大于 500。
select name,score from student 
where name like '%李%' or score>500

去重:distinct

针对数据表中重复的数据记录,我们可以使用 DISTINCT 关键字来实现去重操作。

# 从名为 student 的数据表中选择出所有不重复的班级 ID(class_id)和考试编号(exam_num)的组合。
select distinct class_id,exam_num from student

排序:order by

在 SQL 中,我们可以使用 ORDER BY 关键字来实现将结果按照某个字段的值进行排序。
关键字是:order by + 排序字段
可以选择升序(asc)或降序(desc)排列。默认是升序

# 从名为 student 的数据表中选择出学生姓名(name)、年龄(age)和成绩(score),首先按照成绩从大到小排序,如果成绩相同,则按照年龄从小到大排序。
select name,age,score from student
order by score desc,age

截断和偏移:limit offset

只想查看部分数据时,我们使用 limit 关键字来实现数据的截断和偏移。
limit 后只跟一个整数,表示要截断的数据条数(一次获取几条)
limit 后跟 2 个整数,依次表示从第几条数据开始、一次获取几条

# 从名为 student 的数据表中选择学生姓名(name)和年龄(age),按照年龄从小到大排序,从第 2 条数据开始、截取 3 个学生的信息。
select name,age from student order by age limit 3 offset 1
select name,age from student order by age limit 1,3

如果使用offset则表示跳过的内容,即 limit 1,3 等同于 limit 3 offset 1

条件分支:case when then end

case when 可以在查询结果中根据特定的条件动态生成新的列或对现有的列进行转换
示例语法:
case when (条件1) then 结果1
when (条件2) then 结果2

else 其他结果 end

# 将学生按照年龄划分为三个年龄等级(age_level):60 岁以上为 "老同学",20 岁以上(不包括 60 岁以上)为 "年轻",20 岁及以下、以及没有年龄信息为 "小同学"。返回结果应包含学生的姓名(name)和年龄等级(age_level),并按姓名升序排序
select name,
case when(age>60) then '老同学' when(age>20) then '年轻' else'小同学' end as age_level 
from student
order by name
  • 来力扣做个小练习吧 :610. 判断三角形

函数

查询奇偶

时间函数

常用的时间函数有:
DATE:获取当前日期
DATETIME:获取当前日期时间
TIME:获取当前时间

获取当前日期:SELECT DATE() AS current_date;
获取当前日期时间:SELECT DATETIME() AS current_datetime;
获取当前时间:SELECT TIME() AS current_time;

# 展示所有学生的姓名(name)和当前日期(列名为 "当前日期")
select name,Date() as 当前日期
from student

字符串处理

使用函数 UPPER 将数据转换为大写
使用字符串处理函数 LENGTH 计算长度
使用函数 LOWER 将数据转换为小写

# 筛选出姓名为 '热dog' 的学生,展示其学号(id)、姓名(name)及其大写姓名(upper_name)及姓名长度。
select id,Upper(name) as upper_name,length(name)
from student
where name='热dog'

聚合函数:sum、avg、count、max、min

聚合函数是一类用于对数据集进行 汇总计算 的特殊函数。它们可以对一组数据执行诸如计数、求和、平均值、最大值和最小值等操作。通常在 SELECT 语句中配合 GROUP BY 子句使用,用于对分组后的数据进行汇总分析。

常见的聚合函数包括:
count:计算指定列的行数或非空值的数量。
sum:计算指定列的数值之和。
avg:计算指定列的数值平均值。
max:找出指定列的最大值。
min:找出指定列的最小值。

# 汇总学生表中所有学生的总成绩(total_score)、平均成绩(avg_score)、最高成绩(max_score)和最低成绩(min_score)。
select 
sum(score) as total_score,avg(score) as avg_score,
max(score) as max_score,min(score) as min_score
from student

分组聚合

单字段分组:group by

分组聚合允许我们按照指定的列或字段对数据进行分组,然后对每个分组应用聚合函数。
通常使用 GROUP BY 关键字对数据进行分组

# 统计学生表中的班级编号(class_id)和每个班级的平均成绩(avg_score)
select class_id,avg(score) as avg_score
from student
group by class_id

多字段分组

多字段分组和单字段分组的实现方式几乎一致,使用 GROUP BY 语法即可

# 统计学生表中的班级编号(class_id),考试次数(exam_num)和每个班级每次考试的总学生人数(total_num)
select class_id,exam_num,count(*) as total_num
from student
group by class_id,exam_num

having子句

having子句用于在分组聚合后对分组进行过滤,即对分组后的结果进行条件筛选

having与where的区别:where用于在分组前进行筛选,having用于在分组后进行筛选

# 统计学生表中班级的总成绩超过 150 分的班级编号(class_id)和总成绩(total_score)。
select class_id,sum(score) as total_score from student
group by class_id
having sum(score)>150

查询进阶

(我们这时候需要多张表了)
学生表 student ,字段:id(学号)、name(姓名)、age(年龄)、class_id(班级编号)

班级表 class ,字段:id(班级编号)、name(班级名称)、level(班级级别)

关联查询

之前的查询操作都是在单个数据表中进行的。但有时,我们可能希望在单张表的基础上,获取更多额外数据,比如获取学生表中学生所属的班级信息等。这时,就需要使用关联查询。

cross join

CROSS JOIN 是一种简单的关联查询,不需要任何条件来匹配行,它直接将左表的 每一行 与右表的 每一行 进行组合,返回的结果是两个表的笛卡尔积

在多表关联查询的 SQL 中,我们最好在选择字段时指定字段所属表的名称(比如 e.emp_name),还可以通过给表起别名(比如 employees e)来简化 SQL 语句

# 将学生表和班级表的所有行组合在一起,并返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)以及班级名称(class_name)
select 
s.name as student_name,
s.age as student_age,
s.class_id as class_id,
c.name as class_name
from student as s cross join class as c

student as s cross join class as c
可以等比替换为:student as s ,class as c

inner join … on

INNER JOIN 只返回两个表中满足关联条件的交集部分,即在两个表中都存在的匹配行

# 根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)、班级名称(class_name)、班级级别(class_level)
select 
s.name as student_name,s.age as student_age,s.class_id as class_id,
c.name as class_name,c.level as class_level
from student as s inner join class as c on s.class_id = c.id
outer join … on:left join 和 right join

OUTER JOIN 根据指定的关联条件,将两个表中满足条件的行组合在一起,并 包含没有匹配的行 。
left join:以左表为基础查询,左表可以有未匹配的行
right join:以右表为基础查询,右表可以有未匹配的行

# 根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)、班级名称(class_name)、班级级别(class_level),要求必须返回所有学生的信息(即使对应的班级编号不存在)
select 
s.name as student_name,s.age as student_age,s.class_id as class_id,
c.name as class_name,c.level as class_level
from student s left join class c on s.class_id = c.id

子查询

子查询是指在一个查询语句内部嵌套另一个完整的查询语句,内层查询被称为子查询。
子查询可以用于获取更复杂的查询结果或者用于过滤数据。
当执行包含子查询的查询语句时,数据库引擎会首先执行子查询,然后将其结果作为条件或数据源来执行外层查询。

嵌套查询
# 使用子查询的方式来获取存在对应班级的学生的所有数据,返回学生姓名(name)、分数(score)、班级编号(class_id)字段。
select name,score,class_id
from student
where class_id in 
(select idfrom class
)
exists

“exists” 子查询,用于检查主查询的结果集是否存在满足条件的记录,它返回布尔值(True 或 False),而不返回实际的数据

# 使用 exists 子查询的方式来获取 不存在对应班级的 学生的所有数据,返回学生姓名(name)、年龄(age)、班级编号(class_id)字段
select name, age, class_id
from student
where not exists (select 1from classwhere class.id = student.class_id
)

组合查询

组合查询是一种将多个 SELECT 查询结果合并在一起的查询操作。
包括两种常见的组合查询操作:UNION 和 UNION ALL。
UNION 操作:它用于将两个或多个查询的结果集合并, 并去除重复的行 。即如果两个查询的结果有相同的行,则只保留一行。
UNION ALL 操作:它也用于将两个或多个查询的结果集合并, 但不去除重复的行 。即如果两个查询的结果有相同的行,则全部保留。

有一个新学生表 student_new,包含的字段和学生表完全一致

# 取所有学生表和新学生表的学生姓名(name)、年龄(age)、分数(score)、班级编号(class_id)字段,要求保留重复的学生记录select name,age,score,class_id
from student
union all
select name,age,score,class_id
from student_new

开窗函数

开窗函数是一种强大的查询工具,它允许我们在查询中进行对分组数据进行计算、 同时保留原始行的详细信息 。
开窗函数可以与聚合函数(如 SUM、AVG、COUNT 等)结合使用,但与普通聚合函数不同,开窗函数不会导致结果集的行数减少。
打个比方,可以将开窗函数想象成一种 “透视镜”,它能够将我们聚焦在某个特定的分组,同时还能看到整体的全景。

sum over(partition by …)

SUM(计算字段名) OVER (PARTITION BY 分组字段名)

# 返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并计算每个班级的学生平均分(class_avg_score)
select id,name,age,score,class_id,
avg(score) over(partition by class_id) as class_avg_score
from student
sum over by order by

sum over order by,可以实现同组内数据的 累加求和 。

# 返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数升序的方式累加计算每个班级的学生总分(class_sum_score)
select id,name,age,score,class_id,
sum(score) over(partition by class_id order by score) as class_sum_score
from student
rank() over(partition by … order by …)

Rank 开窗函数是 SQL 中一种用于对查询结果集中的行进行 排名 的开窗函数。它可以根据指定的列或表达式对结果集中的行进行排序,并为每一行分配一个排名。在排名过程中,相同的值将被赋予相同的排名,而不同的值将被赋予不同的排名。

语法规则:
rank() over (
partition by 列名1, 列名2, … – 可选,用于指定分组列
order by 列名3 [asc|desc], 列名4 [asc|desc], … – 用于指定排序列及排序方式
) as rank_column

# 返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数降序的方式计算每个班级内的学生的分数排名(ranking)
select id,name,age,score,class_id,
rank() over(partition by class_id order by score desc) as ranking
from student
row_number()

Row_Number 开窗函数是 SQL 中的一种用于为查询结果集中的每一行 分配唯一连续排名 的开窗函数。
Row_Number 函数为每一行都分配一个唯一的整数值,不管是否存在并列(相同排序值)的情况。每一行都有一个唯一的行号,从 1 开始连续递增。
Row_Number 开窗函数的语法如下(几乎和 Rank 函数一模一样):

# 返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数降序的方式给每个班级内的学生分配一个编号(row_number)
select id,name,age,score,class_id,
row_number() over(partition by class_id order by score desc) as row_number
from student
lag & lead
  • lag

    Lag 函数用于获取 当前行之前 的某一列的值。它可以帮助我们查看上一行的数据。

    语法:
    lag(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)

    • column_name:要获取值的列名。
    • offset:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。
    • default_value:可选参数,用于指定当没有前一行时的默认值。
    • PARTITION BY和ORDER BY子句可选,用于分组和排序数据。
  • lead

    Lead 函数用于获取 当前行之后 的某一列的值。它可以帮助我们查看下一行的数据。

    语法:
    lead(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY sort_column)

    • column_name:要获取值的列名。
    • offset:表示要向上偏移的行数。例如,offset为1表示获取上一行的值,offset为2表示获取上两行的值,以此类推。
    • default_value:可选参数,用于指定当没有前一行时的默认值。
    • PARTITION BY和ORDER BY子句可选,用于分组和排序数据。
# 返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数降序的方式获取每个班级内的学生的前一名学生姓名(prev_name)、后一名学生姓名(next_name)
select id,name,age,score,class_id,
lag(name,1,null) over(partition by class_id order by score desc) as prev_name,
lead(name,1,null) over(partition by class_id order by score desc) as next_name 
from student

添加

  • 语法
insert into table_name(1,2,...)
values(value1,value2,...)

修改

  • 语法
    UPDATE table_name
    SET column1 = value1, column2 = value2, ...
    WHERE condition;
    
    做个小练习吧 627. 变更性别

删除

  • 语法(如果省略where子句,则会删除表中的所有记录)
    delete from 表名 where 条件;
    

本文查询参考自 http://sql.easycode.top/#/learn

相关文章:

sql专题 之 常用命令

文章目录 查询基础语法查询全表查询选择查询&#xff1a;常量和运算&#xff1a; 条件查询where运算符&#xff1a;、 !、<、>空值&#xff1a;null模糊查询&#xff1a;like逻辑运算&#xff1a;and or not 去重&#xff1a;distinct排序&#xff1a;order by截断和偏移…...

Kubernetes Extended Resource 扩展资源使用简介

Kubernetes 除了提供基于 CPU 和内存的传统计算资源调度外&#xff0c;还支持自定义的 Extended Resource 扩展资源&#xff0c;以便调度和管理其它各种类型的资源。 Extended Resource Extended Resource 扩展资源的创建和使用过程如下图所示&#xff1a; 定义资源&#xff…...

基于STM32的天气时钟项目教学

引言 随着物联网技术的普及&#xff0c;基于STM32的微控制器被广泛应用于各种智能设备的开发。本项目旨在打造一个基于STM32的天气时钟&#xff0c;除了显示当前时间&#xff0c;还可以通过Wi-Fi获取当地天气信息&#xff0c;提供一个实用的生活工具。 环境准备 在开始项目之前…...

神经网络进行波士顿房价预测

前言 前一阵学校有五一数模节校赛&#xff0c;和朋友一起参加做B题&#xff0c;波士顿房价预测&#xff0c;算是第一次自己动手实现一个简单的小网络吧&#xff0c;虽然很简单&#xff0c;但还是想记录一下。 题目介绍 波士顿住房数据由哈里森和鲁宾菲尔德于1978年Harrison …...

C++builder中的人工智能(7)如何在C++中开发特别的AI激活函数?

在当今的AI开发中&#xff0c;人工智能模型正迅速增加。这些模型使用数学函数来执行和学习&#xff0c;以便在传播时优化最佳结果&#xff0c;或在反向传播时选择最佳解决方案。其中之一就是激活函数。也称为转移函数或阈值函数&#xff0c;它决定了神经元的激活值作为输出&…...

更改lvgl图片的分辨率(减少像素)达到减小内存占用的目的

lvgl的内存占比过大&#xff0c;更改图片的分辨率&#xff08;减少像素&#xff09;达到减小内存占用的目的&#xff0c;可以用更多的空间去开发其他的功能 -- 由于lvgl中图片占的内存过大&#xff0c;所以需要更改图片的分辨率&#xff08;降低像素的方式&#xff09; --注意…...

python的socket库的基本使用总目录

章节总目录 一、Python 实现UDP通讯的简单模型 二、Python 实现TCP通讯的简单模型 三、Python 实现TCP和UDP通讯代码的区别...

golang学习3

Go 语言之旅...

Python解力扣算法题(六)(详解+注释)

# 1.学校打算为全体学生拍一张年度纪念照。根据要求&#xff0c;学生需要按照 非递减 的高度顺序排成一行。 # 排序后的高度情况用整数数组 expected 表示&#xff0c;其中 expected[i] 是预计排在这一行中第 i 位的学生的高度&#xff08;下标从 0 开始&#xff09;。 # 给你一…...

【C++】继承和多态常见的面试问题

文章目录 继承笔试面试题1. 什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f;2. 什么是菱形虚拟继承&#xff1f;如何解决数据冗余和二义性&#xff1f;3. 继承和组合的区别&#xff1f;什么时候用继承&#xff1f;什么时候用组合&#xff1f; 选择题 多态概念考察…...

入门网络安全工程师要学习哪些内容(详细教程)

&#x1f91f; 基于入门网络安全/黑客打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火&#xff0c;这个行业因为国家政策趋势正在大力发展&#xff0c;大有可为!但很多人对网络安全工程师还是不了解&#xff0c;不知道网…...

【游戏引擎之路】登神长阶(十二)——DirectX11教程:If you‘re going through hell, keep going!

【游戏引擎之路】登神长阶&#xff08;十二&#xff09;——DirectX11教程&#xff1a;If youre going through hell, keep going! 2024年 5月20日-6月4日&#xff1a;攻克2D物理引擎。 2024年 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 2024年 6月13日-6月20日&#x…...

Python列表(一图秒了)

一、概念 所谓的列表是由一些列按照顺序存储的元素组成&#xff0c;区别于C语言中的数组&#xff0c;可以存储多种类型的数据&#xff0c;其中元素之间是没有任何关系的。 注意&#xff1a; 元素放在[]里面的&#xff0c;多个元素之间用 逗号 隔开列表的元素可以修改 定义 …...

雷池社区版 7.1.0 LTS 发布了

LTS&#xff08;Long Term Support&#xff0c;长期支持版本&#xff09;是软件开发中的一个概念&#xff0c;表示该版本将获得较长时间的支持和更新&#xff0c;通常包含稳定性、性能改进和安全修复&#xff0c;但不包含频繁的新特性更新。 作为最受欢迎的社区waf&#xff0c…...

推荐一款功能强大的数据库开发管理工具:SQLite Expert Pro

SQLite Expert Professional是一个功能强大的工具&#xff0c;旨在简化SQLite3数据库的开发。 它是SQLite的一个功能丰富的管理和开发工具&#xff0c;旨在满足所有用户从编写简单SQL查询到开发复杂数据库的需求。 图形界面支持所有SQLite功能。 它包括一个可视化查询构建器&a…...

动态规划 之 路径问题 算法专题

一. 不同路径 不同路径 状态表示 dp[i][j] 表示走到[i][j]位置, 有几种不同的路径状态转移方程 以离[i][j] 最近的位置划分问题 1.从[i - 1][j] 到[i][j], 到[i][j]位置的不同路径数 就是和 到[i - 1][j]位置的不同路径数相同, 即dp[i][j] dp[i - 1][j] 2.从[i][j - 1] 到[i…...

从office套件接入GPT4谈自动化测试的前景

微软前几天发布了集成了GPT-4模型的office套件&#xff0c;从演示视频看&#xff0c;大概可以做这样一些事情 输入指令自动做表输入指令写邮件输入指定自动做ppt&#xff0c;而且一做就是好多页&#xff0c;挺震撼的 稍微了解了一下原理&#xff0c;大概流程是 用户发送prom…...

CentOS操作系统安装过程简介

以下是在CentOS&#xff08;以CentOS 7为例&#xff09;中使用Anaconda安装器的一般步骤&#xff1a; 1. 准备工作 - 首先&#xff0c;需要获取CentOS 7的安装介质&#xff0c;可以是光盘或者制作好的USB启动盘。然后将计算机设置为从对应的安装介质启动。 2. 启动安装程序 -…...

基于Multisim光控夜灯LED电路(含仿真和报告)

【全套资料.zip】光控夜灯LED电路设计Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.采用纯数字电路&#xff0c;非单片机。 2.通过检测周围光线&#xff0c;光线暗且有声音时自动开灯…...

导师双选系统开发:Spring Boot技术详解

第一章 绪论 1.1 选题背景 如今的信息时代&#xff0c;对信息的共享性&#xff0c;信息的流通性有着较高要求&#xff0c;尽管身边每时每刻都在产生大量信息&#xff0c;这些信息也都会在短时间内得到处理&#xff0c;并迅速传播。因为很多时候&#xff0c;管理层决策需要大量信…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...