六、用通配符进行过滤

本章介绍什么是通配符、如何使用通配符以及怎样使用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必知必会》知识汇总二的更多相关文章

  1. MySql必知必会实战练习(二)数据检索

    在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...

  2. Elasticsearch必知必会的干货知识二:ES索引操作技巧

    该系列上一篇文章<Elasticsearch必知必会的干货知识一:ES索引文档的CRUD> 讲了如何进行index的增删改查,本篇则侧重讲解说明如何对index进行创建.更改.迁移.查询配 ...

  3. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  4. 《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 ...

  5. 脑残式网络编程入门(三):HTTP协议必知必会的一些知识

    本文原作者:“竹千代”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.前言 无论是即时通讯应用还是传统的信息系统,Http协议都是我们最常打交 ...

  6. 《mysql 必知必会》 速查指南

    目录 增 添加一整行 插入多行 删 删除指定行 删除所有行 改 查 简单检索 结果筛选 结果排序 结果过滤 创建字段 处理函数 数据分组 其他高级用法 文章内容均出自 <MySQL 必知必会&g ...

  7. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  8. 《MySQL 必知必会》读书总结

    这是 <MySQL 必知必会> 的读书总结.也是自己整理的常用操作的参考手册. 使用 MySQL 连接到 MySQL shell>mysql -u root -p Enter pas ...

  9. 《MySQL必知必会》[01] 基本查询

    <MySQL必知必会>(点击查看详情) 1.写在前面的话 这本书是一本MySQL的经典入门书籍,小小的一本,也受到众多网友推荐.之前自己学习的时候是啃的清华大学出版社的计算机系列教材< ...

  10. mysql必知必会系列(一)

    mysql必知必会系列是本人在读<mysql必知必会>中的笔记,方便自己以后查看. MySQL. Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据 ...

随机推荐

  1. Elasticsearch集群规模和容量规划的底层逻辑

    转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484628&idx=1&sn=666e416ae ...

  2. Logstash:解析 JSON 文件并导入到 Elasticsearch 中

    转载自:https://elasticstack.blog.csdn.net/article/details/114383426 在今天的文章中,我们将详述如何使用 Logstash 来解析 JSON ...

  3. Prometheus告警处理

    在Prometheus Server中定义告警规则以及产生告警,Alertmanager组件则用于处理这些由Prometheus产生的告警.Alertmanager即Prometheus体系中告警的统 ...

  4. Xorg+LXDE迁移到Xwayland(同时支持Waydroid和Wine)记录

    系统环境: Debian bullseye Display Manager:无 桌面环境:LXDE Xorg 为什么使用Xwayland Wayland+Xwayland可以很好的支持Wayland ...

  5. WinDbg Preview安装以及符号表配置

    1.安装WinDbgPreview 在Microsoft Store直接搜索windbg就可以下载. 2.配置符号服务器 2.1 符号 符号是方便调试程序的文件,通常是pdb文件.一个模块(可执行程序 ...

  6. docker搭建个人云盘可道云kodbox

    1.拉取kodbox镜像 (文章最后有自己编写yml文件可直接搭建) docker pull tznb/kodbox:1.15 2. 创建并启动kodbox docker run -d -it --n ...

  7. 在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作

    文章目录 1.实现的效果 2.前端代码 3.后端controller代码 4.servie层代码 5.serviceImpl层代码 6.mapper层代码 7.xml中的sql语句 8.遇到的问题 8 ...

  8. 齐博x1嵌套-循环栏目,并列出子栏目下的内容

    嵌套,循环栏目,并列出子栏目下的内容. 代码如下: <div class="channel-list"> <div class="row"&g ...

  9. 10.异步mysql

    python中操作mysql连接.操作.断开都是网络IO #安装支持异步aiomysql的模块 pip3 install aiomysql async def execute(): # 网络IO操作, ...

  10. 下一代工具链「GitHub 热点速览 v.22.43」

    作为一个前端工程师,你这周被下一代的前端工具链 Turbo 刷屏了吗?不只是 Turbo 这个小工具,作为一个社区生产力工具,本周思否还开源了他们的问答系统 answer,能直接用上相关的技术标签也省 ...