深入学习MYSQL-数据检索

news2024/9/24 5:33:14

前言

由于大部分基础知识都已经学过了,这里只把觉得应该记录一下的知识点做个笔记。然后以下笔记和sql均来自书籍(MYSQL必会知识)

LIKE模糊查询

  • 通配符%
    相当于是查询一jet开头后面任意的数据
select prod_id,prod_name from products where prod_name like 'jet%';

查询jet结尾的数据,这里要注意空格的问题,有时候数据库数据后面存了空格(jet )可能导致查询不成功,这个时候需要用空格函数去除空格

select prod_id,prod_name from products where prod_name like '%jet';

查询前:

在这里插入图片描述
查询后:
在这里插入图片描述
这个是查询包含anvil的数据

select prod_id,prod_name from products where prod_name like '%anvil%';

在这里插入图片描述
查询以s开头e结尾的数据

select prod_id,prod_name from products where prod_name like 's%e';

在这里插入图片描述

  • 通配符_
    _下划线匹配一个字符
select prod_id,prod_name from products where prod_name like '_ ton anvil';

在这里插入图片描述
对比%,匹配多个字符:
在这里插入图片描述

正则表达式

基本使用

select prod_id,prod_name from products where prod_name regexp '1000';

在这里插入图片描述
这个其实相当于like这样写
注意前后都有通配符

select prod_id,prod_name from products where prod_name like '%1000%';

在这里插入图片描述
如果你这样写返回的是一个空集合,因为like会匹配整个列,如果文本在列中出现不会找到它也不会返回(mysql必会知识原话)

select prod_id,prod_name from products where prod_name like '1000';

在这里插入图片描述
点号匹配任意一个字符

select prod_id,prod_name from products where prod_name regexp '.000';

在这里插入图片描述
正则表达式在匹配的时候是区分大小写的如果要区分大小写用关键字binary

select prod_id,prod_name from products where prod_name regexp binary 'JetPack .000';

在这里插入图片描述
这个时候由于指定小写所以没有匹配的数据

select prod_id,prod_name from products where prod_name regexp binary 'jetpack .000';

在这里插入图片描述
不区分大小写所以能返回所以匹配的结果

select prod_id,prod_name from products where prod_name regexp 'jetpack .000';

在这里插入图片描述

or匹配 这里匹配的就是名字包含1000或者2000的数据

select prod_id,prod_name from products where prod_name regexp  '1000|2000' order by prod_name;

在这里插入图片描述
集合的符号的使用
匹配几个字符之一 下面语句的意思就是匹配1 Ton 2 Ton 3 Ton

select prod_id,prod_name from products where prod_name regexp  '[123] Ton';
#上面这条语句等价于
select prod_id,prod_name from products where prod_name regexp  '1|2|3 Ton';

在这里插入图片描述
集合取反

#取几何的反集 这个的意思就是除了1 Ton 2 Ton 3 Ton 任意 * Ton都会被返回 *代表任意字符
select prod_id,prod_name from products where prod_name regexp  '[^123] Ton';

在这里插入图片描述
上面如果我们要比如26个子母我们可以全写到里面,但是这样会很长而且也很难写,所以我们采用范围的方式,就是在中括号里加短线标识1到5

#匹配范围 就是匹配 1 2 3 4 5 Ton(五次匹配)
select prod_id,prod_name from products where prod_name regexp  '[1-5] Ton';

在这里插入图片描述
特殊字符的配配

#匹配特殊字符 注意是两个\\ 如果匹配\本身 则需要 \\\
select vend_name from vendors where vend_name regexp '\\.';

在这里插入图片描述
其它特殊字符:
在这里插入图片描述
然后mysql里面内置了一些常用的字符集
在这里插入图片描述
提供指定多个字符匹配的表达式:
在这里插入图片描述
下面再看几个例子:

#由于( )都是特殊字符所以前面有\\ 
select prod_name from products where prod_name regexp '\\([0-9] sticks?\\)';
#等价于下面的这条语句,需要注意的是这里外面还需要包裹一对[]
select prod_name from products where prod_name regexp '\\([[:digit:]] sticks?\\)';

在这里插入图片描述

#{}里面内容限制了匹配的数量 []里限制了匹配的模式 这个正则的意思是匹配包含四个(或四个以上)数字的数据
select prod_name from products where prod_name regexp '[[:digit:]]{4,}';

在这里插入图片描述

#这条sql的语句是匹配以数字或.开始的数据
select prod_name from products where prod_name regexp '^[0-9\\.]';
#否定某个集合
[^123]

注:在正则表达式这块^这个符号有两种用法,第一种是否定某个集合,这个在前面我们提到过;第二种用法标志开始。
在这里插入图片描述
在这里插入图片描述

# 1 表示成功 0表示失败 这个匹配有点想找这个里面是否存在word这个词
select 'a word a' REGEXP '[[:<:]]word[[:>:]]';
select 'a wordd a' REGEXP '[[:<:]]word[[:>:]]';
select 'a wordd word  a' REGEXP '[[:<:]]word[[:>:]]';

在这里插入图片描述

计算字段

#拼接两个字段
select concat(vend_name,'(',vend_country,')') from vendors order by vend_name;
#可以在函数中再使用函数
select concat(vend_name,'(',rtrim(vend_country),')') from vendors order by vend_name;
#可以取别名
select concat(vend_name,'(',vend_country,')') as concatstr  from vendors order by vend_name;

在这里插入图片描述
在这里插入图片描述

#执行算术运算
select prod_id,quantity,item_price,quantity*item_price as price from orderitems  where order_num = '20005';

在这里插入图片描述
支持四则运算和()指定优先级
在这里插入图片描述
例如:

select prod_id,quantity,item_price,(quantity+10)*item_price as price from orderitems  where order_num = '20005';

在这里插入图片描述

数据分组

 select vend_id,count(*) as num_prods from products group by vend_id;
 #使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值,可以看到其实有这个关键字
 #它会对分组的结果进行再统计也就是就一个和
 select vend_id,count(*) as num_prods from products group by vend_id with rollup;

在这里插入图片描述
在这里插入图片描述

select cust_id,count(*) as orders from orders group by cust_id;
#可以看到having分组后的结果进行了过滤
select cust_id,count(*) as orders from orders group by cust_id having count(*) >=2;

在这里插入图片描述
在这里插入图片描述

#where 和 having的组合使用 where 用于分组前 having用于分组后 同时order by一定是在group by后面
select vend_id,count(*) as num_prods from products where prod_price >= 10  group by vend_id having count(*) >= 2;

在这里插入图片描述

子查询

select cust_name,cust_contact from customers where cust_id in (select cust_id from orders where order_num in (select order_num from orderitems where prod_id = 'TNT2'));

在这里插入图片描述

#子查询作为计算字段
select cust_name,cust_state,(select count(*) from orders where orders.cust_id = customers.cust_id)  as custom from customers order by cust_name; 

在这里插入图片描述
注:这里有一个概念就是相关子查询也就是子查询涉及引用外部的表

#子查询涉及了外部表customers 
select cust_name,cust_state,(select count(*) from orders where customers.ct_idust_id = orders.cust_id) as orders from customers order by cust_name;

在这里插入图片描述

连接

注:没有加条件的连接返回的是一个笛卡尔积

#返回笛卡尔积
select vend_name,prod_name,prod_price from vendors,products order by vend_
name,prod_name;
#内连接 等值连接 不保存没有匹配上的值
select vend_name,prod_name,prod_price from vendors inner join products  on vendors.vend_id = products.vend_id;

在这里插入图片描述

#连接多个表
select prod_name,vend_name,prod_price,quantity from orderitems,products,vendors where products.vend_id = vendors.vend_id and orderitems.prod_id = products.prod_id and order_num = 20005;

在这里插入图片描述

#使用别名缩短查询语句 这条查询语句和我们之前子查询的效果是一样的
select cust_name,cust_contact from customers as c,orders as o,orderitems as oi where c.cust_id=o.cust_id and o.order_num = oi.order_num and prod_id = 'TNT2
';
#这一条语句我们两次使用了当前表
select prod_id,prod_name from products where vend_id = (select vend_id from products where prod_id = 'DTNTR');
#我们可用自连接,达到相同的效果
select p1.prod_id,p1.prod_name from products as p1, products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';

注:通常使用自连接代替子查询嵌套,通常情况前者的效率更高,但是实际情况需要进行测试,那种效率高用那种并不绝对。
在这里插入图片描述
在这里插入图片描述

#外连接所谓的外连接只是保留没有匹配上的数据 如果保留左边的数据就是左连接 否则是有连接
select customers.cust_id,orders.order_num from customers left outer join orders on customers.cust_id = orders.cust_id;

在这里插入图片描述

组合查询

组合查询是把具有相同结构的数据组合到一起,数据里面的列的次序可以不一致。
用UNION 默认会去掉重复的行,如果你需要保留重复的行用UNION ALL

select vend_id,prod_id,prod_price from products where prod_price <= 5 unionon all select vend_id,prod_id,prod_price from products where vend_id in (1001,10002);

在这里插入图片描述

#使用了UNION后排序会针对整个结果而不是后面这条语句
 select vend_id,prod_id,prod_price from products where prod_price <= 5 union all select vend_id,prod_id,prod_price from products where vend_id in (1001,1002) order by vend_id,prod_price;

在这里插入图片描述

全文检索

  • 普通全文搜索
#注意在创建表的时候启用全文搜索
CREATE TABLE productnotes
(
  note_id    int           NOT NULL AUTO_INCREMENT,
  prod_id    char(10)      NOT NULL,
  note_date datetime       NOT NULL,
  note_text  text          NULL ,
  PRIMARY KEY(note_id),
  FULLTEXT(note_text)
) ENGINE=MyISAM;
#使用全文搜索
select note_text from productnotes where match(note_text) against('rabbit');
#这里可以用幕府查询但是我们对比一下结果就可以发现全文搜索是有权重的,关键字越靠前则他会在结果中的排序也更靠前
select note_text  FROM productnotes WHERE note_text LIKE '%rabbit%';

在这里插入图片描述
在这里插入图片描述

#可以看到全文搜索计算了一个数值,这个相当于是相关性打分
select note_text, match(note_text) against('rabbit') as rank from productnotes;

在这里插入图片描述

  • 拓展搜索
    1)第一条语句只是不使用拓展模式,返回一条结果
select note_text from productnotes where match(note_text) against('anvils');

在这里插入图片描述
2)使用拓展搜索
返回了多条结果,并且第二,三条的结果和第一条结果相关它包含第一行中的两个词(customer和recommend)。
这个就是拓展搜索的优势,返回更多具有相关性的结果。

select note_text from productnotes where match(note_text) against('anvils' with query expansion);

在这里插入图片描述

  • 布尔文本搜索
    在这个模式下我们可以手动的设置某个单词权重
    下面这条sql的意思就是匹配heavy 并且排除包含rope开头的记录
select note_text from productnotes where match(note_text) against('heavy -rope*' in boolean mode);

在这里插入图片描述
如果不写这个条件,可以对比一下结果差异:

select note_text from productnotes where match(note_text) against('heavy' in boolean mode);

在这里插入图片描述
再看一个例子:
这条语句的意思是记录必须包含rabbit 和bait

 select note_text from productnotes where match(note_text) against('+rabbit +bait' in boolean mode);

在这里插入图片描述

更多操作符号:
在这里插入图片描述
全文搜索的一些注意事项:
在索引全文本数据时,短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词(如果需要,这个数目可以更改)。
MySQL带有一个内建的非用词(stopword)列表,这些词在索引全文本数据时总是被忽略。如果需要,可以覆盖这个列表(请参阅MySQL文档以了解如何完成此工作)。
许多词出现的频率很高,搜索它们没有用处(返回太多的结果)。因此,MySQL规定了一条50%规则,如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。50%规则不用于IN BOOLEAN MODE。
如果表中的行数少于3行,则全文本搜索不返回结果(因为每个词或者不出现,或者至少出现在50%的行中)。
忽略词中的单引号。例如,don’t索引为dont。
不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文本搜索结果。
如前所述,仅在MyISAM数据库引擎中支持全文本搜索。

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

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

相关文章

GRPC 程序在 Kubernetes 中的负载均衡

本文的背景使用的是 kratos 框架。 背景 众所周知 grpc 底层使用 http2 协议&#xff0c;而 http2 是一个长链接多路复用的。在正常情况下客服端与服务端一对一不会需要负载均衡手段&#xff1b;但是当服务上云之后为了保障服务的可用性所以我们服务端一般是多副本&#xff0…

用chatgpt实现 java导出excel复杂表。

记录一次使用chatgpt解决实际问题的&#xff0c;需求是在页面添加一个订单导出excel的功能&#xff0c;订单编号、订单明细&#xff0c;相同订单编号合并单元格&#xff0c;模板如下 表头表尾不用说&#xff0c; 主要是表格内容部分&#xff0c;左边是订单编号&#xff0c;右边…

clickhouse linux 离线安装

1. 下载离线安装包&#xff0c;下四个包&#xff0c;版本号要一致, (在此下的是20.8.3.18-1.el7.x86_64版) clickhouse-server, clickhouse-client, clickhouse-common-static, clickhouse-server-common Altinity/clickhouse - Packages packagecloudBrowse pa…

人工智能基础部分15-自然语言处理中的数据处理上采样、下采样、负采样是什么?

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能基础部分15-自然语言处理中的数据处理上采样、下采样、负采样是什么&#xff1f;在自然语言处理中&#xff0c;上采样、下采样、负采样都是用于处理数据不平衡问题的技术&#xff0c;目的是为了优化模型的训…

《记录》chariles配置

Charles配置 1、下载&#xff1a;官网下载-傻瓜式安装 2、windows配置解析pc端的https包 http包解析是配好的&#xff0c;需要自行配置https 2.1、下载证书 1、如图点击 之后下一步点完成就行。 2.2、代理设置 这里勾选其实勾不勾都行&#xff0c;默认不改也行。我是看了…

DC域控服务器与辅助DC域控服务器之间的数据同步以及创建域组织机构和域用户

本篇主要是处理DC域控服务器与辅助DC域控服务器之间的数据同步关系&#xff0c;DC域控服务器与辅助DC域控服务器的创建可以参考上篇文章 验证DC域控服务器与辅助DC域控服务器之间的数据同步关系&#xff0c;分别在辅助DC域控服务器DC上面新建一个用户&#xff0c;看看再对应的…

一名【合格】前端工程师的自检清单

1.JavaScript规定了几种语言类型&#xff1f; 基本数据类型&#xff1a;number、string、boolean、null、undefined、symbol(es6) 对象引用类型&#xff1a;Array、Function、Object、RegExp、Error、Date 2.JavaScript对象的底层数据结构是什么&#xff1f; JavaScript 对象…

甄云科技对话格瑞德,探讨高复杂度采购事业的数“智”解决之道

在由甄云科技主办的客户高层访谈节目“甄知访谈”中&#xff0c;本期我们走进山东格瑞德集团&#xff0c;一起来分享格瑞德的采购数字化转型之路。由甄云科技总裁姚一鸣对话格瑞德集团有限公司供应链总经理徐涵先生。 山东格瑞德集团成立于 1993 年&#xff0c;是一家围绕人工…

[pgrx开发postgresql数据库扩展]7.返回序列的函数编写(2)表序列

前文再续&#xff0c;书接上一回。 上一节我们简单说了利用SetOfIterator返回一个srf&#xff08;Set Returning Functions&#xff09;&#xff0c;但是很多情况下&#xff0c;一个单值序列并不能很好的满足我们的需求&#xff0c;所以今天我们来说另外一个作用更广泛的srf&a…

您有一条群邀请消息:施耐德电气“绿色智能制造创赢计划”第四季正式启动!

4月26日&#xff0c;由工业和信息化部国际经济技术合作中心与施耐德电气共同主办的“2023绿色智能制造创赢计划”第四季正式启动 。 这一计划为拥有**技术专长与发展潜力的中小企业提供联合共创平台&#xff0c;帮助企业加速突破工业场景中的关键痛点&#xff0c;孵化和落地更…

GDB调试-从安装到使用

1、GDB简介 gdb 工具是 GNU 项目调试器&#xff0c;基于命令行。和其他的调试器一样&#xff0c;我们可以使用 gdb 来一行行的运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等&#xff0c;它是 UNIX/LINUX 操作系统下强大的程序调试工具。对于一般的Linux桌面系统(…

Nginx:worker_processes、worker_connections设置

转自&#xff1a;Nginx&#xff1a;worker_processes、worker_connections设置_worker_connections设置多少_it_zhenxiaobai的博客-CSDN博客 worker_processes与worker_connections 设置好合适大小&#xff0c;可以提升 nginx 处理性能&#xff0c;非常重要。 原作者的话&…

【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

eSIM证书要求-涉及规范SGP.22-SGP.26-2

subjectPublicKeyInfo 证书链中所有证书的subjectPublicKeyInfo中的OID都是一样的 CRL Distribution Point 证书吊销列表分发点 (CRL Distribution Point &#xff0c;简称 CDP) 是含在数字证书中的一个可以共各种应用软件自动下载的最新的 CRL 的位置信息。一个 CDP 通常出现…

egg.js + mysql + windows 踩坑全纪录

资料&#xff1a; egg.js文档&#xff08;https://www.eggjs.org/zh-CN/intro/quickstart&#xff09; 背景&#xff1a;前面的都很简单&#xff0c;按照官方文档配置即可&#xff0c;全部调通以后&#xff0c;开始接触数据库mysql 因为米有后台开发背景&#xff0c;所以需要从…

从IDC数据库安全报告,看OceanBase安全能力

欢迎访问 OceanBase 官网获取更多信息&#xff1a;https://www.oceanbase.com/ 作为数据的承载工具&#xff0c;数据库自身安全能力对于数据安全至关重要。数据库软件诞生至今&#xff0c;经过了几十年的发展和演进&#xff0c;已经成为 IT 系统中不可或缺的关键技术。但是随着…

MySQL原理(三):索引

前言 上一篇介绍了 MySQL 的逻辑架构和执行过程&#xff0c;这一篇将介绍索引相关的内容。 索引是用额外的数据结构&#xff0c;来实现快速检索目标数据的。就像字典当中的目录一样&#xff0c;用额外的空间来存储部分内容&#xff0c;从而加快检索速度。 MySQL 的逻辑架构分…

Python——PyQt5在PyCharm的配置与应用(保姆级教程)

目录 一、安装pycharm与python版本 二、升级pip与换源&#xff0c;安装PyQt5、PyQt5-tool 三、添加环境变量 四、在pycharm的外部工具里添加3个工具 4.1、添加三个插件&#xff08;重点&#xff09; 五、如何使用QtDesigner 六、如何使用pyuic5 一、安装pycharm与python版…

C语言——扫雷小游戏(递归展开版)

哈喽&#xff0c;大家好&#xff0c;上次我们已经学习了三子棋小游戏&#xff0c;今天我们来学习扫雷小游戏了。 目录 1.游戏介绍 2.函数部分 2.1菜单 2.2game()函数 2.3mian()函数 2.4初始化棋盘 2.5打印棋盘 2.6布置雷 2.7排查雷 2.8统计雷 2.9递归,展开一片区域 …

眼球追踪、HDR、VST,从代码挖掘Valve下一代VR头显

擅长爆料、挖掘线索的Brad Lynch&#xff0c;此前发布了Quest Pro等设备的线索文章引发关注。​近期&#xff0c;又公布一系列与“Valve Deckard”VR头显相关消息&#xff0c;比如支持眼球追踪、HDR、VST透视、Wi-Fi网络等等。在SteamVR 1.26.1测试版更新、Steam用户端、Gamesc…