《MySQL必知必会》知识汇总二
六、用通配符进行过滤
本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索
LIKE操作符
- 百分号(%)通配符
select prod_id,prod_name
from products
where prod_name like 'jet%';
%表示任何字符出现任意次数,也就是0个、1个或者多个字符
%可以在匹配字符的任意位置使用,例如 '%jet'、'%jet%'、'j%t'
- 下划线(_)通配符
select prod_id,prod_name
from products
where prod_name like '_ ton anvil';
_只匹配单个字符而不是多个字符
- 使用通配符的技巧
通配符处理比其他搜索花费时间更长,因此不建议过度使用通配符。
不建议将通配符置于搜索模式的开始处,这样搜索起来是最慢的
格外注意通配符的位置
七、用正则表达式进行搜索
本章将学习如何在where子句内使用正则表达式更好的控制数据过滤
- 基本字符匹配
select prod_name
from products
where prod_name regexp '1000'
order by prod_name;
select prod_name
from products
where prod_name like'1000'
order by prod_name;
注意:LIKE与REGEXP
like不会返回1000这个值,而regexp会返回1000这个值
select prod_name
from products
where prod_name regexp '.000'
order by prod_name;
其中 . 表示匹配任意一个字符
注意:正则表达式匹配不区分大小写,如果想要区分,使用关键字BINARY位于regexp之后
- 进行OR匹配
select prod_name
from products
where prod_name regexp '1000|2000'
order by prod_name;
其中 | 表示匹配其中一个,相当于使用or操作符
- 匹配几个字符之一
select prod_name
from products
where prod_name regexp '[123]Ton'
order by prod_name;
其中[123]表示匹配1或2或3
注意:如果不想匹配123,可以使用[^123]来匹配字符1、2、3以外的值
- 匹配范围
当想要匹配[0123456789]时,可以写成[0-9],就表示匹配0到9中的任意一个
- 匹配特殊字符
上述使用了 . [] | - 等进行匹配,那么如果想要匹配这些字符呢?
select prod_name
from products
where prod_name regexp '\\.'
order by prod_name;
其中 \\. 匹配 . ,这种处理就是所谓的转义
注意:
为了匹配反斜杠(\)需要使用\\\
- 匹配字符类
- 匹配多个实例
*: 0个或者多个匹配
+: 1个或者多个匹配
?: 0个或者1个匹配
{n}: 指定数目的匹配
{n, }: 不少于指定数目的匹配
{n,m}: 匹配数目的范围(m不超过255)
select prod_name
from products
where prod_name regexp '\\([0-9] sticks?\\)'
order by prod_name;
将匹配到 TNT (1 stick) 、 TNT(5 sticks)
- 定位符
^ : 文本的开始
$ : 文本的结尾
[[:: 词的开始
[[:>:]] 词的结尾
select prod_name
from products
where prod_name regexp '^[0-9\\.]'
order by prod_name;
注意:
^不仅可以指定串的开始,还可以否定该集合
当通过^与$配合使用,可以是regexp与like达到相同的效果,因为like匹配整个串而regexp匹配子串
八、创建计算字段
本章介绍什么是计算字段以及如何创建计算字段
- 计算字段
与前面各章介绍的列不同,计算字段并不实际存在于数据库表中,而是运行时在select语句内创建的,也就是通过各种函数生产的字段
- 拼接字段
select Concat(vend_name,'(',vend_country,')')
from vendors
order by vend_name;
于是显示出了数据库中没有的,有Concat()函数生成的新字段,这就是计算字段!
Concat()函数就是将会多个字段拼接起来
select Concat(vend_name,'(',RTrim(vend_country),')')
from vendors
order by vend_name;
还可以使用RTrim()函数进一步处理该计算字段
注意:
RTrim()表示去掉右边的空格
LTrim()表示去掉左边的空格
Trim()表示去掉两边的空格
使用别名
通过as 在表名、列名后即可赋予别名
- 执行计算字段
SELECT prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM orderitems
WHERE order_num = 20005;
其中quantity*item_price AS expanded_price将计算产品的数量×产品的单价并使用别名显示出该产品的总价
注意:
除了*乘法运算,字段之间还可以使用+、-、/等运算
还可以通过Now()函数返回当前日期
九、使用数据处理函数
Upper()、Soundex()、文本处理函数、日期和时间处理函数、数值处理函数
十、汇总数据
聚集函数:AVG()、COUNT()、MAX()、MIN()、SUM()、
注意:
count(*)返回表中行的数目,不管表列中包含的是空值还是非空值
count(column)对指定的列进行计数并返回,会忽略null值
这两章都是介绍一些处理字段的函数,有相关需求时,直接去查表即可
十一、分组数据
本章将介绍如何分组,并介绍GROUP BY 和HAVING如何使用
- 创建分组
select vend_id,count(*) as num_prods
from products
group by vend_id;
通过vend_id进行分组,并统计每组中有多少条数据
注意:
除聚集函数计算语句外,select语句中的每个列都必须在group by 子句中给出
group by 必须出现在 where 之后,order by 之前
- 过滤分组
select cust_id,count(*) as orders
from orders
group by cust_id
having count(*)>=2;
通过having子句,可以对分组后的数据进行过滤,一般都是作用于select中的分组函数上
注意:HAVING和WHERE的差别
where在数据分组前进行过滤,having在数据分组后进行过滤
- 分组和排序
只需要知道order by在group by 之后使用
- select子句顺序
select->from->where->group by->having->order by->limit
十二、使用子查询
本章介绍什么是子查询以及如何使用它们
- 利用子查询进行过滤
需求:列出订购物品TNT的所有客户信息
此时有张订单信息表、订货id-客户id表、客户信息表
可以分三步进行查询,先通过订单信息表查询TNT商品的订单id,在通过订单id查询客户id,再通过客户id查询客户信息
将上述三个步骤合为一步:
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'));
注意:
实际在使用过程中由于性能限制,不建议嵌套太多的子查询
- 作为计算字段使用子查询
需求:需要显示customers表中每个客户的订单总数
分两步进行查询,从customers表中检索出客户id,根据客户id去订单表中查询订单并统计数目
select cust_name,cust_state,(select count(*)
from orders
where orders.cust_id=customers.cust_id) as orders
from customers
order by cust_name;
其中orders是一个计算字段,对于从customers表中查询的每个客户都执行依次
也就是在customers表中查询的customers.cust_id去order表中做查询
注意:
where子句中必须使用全限定列名
《MySQL必知必会》知识汇总二的更多相关文章
- MySql必知必会实战练习(二)数据检索
在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...
- Elasticsearch必知必会的干货知识二:ES索引操作技巧
该系列上一篇文章<Elasticsearch必知必会的干货知识一:ES索引文档的CRUD> 讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建.更改.迁移.查询配 ...
- mysql必知必会
春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...
- 《MySQL必知必会》整理
目录 第1章 了解数据库 1.1 数据库基础 1.1.1 什么是数据库 1.1.2 表 1.1.3 列和数据类型 1.1.4 行 1.1.5 主键 1.2 什么是SQL 第2章 MySQL简介 2.1 ...
- 脑残式网络编程入门(三):HTTP协议必知必会的一些知识
本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...
- 《mysql 必知必会》 速查指南
目录 增 添加一整行 插入多行 删 删除指定行 删除所有行 改 查 简单检索 结果筛选 结果排序 结果过滤 创建字段 处理函数 数据分组 其他高级用法 文章内容均出自 <MySQL 必知必会&g ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 《MySQL 必知必会》读书总结
这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...
- 《MySQL必知必会》[01] 基本查询
<MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...
- mysql必知必会系列(一)
mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...
随机推荐
- Elasticsearch集群规模和容量规划的底层逻辑
转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484628&idx=1&sn=666e416ae ...
- Logstash:解析 JSON 文件并导入到 Elasticsearch 中
转载自:https://elasticstack.blog.csdn.net/article/details/114383426 在今天的文章中,我们将详述如何使用 Logstash 来解析 JSON ...
- Prometheus告警处理
在Prometheus Server中定义告警规则以及产生告警,Alertmanager组件则用于处理这些由Prometheus产生的告警.Alertmanager即Prometheus体系中告警的统 ...
- Xorg+LXDE迁移到Xwayland(同时支持Waydroid和Wine)记录
系统环境: Debian bullseye Display Manager:无 桌面环境:LXDE Xorg 为什么使用Xwayland Wayland+Xwayland可以很好的支持Wayland ...
- WinDbg Preview安装以及符号表配置
1.安装WinDbgPreview 在Microsoft Store直接搜索windbg就可以下载. 2.配置符号服务器 2.1 符号 符号是方便调试程序的文件,通常是pdb文件.一个模块(可执行程序 ...
- docker搭建个人云盘可道云kodbox
1.拉取kodbox镜像 (文章最后有自己编写yml文件可直接搭建) docker pull tznb/kodbox:1.15 2. 创建并启动kodbox docker run -d -it --n ...
- 在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
文章目录 1.实现的效果 2.前端代码 3.后端controller代码 4.servie层代码 5.serviceImpl层代码 6.mapper层代码 7.xml中的sql语句 8.遇到的问题 8 ...
- 齐博x1嵌套-循环栏目,并列出子栏目下的内容
嵌套,循环栏目,并列出子栏目下的内容. 代码如下: <div class="channel-list"> <div class="row"&g ...
- 10.异步mysql
python中操作mysql连接.操作.断开都是网络IO #安装支持异步aiomysql的模块 pip3 install aiomysql async def execute(): # 网络IO操作, ...
- 下一代工具链「GitHub 热点速览 v.22.43」
作为一个前端工程师,你这周被下一代的前端工具链 Turbo 刷屏了吗?不只是 Turbo 这个小工具,作为一个社区生产力工具,本周思否还开源了他们的问答系统 answer,能直接用上相关的技术标签也省 ...