零基础学AI人工智能:2.DQL操作表数据

在第一篇内容中,我们已经搞定了SQL的两大基础模块:DDL数据定义语言(库表结构的搭建)、DML数据操作语言(数据的增删改)。而在人工智能开发的全流程中,80%以上的数据工作都围绕查询展开——训练数据集的筛选与提取、特征维度的统计与分析、模型效果的指标验证、脏数据的排查与清洗,核心都依赖SQL的DQL数据查询能力。

今天是SQL学习的第二天,我们将完整拆解DQL单表查询的全模块内容,从最基础的数据提取,到进阶的筛选、统计、分组、分页,把单表查询的底层逻辑和使用规则讲透,帮大家搭建起完整的SQL查询知识体系。

一、DQL的核心定位与完整执行逻辑

1.1 DQL的核心作用

DQL全称数据查询语言,是SQL中使用频率最高、功能覆盖最广的核心模块,唯一的作用就是从数据表中,提取、筛选、统计出我们需要的数据,不会对数据库、数据表的结构和原有数据造成任何修改,是数据处理、数据分析的核心工具。

1.2 单表查询的完整结构

一个完整的单表查询,有固定的书写结构,从上到下依次为:去重与列提取、数据来源表、组前筛选、分组字段、组后筛选、排序规则、分页限制。

每个部分各司其职,既可以组合使用完成复杂查询,也可以单独使用完成简单的数据提取。

1.3 SQL查询的执行顺序

绝大多数新手写查询出现错误,核心原因都是混淆了查询语句的书写顺序数据库的执行顺序。数据库并不会按照我们书写的顺序从上到下执行,而是有固定的执行优先级,顺序如下:

  1. 先确认数据来源:确定要从哪张数据表中提取数据
  2. 组前筛选:对全表数据进行第一轮过滤,剔除不符合基础条件的数据
  3. 数据分组:将筛选后的数据,按照指定的字段进行分类分组
  4. 组后筛选:对分组完成后的结果,进行第二轮过滤
  5. 列提取与去重:确定最终要展示的列,对列做运算、别名设置,以及剔除重复数据
  6. 结果排序:对最终的查询结果,按照指定规则进行排序
  7. 结果限制:对最终返回的数据行数做限制,完成分页处理

理解这个执行顺序,是写出正确、高效查询语句的核心基础,后续所有模块的使用规则,都围绕这个执行顺序展开。

二、简单查询:数据提取的基础能力

简单查询是所有查询的基础,不涉及数据筛选,仅用于从数据表中提取我们需要的列内容,核心分为4种常用场景。

2.1 全内容查询

全内容查询,即提取数据表中所有列的全部数据,一般仅用于测试环境查看表内的基础数据,不推荐在正式项目和AI数据处理中使用,避免因数据量过大、列数过多造成性能浪费。

2.2 指定列查询

指定列查询,即仅提取数据表中我们需要的某几列内容,是实际工作中最常用的基础查询方式。

优势在于可以精准提取目标数据,减少不必要的数据传输,提升查询效率,同时避免无关列的干扰,比如在AI特征工程中,我们仅需要提取和模型训练相关的特征列,就可以通过指定列查询完成。

2.3 列别名设置

在提取列的过程中,我们可以给原有的列名设置一个新的别名,别名不会修改数据表的原有列名,仅在本次查询的结果中生效。

别名的核心作用有两个:一是简化复杂的列名,提升查询结果的可读性;二是给经过运算、统计处理的列设置清晰的名称,明确列的含义。

2.4 列的运算处理

对于数值类型的列,我们可以在提取的过程中,直接对列的数值进行基础的运算处理,处理后的结果会作为新的列展示在查询结果中,不会修改表内的原有数据。

这个能力在AI数据处理中非常常用,比如对特征列做数值缩放、单位转换、多特征的基础组合计算,都可以通过列运算直接完成。

三、条件查询:精准筛选目标数据

条件查询是数据精准提取的核心,通过where关键字设置筛选规则,仅保留符合规则的数据行,剔除不符合要求的数据,是筛选训练样本、过滤脏数据的核心能力。

条件查询的筛选规则,分为5大类,覆盖绝大多数筛选场景。

3.1 比较运算筛选

比较运算筛选,是最基础的筛选方式,通过大于、小于、大于等于、小于等于、等于、不等于这6种规则,对列的数值进行比较,筛选出符合比较结果的数据。

常用于数值范围的基础筛选,比如筛选年龄在指定区间的用户样本、筛选数值大于阈值的特征数据。

3.2 范围匹配筛选

范围匹配筛选分为两种场景,分别对应连续区间和非连续区间的筛选:

  1. 连续区间筛选:用于筛选某一列的数值在一个连续的闭区间内的数据,包含区间的两个端点,比如筛选成绩在60分到90分之间的样本,替代多个比较运算的组合,简化书写逻辑。
  2. 非连续区间筛选:用于筛选某一列的数值在几个不连续的指定值中的数据,比如筛选城市为北京、上海、广州的样本,无需写多个等于条件的组合,提升筛选效率。

3.3 多条件逻辑组合

当我们需要同时设置多个筛选条件时,就需要通过逻辑运算符来组合条件,核心有3种逻辑规则:

  1. 且逻辑:多个条件必须同时全部满足,该行数据才会被保留,只要有一个条件不满足,就会被过滤掉。
  2. 或逻辑:多个条件中只要满足任意一个,该行数据就会被保留,只有所有条件都不满足时,才会被过滤掉。
  3. 非逻辑:对已有的筛选条件取反,原本符合条件的数据会被过滤,原本不符合条件的数据会被保留。

这里需要注意,且逻辑的优先级高于或逻辑,如果不确定优先级,可通过分组的方式明确执行顺序,避免筛选结果出错。

3.4 模糊匹配查询

模糊匹配查询,用于对文本类型的列进行内容匹配筛选,不需要完全匹配文本内容,仅通过通配符匹配部分内容即可完成筛选。

核心有两个通配符,分别对应不同的匹配场景:

  1. 单字符通配符:用于匹配任意1个字符,常用于固定长度的文本匹配,比如匹配手机号中间几位、昵称固定字数的内容。
  2. 多字符通配符:用于匹配任意数量的字符,数量可以是0个到无数个,是最常用的模糊匹配方式,比如匹配账号以指定内容开头、昵称包含指定关键词的样本。

3.5 空值校验筛选

空值校验筛选,用于筛选某一列的内容为空、或者不为空的数据,是数据清洗中最常用的能力之一。

这里有一个高频踩坑点:空值的判断有固定的专用规则,不能用等于、不等于的比较运算来判断空值,必须使用专用的空值、非空值判断规则,否则会出现筛选结果不符合预期的问题。

在AI数据处理中,我们经常需要通过非空校验,剔除特征列为空的脏样本,避免影响模型训练效果。

四、聚合查询:数据统计的核心工具

聚合查询是数据统计分析的核心,用于对一列的所有数据做纵向的聚合计算,最终返回一个统计结果,是AI数据统计、特征分布分析、指标计算的核心能力。

4.1 聚合查询的核心特点

聚合查询的核心特点是针对某一列做纵向操作,也就是对该列的所有行数据做统一的统计计算,不会单独关注某一行的数据,最终只会返回一个统计后的结果,不会返回明细数据。

4.2 常用聚合统计能力

常用的聚合统计能力,覆盖了绝大多数数据统计场景,具体如下:

  1. 计数统计:用于统计表内符合条件的数据总行数,是最常用的聚合能力,比如统计训练样本的总数量、某一类别的样本数量。
  2. 最大值统计:用于计算指定列中的最大值,如果是文本类型的列,则会按照字符串的排序规则返回结果,常用于统计特征的极值、样本的最大数值。
  3. 最小值统计:用于计算指定列中的最小值,和最大值统计规则一致,常用于统计特征的极值、样本的最小数值。
  4. 求和统计:用于计算指定数值列的所有数值之和,如果列不是数值类型,计算结果会为0,常用于统计样本的数值总和、特征的累计值。
  5. 平均值统计:用于计算指定数值列的平均值,结果可能是小数,常用于统计特征的均值、样本的平均数值,是特征工程中最常用的统计能力之一。

4.3 新手易混淆的统计细节

在计数统计中,有几种不同的写法,对应的统计逻辑完全不同,新手很容易混淆:

  1. 全表计数:会统计表内的总行数,不会忽略空值,哪怕某一行的所有列都为空,也会被统计进去,是最常用的计数方式,能准确统计样本的总行数。
  2. 固定值计数:和全表计数的效果一致,同样会统计所有行数,性能和全表计数基本无差别。
  3. 指定列计数:只会统计该列中非空值的行数,会忽略该列为空的行,如果需要统计某一列有有效内容的样本数量,适合用这种方式。

五、分组查询:分类统计的进阶能力

分组查询是单表查询的进阶能力,和聚合查询配合使用,可以实现分类别的数据统计,是分析数据分布、类别特征的核心工具。

5.1 分组查询的核心作用

分组查询的核心作用,是将数据表中的数据,按照我们指定的一个或多个字段进行分类,字段内容完全相同的行会被分到同一个组中,之后聚合函数就会针对每个分组单独做统计计算,最终每个分组都会返回一个统计结果。

比如我们可以按照性别、年龄段、城市等字段对用户样本进行分组,统计每个分组的样本数量、特征均值,以此分析样本的分布情况,这在AI数据集的分析中非常常用。

5.2 分组查询的使用规则

分组查询有一个严格的使用规则:分组查询的结果中,只能包含分组字段,以及聚合函数统计的结果,不能包含其他非分组的明细字段。

这个规则的核心原因是,分组后每个分组只会返回一行统计结果,如果加入非分组的明细字段,数据库无法确定该字段应该返回分组中的哪一个值,会出现查询错误。

5.3 组前筛选where与组后筛选having

where和having都可以做数据筛选,也是新手最容易混淆的两个知识点,二者的核心区别有两点,完全对应我们之前讲的SQL执行顺序:

  1. 执行时机与功能不同:where是分组之前执行,先对全表数据做筛选,再对筛选后的数据进行分组,属于组前筛选;having是分组之后执行,仅对分组完成后的统计结果做筛选,属于组后筛选。
  2. 聚合函数的使用规则不同:where执行时,分组和聚合统计还没有完成,所以where后面不能跟聚合函数;having执行时,聚合统计已经完成,所以having后面可以正常使用聚合函数做筛选。

这里有一个核心的使用原则:能在where里完成的筛选,尽量不要放到having里,因为组前筛选可以提前剔除大量无效数据,减少分组和统计的计算量,大幅提升查询效率。

六、排序查询:结果的有序化处理

排序查询用于对最终的查询结果,按照我们指定的字段和规则进行排序,让数据按照我们需要的顺序展示,方便查看数据的分布、极值、排名情况。

6.1 排序查询的核心作用

排序查询可以让无序的查询结果,按照指定的规则变成有序的结果,无论是数值的大小排序、时间的先后排序,还是文本的字典序排序,都可以实现,常用于查看数据的排名、极值、趋势,比如按照样本的置信度排序、按照特征的数值大小排序。

6.2 排序查询的使用规则与细节

  1. 排序的位置:排序语句在整个查询结构中,书写位置仅早于分页限制,除了分页之外,排序是整个查询流程中最后执行的步骤。
  2. 排序方向:排序分为升序和降序两种,升序即从小到大排序,是默认的排序方向,可以省略不写;降序即从大到小排序,需要显式指定排序方向。
  3. 多字段排序:支持同时指定多个排序字段,排序规则为:先按照第一个排序字段进行排序,只有当第一个排序字段的数值相同时,才会按照第二个排序字段进行排序,以此类推。

七、分页查询:大数据量的分批处理

分页查询用于限制最终查询结果返回的行数,是处理大数据量查询的核心能力,无论是前端页面的分页展示,还是AI场景中大数据集的分批拉取,都离不开分页查询。

7.1 分页查询的核心价值

分页查询的核心优势有三点:

  1. 降低服务器的压力,每次只需要返回一小部分数据,无需一次性拉取全量数据,避免数据库性能过载。
  2. 降低数据处理的压力,尤其是在AI数据处理中,面对百万、千万级的数据集,一次性拉取全量数据很容易造成内存溢出,分批拉取可以有效规避这个问题。
  3. 提升查看和使用的体验,无需面对海量的全量数据,可以按需分批查看和处理数据。

7.2 分页查询的核心规则

  1. 索引规则:SQL表中的每一行数据,都有自己的行索引,索引编号从0开始,而不是从1开始,这是新手最容易踩坑的点。
  2. 格式规则:分页查询需要指定两个核心参数,第一个参数是起始索引,即从第几行数据开始返回;第二个参数是返回的数据条数,即最多返回多少行数据。
  3. 简化规则:如果只需要从第一行数据开始返回,也就是起始索引为0时,可以省略起始索引,只写返回的数据条数即可。

7.3 分页的通用计算逻辑

在实际的分页场景中,我们通常会提前确定每页展示的数据条数,以及要查看的页码,这里有固定的通用计算公式:

  1. 每页的起始索引 = (当前页码 - 1) × 每页的数据条数
  2. 总页数 = (数据总条数 + 每页的数据条数 - 1) ÷ 每页的数据条数

这里的总页数计算需要用整除的方式,避免出现小数,确保所有数据都能被覆盖。

八、去重查询:剔除重复干扰数据

去重查询用于剔除查询结果中的重复数据,仅保留不重复的唯一数据,常用于数据去重、类别统计、脏数据清洗。

8.1 去重查询的核心作用

去重查询的核心作用,是对查询结果中的数据做去重处理,当查询结果中有多行数据的内容完全一致时,仅保留其中一行,剔除其他重复的行。

在AI数据处理中,常用于统计数据集中有多少个不同的类别、剔除重复的样本数据,避免重复样本影响模型的训练效果。

8.2 去重查询的使用规则

去重查询是对查询的所有列做联合去重,只有当多行数据中,所有查询列的内容都完全相同时,才会被判定为重复数据;如果只有部分列的内容相同,其他列不同,不会被判定为重复数据。

如果只需要对某一个列做去重,仅查询该列,再加上去重规则即可。

九、逻辑图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值