表记录的检索

news2025/5/16 16:17:58

1.select语句的语法格式

select 字段列表 from 表名 
where 条件表达式 
group by 分组字段 [having 条件表达式] 
order by 排序字段 [asc|desc];

说明:
from 子句用于指定检索的数据源
where子句用于指定记录的过滤条件
group by 子句用于对检索的数据进行分组
having 子句通常和group by 子句一起使用,用于过滤分组后的统计信息
order by子句用于对检索的数据进行排序处理,默认为升序asc

2.select子句指定字段列表

(1)字段列表可以包含字段名,也可以包含表达式,字段名之间使用逗号分隔,并且顺序可以任意指定
(2)可以为字段列表中的字段名或者表达式指定别名,中间使用as关键字分隔即可
(3)多表查询时,同名字段前必须添加表名前缀,中间使用"."分隔
(4)结果集中的列名为字段列表中的字段名或者表达式名
例如:select version(), now(), pi(), 1+2, null=null, null!=null, null is null;的查询如下:
在这里插入图片描述
(5)检索表student全部记录
select * from student;

3.使用谓词过滤记录

MYSQL中的两个谓词distinct和limit可以过滤记录
(1)使用谓词distinct过滤结果集中的重复记录
数据库表中不允许出现重复的记录,但这不意味着select的查询结果击中不会出现记录重复的现象。如果需要过滤结果集中重复的记录,可以使用谓词关键字distinct,语法格式如下:
distinct 字段名;
例如:select distinct department_name from classes;
(2)使用谓词limit查询某几行记录
使用select语句时,经常需要返回前几条或者中间某几条记录,可以使用谓词关键字limit实现。语法格式如下:

select 字段列表
from 数据源
limit [start,] length

例如:前三条记录
select * from student limit 0,3; 等效于 select * from student limit 3;
从第二条记录开始的3条记录
select * from choose limit 1,3;

4.使用from指定数据源

在实际应用中,为了避免数据冗余,需要将一张大表划分成若干张小表。但检索数据时,为了更加直观看到所有数据,往往需要将若干张小表缝补连接成成一张大表。连接的方法有两种,一种是在from子句使用连接运算,讲多个数据源按照某种连接条件“缝补”在一起,一种是在where子句中指定连接条件。
通过from指定连接运算的格式如下:

from 表名1 连接类型 join 表名2 on 连接条件;

SQL标准中,连接类型有inner连接和outer连接,而外连接又分为left左外连接,right右外连接以及full完全外连接。
如果表1和表2存在相同意义的字段,则可以通过该字段连接这两张表。例如,在student表中,想要直接看到学生和其班级信息,可以通过班级id把班级信息连接上来。
在这里插入图片描述
(1)内连接:
from 表1 inner join 表2 on 连接条件
重点:会过滤掉表1和表2的不符合条件的信息
(2)左外连接:
from 表1 left join 表2 on 连接条件
重点:保留表1的全部信息,而表2 不符合的信息则过滤掉,表1如果存在某些匹配不到表2的信息,则该行的表2部分信息都是NULL
(3)右外连接:
from 表1 right join 表2 on 连接条件
重点:保留表2的全部记录,而表1中不符合的信息则过滤掉,表2中如果存在某些匹配不到表1的信息,则该行的表1部分则都是NULL。
(4)全连接:
MYSQL暂不支持全连接运算,不赘述。

5.多表连接

格式如下:
from 表1 连接类型 join 表2 on 连接条件
连接类型 join 表3 on 连接条件

6.使用where子句过滤结果集

(1)单一条件过滤
where 表达式1 比较运算符 表达式2
select * from classes where class_name=‘2012自动化2班’;
(2)is NULL运算
表达式 is [not] NULL
判断表达式的值是否为NULL或者不为NULL
(3)逻辑运算符
逻辑非为符号 !, 一般用于"! 布尔表达式"
例如: select * from course where !(up_limit=60);
等效于: select * from course where up_limit != 60;

(4)and逻辑运算 和 or逻辑运算
布尔表达式1 and|or 布尔表达式2
(5)between … and …
用于判断一个表达式的值是否位于指定的取值范围内
(6)in运算符
in运算符用于判断一个表达式的值是否位于一个离散的数学集合内
格式:表达式 [not] in (数学集合)
例如:select * from student where substring(student_name, 1, 1) in ('张’, ‘田’);
(7)like进行模糊查询
like运算符用于判断一个字符串是否与给定的模式相匹配。模式是一种特殊的字符串,特殊之处在于它不仅包含普通字符,还包含通配符。
格式:字符串表达式 [not] like 模式
通配符:
%(匹配零个或多个字符组成的任意字符串)
_ (匹配任意一个字符)
例如:
检索所有姓张但是名字只有两个字的学生的信息
select * from student where student_name like ‘张_’;
检索姓名中带有’三’的所有学生的信息
select * from student where student_name like ‘%三%’;

7.使用order by排序

order by 字段名1 [asc|desc] […, 字段名n [asc|desc]]
(1)单个排序
在这里插入图片描述
(2)多重排序
在这里插入图片描述

8.使用聚合函数汇总结果集

(1)聚合函数:sum(), avg(), count(), max(),min()

9.使用groupby子句对记录进行分组

格式:group by 字段列表[having 条件表达式][with rollup]
(1)单独使用group by没意义,因为只保留各分组的一条记录
在这里插入图片描述
(2)group by + 聚合函数
在这里插入图片描述

(3)group by +having子句
having子句无法用where代替,因为where和group by和having同时存在的时候,where首先运行,然后group by和having对where运算结果进行过滤筛选。
在这里插入图片描述
(4)group_concat()
group_concat()函数可以将各个字段的值用逗号连接起来
在这里插入图片描述
(5)group by + 聚合函数 + with rollup
在原先的group by+聚合函数中,聚合函数处理每个分组,但是没有处理整个表,with rollup在最后加上一行处理整个表的结果
在这里插入图片描述

10.合并结果集

格式:
select 字段列表1 from table1
union [all]
select 字段列表2 from table2
要求:字段列表1和字段列表2的字段个数和对应的数据类型必须一致
union和union all 的区别:当使用union时,MYSQL会筛选掉select结果中重复的记录。而是用union all时,MYSQL会直接合并两个结果集。
例如:查询所有学生和老师的联系方式
在这里插入图片描述

11.子查询

(1)如果子查询返回单个值,则可以将这个子查询结果和其他表达式的值进行比较
在这里插入图片描述
(2)子查询+in运算符
子查询经常与in运算符一起使用,用于将一个表达式的值与子查询返回的一列值进行比较,如果表达式的值是此列中的任何一个值,则条件表达式的结果为true,否则为false
例如:select id, name,sex from human where id in (select human_id from bese_human);
(3)子查询+exists运算符
exists逻辑运算符用于检测子查询结果集中是否包含记录。如果结果集中至少包含一条记录,则exists的结果为true,否则为false
例如:检索没有申请选修课的教师的信息
select * from teacher
where not exists(
select * from course where course.teacher_no=teacher.teacher_no
);
说明:遍历到teacher表一行,则执行子查询,子查询为true则不显示,子查询不是true则展示
在这里插入图片描述

(4)子查询+any运算符
any运算符通常与比较运算符一起使用。使用any运算符时,通过比较运算符将一个表达式的值与子查询返回的一列值逐一进行比较,若某次比较结果为true,否则为false。

select * from
student join classes on student.class_no=classes.class_no
join choose on choose.student_no=student.student_no
where score > any(
select score from choose where class_no = 1;
);

(5)子查询+all运算符
all运算符通常与比较运算符一起使用。使用all运算符时,通过比较运算符将一个表达式的值与子查询返回的一列值逐一进行比较,若所有比较结果为true,则为true,否则为false。

select * from
student join classes on student.class_no=classes.class_no
join choose on choose.student_no=student.student_no
where score > all(
select score from choose where class_no = 1;
);

12.正则表达式模糊查询

与like运算符相似,正则表达式主要用于判断一个字符串是否与给定的模式匹配。但正则表达式的模式匹配功能比立刻运算符的模式匹配功能更为强大,且更加灵活。使用正则表达式进行模糊查询时,需要使用regexp关键字,语法格式如下:
字段名 [not] regexp [binary] ‘正则表达式’
说明:正则表达式匹配英文字母时,默认情况下不区分大小写,除非添加binary选项或者将字符序collation设置为bin或者cs。
正则表达式由一些普通字符和一些元字符构成,普通字符包括大写字母,小写字母和数字,甚至是中文简体字符。而元字符具有特殊的含义。
元字符:
在这里插入图片描述
(1)检索含有‘java’的课程信息
select * from course where course_name regexp ‘java’;
(2)检索以‘java’结尾的课程信息
select * from course where course_name regexp ‘java$’;
(3)检索以‘java’开头的课程信息
select * from course where course_name regexp ‘^java’;
(4)检索以15或者18开头的数字,后面跟着9个数字
select * from course where course_number regexp ‘1[58][0-9]{9}’

13.MYISAM存储引擎的全文检索

对于海量数据库而言,使用like关键字或者正则表达式对字符串进行模糊查询,很多时候无法使用索引,因此需要进行全表扫描,检索效率较低。如果模糊查询并发操作较多,将会急剧降低数据库的检索性能,甚至导致服务器宕机。
使用like或者正则表达式进行模糊查询,当模式的第一个字符是通配符时,将导致索引无法使用。
针对这一个问题,MYSQL中的全文检索使用特定的分词技术,利用查询的关键字和查询字段内容之间的相关度进行检索。通过全文索引可以提高文本匹配的速度。
格式:
select 字段列表
from 表名
where match (全文索引字段1,全文索引字段2, …) against (搜索关键字[全文检索方式])
注意:使用全文检索前,需要在某些字段创建全文索引,使之成为全文索引字段。
(1)检索书名或者简介中设计"practices"单词的所有图书信息
select * from book where match (name, brief_introduction) against (‘practices’)\G
在这里插入图片描述

(2)检索书名或者简介中设计"practices"或者“cookbook”单词的所有图书信息
select * from book where match (name, brief_introduction) against (‘practices cookbook’)\G
在这里插入图片描述

(3)MYSQL对于全文检索的结果集是按照关联度进行排序的(大致,实际上比较繁杂)。而关联度信息正是全文检索的子句得出的结果
select isbn,name match(name, brief_introduction) against (‘practices cookbook’) 关联度 from book;
在这里插入图片描述
(4)MYSQL在执行全文检索时,会计算检索词在表中记录的频率,如果频率高达100%,意味着所有记录都含有该检索词,那么该全文检索实际上没有太多意义。
MYSQL在进行全文检索时,默认情况下忽略权重超过50%的记录,这个50%称为阈值。

(5)MYSQL对搜索关键字规定了最小长度和最大长度
show variables like ‘ft_min_word_len’;
show variables like ‘ft_max_word_len’;
这两个变量是静态变量,不能使用set命令设置,可以在my.cnf配置文件的[mysqld]选项组中加上想要的设置。

(6)MYSQL在MYISAM引擎的全文搜索中,内置了545个停用词,其中包括has,all,be,been,that等单词。MYISAM忽略搜索中的停用词,可以使用show variables like 'ft_stopword_file’查看停用词。
‘ft_stopword_file’变量也是静态变量,无法使用set命令进行设置,管理员可以自行创建停用词文件,然后在my.cnf配置文件的[mysqld]选项组中加上“ft_stopword_file=‘文件路径’”的方法设置全文检索停用词。

14.全文检索方式

常用全文检索方式有3种:自然语言检索,布尔检索和查询扩展检索
(1).自然语言检索
MYSQL全文检索中的默认类型,单表查询,存在阈值限制
(2).布尔检索
没有阈值限制,且可以进行多表查询,还可以包含特定意义的操作符,如+,-,<,>等。
(3).查询扩展检索
查询扩展检索是对自然语言检索的一种改动,当查询短语很短时游泳。先进行自然语言检索,然后把关联度较高的记录中的词添加到搜索关键字中进行二次自然语言检索,然后返回查询结果集。

15.innodb表的全文检索

(1)innodb存储引擎忽略了全文检索中阈值的概念
(2)innodb_ft_min_token_size(默认值3)和innodb_ft_max_token_size(默认值84)定义了搜索关键字的最小长度以及最大长度
(3)innodb_ft_enable_stopword(默认值ON)定义了是否开启停用词
(4)innodb的停用词在information_schema数据库的INNODB_FT_DEFAULT_STOPWORD表中定义

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2376993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT——概述

<1>, Qt概述 Qt 是⼀个 跨平台的 C 图形⽤⼾界⾯应⽤程序框架 Qt ⽀持多种开发⼯具&#xff0c;其中⽐较常⽤的开发⼯具有&#xff1a;Qt Creator、Visual Studio、Eclipse. 一&#xff0c;Qt Creator 集成开发环境&#xff08;IDE&#xff09; Qt Creator 是⼀个轻量…

DataHub:现代化元数据管理的核心平台与应用实践

一、DataHub平台概述 DataHub是由LinkedIn开源并持续维护的下一代元数据管理平台&#xff0c;它采用实时流式架构&#xff08;基于Kafka&#xff09;实现元数据的收集、处理和消费&#xff0c;为现代数据栈提供了端到端的元数据解决方案。作为数据治理的基础设施&#xff0c;D…

ubuntu服务器版启动卡在start job is running for wait for...to be Configured

目录 前言 一、原因分析 二、解决方法 总结 前言 当 Ubuntu 服务器启动时&#xff0c;系统会显示类似 “start job is running for wait for Network to be Configured” 或 “start job is running for wait for Plymouth Boot Screen Service” 等提示信息&#xff0c;并且…

QT6 源(101)阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试

&#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;属性学习与测试 &#xff1a; &#xff08;4&#xff09; &#xff08;5&#xff09; 谢谢

Coze 实战教程 | 10 分钟打造你的AI 助手

> 文章中的 xxx 自行替换&#xff0c;文章被屏蔽了。 &#x1f4f1; 想让你的xxx具备 AI 对话能力&#xff1f;本篇将手把手教你&#xff0c;如何用 Coze 平台快速构建一个能与用户自然交流、自动回复提问的 xxx助手&#xff0c;零代码、超高效&#xff01; &#x1f4cc;…

牛客网 NC22167: 多组数据a+b

牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网&#xff08;题号&#xff1a;NC22167&#xff09;&#xff0c;要求我们计算两个整数a和b的和。乍看简单&#xff0c;但有以下特殊点需要注意&#xff1a; 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…

K8S Ingress、IngressController 快速开始

假设有如下三个节点的 K8S 集群&#xff1a; ​ k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、理论介绍 1&#xff09;什么是 Ingress 定义&#xff1a;Ingress 是 Kubernetes 中的一种资源对象&#xff0c;它定义了外部访问集群内…

快消零售AI转型:R²AIN SUITE如何破解效率困局

引言 快消零售行业正经历从“规模扩张”到“精益运营”的转型阵痛&#xff0c;消费者需求迭代加速、供应链复杂度攀升、人力成本持续走高&#xff0c;倒逼企业通过技术升级实现业务重塑[1]。RAIN SUITE以AI应用中台为核心&#xff0c;针对快消零售场景打造全链路提效方案&…

电路中零极点的含义

模拟电路中的零极点设计非常重要&#xff0c;涉及到系统的稳定。零点是开环传输函数分子为0时对应的频率。极点就是开环传递函数分子为0时对应的频率。 零点表征电路中能量输出路径的抵消效应&#xff0c;当不同支路的信号大小相等、方向相反时&#xff0c;导致特定频率下响应…

解读RTOS 第八篇 · 内核源码解读:以 FreeRTOS 为例

1. 引言 FreeRTOS 作为最流行的嵌入式实时操作系统之一,其内核源码简洁且功能完善。通过剖析其关键模块(任务管理、调度器、队列、内存管理和移植层),不仅能够更深入地理解 RTOS 的运行机制,还能掌握根据项目需求进行内核定制与优化的能力。本章将带你以 FreeRTOS 10.x 版…

2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明

长三角高校数模B题 完整论文代码已经在售后群 网盘链接 发布 长三角更新时间轴 5.15 23:00 B站发布 完整论文讲解视频 5.16 18:00 j降重说明 5.17 22:00 无水印版本可视化无水印代码 其余时间 写手老师 售后群在线答疑 山东省助攻C道 认证杯二阶段助攻C题 山东省认证杯…

鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎

出品 | 何玺 排版 | 叶媛 前不久&#xff0c;玺哥发布的《鸿蒙电脑&#xff0c;刺向垄断的利刃&#xff0c;将重塑全球PC市场格局》发布后&#xff0c;获得了读者朋友的积极反馈&#xff0c;不少都期望鸿蒙电脑早日发布。 如今&#xff0c;它真来了&#xff01; 5月8日&…

SQLMesh信号机制详解:如何精准控制模型评估时机

SQLMesh的信号机制为数据工程师提供了更精细的模型评估控制能力。本文深入解析信号机制的工作原理&#xff0c;通过简单和高级示例展示如何自定义信号&#xff0c;并提供实用的使用技巧和测试方法&#xff0c;帮助读者优化数据管道的调度效率。 一、为什么需要信号机制&#xf…

通义千问-langchain使用构建(二)

目录 序言xinference应用构建构建过程简单概述成效 chatchat应用构建过程成效 总结 序言 在昨天的使用langchain的基础上。又尝试了构建智能问答应用。 使用langchain chatchat这个开源包&#xff0c;构建了一下智能问答系统。 前置项&#xff0c;是使用了一下xinference框架&…

[IMX] 02.GPIO 寄存器

目录 手册对应章节 1.GPIO 复用&#xff08;引脚功能选择&#xff09;- IOMUXC_SW_MUX_CTL_PAD_xxx 2.GPIO 电气特性 - IOMUXC_SW_PAD_CTL_PAD_xxx 3.GPIO 数据与控制寄存器 3.1.数据 - DR 3.2.输入/输出选择 - GDIR 3.3.状态 - PSR 3.4.中断触发控制 - ICR 3.5.中断使…

【电子通识】热敏纸的静态发色性能和动态发色性能测试方法

静态发色性能的测定 测定治具 测定静态发色曲线需要使用三个仪器,包括静态发色仪、秒表(分辨力为0.01 s)、反射光密度计(符合 GB/T23649)。 静态发色曲线使用的测试仪为静态发色仪。其结构如下图所示:包括了保湿压板、金属加热板、温度显示器、控制面板。温度能在50℃到…

AIbase推出全球MCP Server集合平台 收录超12万个MCP服务器客户端

2025年&#xff0c;AI领域迎来了一项重要的技术进展——MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;的广泛应用。全球MCP Server集合平台AIbase(https://mcp.aibase.cn/)应运而生&#xff0c;为AI开发者提供了一站式的MCP服务器和客户端整合…

使用CMake中的configure_file命令自动生成项目版本信息

1 背景 随着实际项目的完善&#xff0c;可维护变的更加重要。在日志中保存项目的版本或是构建信息是一个非常有用的方法。 CMake提供了configure_file()命令&#xff0c;可以帮助开发者在构建项目时&#xff0c;自动生成版本或是构建信息&#xff0c;便于开发者在代码中直接引…

Linux的进程管理和用户管理

gcc与g的区别 比如有两个文件&#xff1a;main.c mainc.cpp&#xff08;分别是用C语言和C语言写的&#xff09;如果要用gcc编译&#xff1a; gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc表明使用C标准库&#xff1b; 区别一&#xff1a; gcc默认只链接C库&#x…

【springcloud学习(dalston.sr1)】Eureka服务端集群的搭建(含源代码)(二)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; 这篇文章主要介绍多个eureka服务端的集群环境是如何搭建的。 &#xff08;一&#xff09;eureka的简要说明 Eu…