表记录的检索

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.pswp.cn/news/905659.shtml

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

相关文章

能源设备数据采集

在全球可持续发展目标与环境保护理念日益深入人心的时代背景下&#xff0c;有效管理和优化能源使用已成为企业实现绿色转型、提升竞争力的关键路径。能源设备数据采集系统&#xff0c;作为能源管理的核心技术支撑&#xff0c;通过对各类能源生产设备运行数据的全面收集、深度分…

【鸿蒙开发】性能优化

语言层面的优化 使用明确的数据类型&#xff0c;避免使用模糊的数据类型&#xff0c;例如ESObject。 使用AOT模式 AOT就是提前编译&#xff0c;将字节码提前编译成机器码&#xff0c;这样可以充分优化&#xff0c;从而加快执行速度。 未启用AOT时&#xff0c;一边运行一边进…

群晖NAS部署PlaylistDL音乐下载器结合cpolar搭建私有云音乐库

文章目录 前言1.关于PlaylistDL音乐下载器2.Docker部署3.PlaylistDL简单使用4.群晖安装Cpolar工具5.创建PlaylistDL音乐下载器的公网地址6.配置固定公网地址总结 前言 各位小伙伴们&#xff0c;你们是不是经常为了听几首歌而开通各种平台的VIP&#xff1f;或者为了下载无损音质…

REST架构风格介绍

一.REST&#xff08;表述性状态转移&#xff09; 1.定义 REST&#xff08;Representational State Transfer&#xff09;是由 Roy Fielding 在 2000 年提出的一种软件架构风格&#xff0c;用于设计网络应用的通信模式。它基于 HTTP 协议&#xff0c;强调通过统一的接口&#…

计算机视觉----基于锚点的车道线检测、从Line-CNN到CLRNet到CLRKDNet 本文所提算法Line-CNN 后续会更新以下全部算法

本文所提算法如下&#xff1a; 叙述按时间顺序 你也可以把本文当作快速阅读这几篇文献的一个途径 所有重要的部分我都已经标注并弄懂其原理 方便自己也是方便大家 Line-CNN&#xff1a;基于线提议单元的端到端交通线检测 摘要 交通线检测是一项基础且具有挑战性的任务。以往的…

一.android Studio开发系统应用——导入TvSettings源码

目标 最终效果如上,实现在AS中编辑源码后一键在真机中运行。达到和普通应用开发一样的调试和编码过程。这种方法可以大幅度提升开发速度,但是导入过程确实相对繁琐和消耗时间。适合需要精细或者频繁改动的系统app源码。 一、新建项目 包名:com.android.tv.settings 版本:…

20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图

20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图 2025/5/15 20:19 缘起&#xff1a;以前做的网线找不到了&#xff0c;那就再来一条吧。 引脚定义要从头来过&#xff1f;还好找到了一条。 开干&#xff01; 万用表一对/点&#xff0c;几…

【技术原理】Linux 文件时间属性详解:Access、Modify、Change 的区别与联系

在 Linux 系统中&#xff0c;每个文件都有三个核心时间属性&#xff1a;Access Time (atime)、Modify Time (mtime) 和 Change Time (ctime)。它们分别记录文件不同维度的变更信息&#xff0c;以下是具体区别与联系&#xff1a; 一、定义与触发条件 时间属性定义触发条件示例A…

乘法口诀练习神器

请你利用python语言开发一个“乘法口诀练习神器”&#xff0c;主要辅助小学生练习乘法口诀&#xff0c;主要功能如下&#xff1a; 1. 能够随机循环出10道题&#xff0c;可以是乘法或者是除法。如果是乘法&#xff0c;确保两个因数都是1-9之间的整数&#xff1b;如果是除法&…

[c语言日寄]数据结构:栈

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

磁盘I/O瓶颈排查:面试通关“三部曲”心法

想象一下&#xff0c;你就是线上系统的“交通调度总指挥”&#xff0c;服务器的磁盘是所有数据进出的“核心枢纽港口”。当这个“港口”突然拥堵不堪&#xff0c;卡车&#xff08;数据请求&#xff09;排起长龙&#xff0c;进不去也出不来&#xff0c;整个系统的“物流”&#…

基于大模型预测胃穿孔预测与围手术期管理系统技术方案

目录 1. 系统架构模块2. 关键算法实现2.1 术前预测模型(Transformer多模态融合)2.2 术中实时分析(在线学习LSTM)3. 模块流程图(Mermaid)3.1 数据预处理系统3.2 术前预测系统3.3 术中实时分析系统4. 技术验证模块4.1 模型可解释性验证4.2 边缘计算部署架构1. 系统架构模块…

C++:类和对象4

一&#xff0c;日期类实现 学习建议&#xff1a; 对于计算机学习来说&#xff0c;调试十分重要&#xff0c;所以在日常学习中一定要加大代码练习&#xff0c;刷代码题和课后自己敲出课上代码例题&#xff0c;注意不要去对比正确代码或者网上找正确代码直接使用&#xff0c;一…

大数据架构选型分析

选择依据 1.业务需求与技术要求 用户需要根据自己的业务需求来选择架构&#xff0c;如果业务对于Hadoop、Spark、Strom等关键技术有强制性依赖&#xff0c;选择Lambda架构可能较为合适&#xff1b;如果处理数据偏好于流式计算&#xff0c;又依赖Flink计算引擎&#xff0c;那么…

Trae 插件 Builder 模式:从 0 到 1 开发天气查询小程序,解锁 AI 编程新体验

在软件开发领域&#xff0c;效率与创新始终是开发者追求的核心目标。Trae 插件&#xff08;原 MarsCode 编程助手&#xff09;Builder 模式的全面上线&#xff0c;无疑为开发者带来了全新的解决方案。它不仅同时支持 VS Code、JetBrains IDEs 等主流开发环境&#xff0c;还能让…

SSM项目集成redis、Linux服务器安装redis

在SSM&#xff08;Spring Spring MVC MyBatis&#xff09;项目中引入Redis主要分为以下步骤&#xff0c;确保配置正确并能在业务中灵活使用&#xff1a; 1. 添加Redis依赖​​ 在Maven的pom.xml中添加Spring Data Redis和Jedis&#xff08;或Lettuce&#xff09;依赖&#…

【Redis】压缩列表

目录 1、背景2、压缩列表【1】底层结构【2】特性【3】优缺点 1、背景 ziplist&#xff08;压缩列表&#xff09;是redis中一种特殊编码的双向链表数据结构&#xff0c;主要用于存储小型列表和哈希表。它通过紧凑的内存布局和特殊的编码方式来节省内存空间。 2、压缩列表 【1…

LocalDateTime类型的时间在前端页面不显示或者修改数据时因为LocalDateTime导致无法修改,解决方案

1.数据库中的时间数据&#xff0c;在控制台可以正常返回&#xff0c;在前端无法返回&#xff0c;即显示空白&#xff0c;如下图所示: 2.这种问题一般时由于数据库和我们实体类的名称不一致引起的&#xff0c;我们数据库一般采用_的方式命名&#xff0c;但是在Java中我们一般采用…

Spring框架核心技术深度解析:JDBC模板、模拟转账与事务管理

一、JDBC模板技术&#xff1a;简化数据库操作 在传统JDBC开发中&#xff0c;繁琐的资源管理和重复代码一直是开发者的痛点。Spring框架提供的 JDBC模板&#xff08;JdbcTemplate) 彻底改变了这一现状&#xff0c;它通过封装底层JDBC操作&#xff0c;让开发者仅需关注SQL逻辑&a…

Modern C++(一)基本概念

1、基本概念 1.1、注释 注释在翻译阶段3会被替换为单个空白字符从程序中移除 1.2、名字与标识符 标识符是一个由数字、下划线、大小写字符组成的任意长度序列。有效的标识符首个字符必须是以A-Z、a-z、下划线开头&#xff0c;。有效的标识符其他字符可以是0-9、A-Z、a-z、下…