mysql笔记:9. 数据查询

文章目录

  • 一、SELECT语句
  • 二、简单查询
    • 1. 查询表所有数据
    • 2. 查询部分数据
    • 3. 计算结果
    • 4. 列别名
    • 5. 去除重复项
    • 6. 表别名
    • 7. LIMIT限制数据
  • 三、WHERE子句
    • 1. 比较查询条件
    • 2. BETWEEN AND范围查询
    • 3. IN查询
    • 4. LIKE匹配
    • 5. 空数据查询
    • 6. AND多条件查询
    • 7. OR多条件查询
  • 四、操作查询结果
    • 1. 排序
    • 2. 分组
  • 五、聚合函数统计
  • 六、多表嵌套
    • 1. 比较运算符
    • 2. IN
    • 3. ANY
    • 4. ALL
    • 5. SOME
    • 6. EXISTS
  • 七、多表内连接
  • 八、多表外连接
  • 九、排序函数
    • 1. ROW_NUMBER()
    • 2. RANK()
    • 3. DENSE_RANK()
    • 4. NTILE()
  • 十、正则表达式

数据库管理系统的一个最重要功能就是数据查询,数据查询不应只是简单返回数据库中存储的数据,还应该根据需要对数据进行筛选,以及确定数据以什么样的格式显示。MySQL提供了功能强大、灵活的语句来实现这些操作。

一、SELECT语句

从数据库表中查询数据的基本语句为SELECT语句,语法如下:

SELECT 属性列表
FROM 表名和视图
{WHERE 条件表达式}
{GROUP BY 属性名}
{HAVING 条件表达式}
{ORDER BY 属性名 ASC | DESC}

所有被使用的子句必须按语法说明中显示的顺序严格地排序。

二、简单查询

1. 查询表所有数据

  1. 列出表中所有字段
    在SELECT语句的属性列表中列出查询表的所有字段,从而可以查询表中所有数据。
  2. 使用星号通配符
    SELECT语句的属性列表可以为星号*,语法格式:
SELECT * FROM table_name;
SELECT * FROM table_name\G;

在执行SQL语句时,有时返回的数据中字段非常多,无法在CMD窗口的一行全部展示,而如果将字段名称显示在多行,会导致字段下的数据不能和字段名称展示在同一列,显示结果非常混乱。
使用结束符\G,可以将结果以纵向结构显示,在字段非常多时,能让显示结果更加整齐美观。

2. 查询部分数据

在SELECT语句的属性列表中指定要查找的字段名称,可以有针对性的查询结果。

MySQL中的SQL语句是不区分大小写的。因此,SELECT和select是相同的。很多书籍推荐将关键字大写,表名和数据列使用小写。
我认为,应该全部使用小写,并且我在平时的工作中也是这么做的。理由如下:
一、使用大写+小写需要切换输入法,降低开发速度,所有全部小写可以更快的编写SQL语句。
二、时间相同的情况下,单词小写的识别正确率高于大写的正确率,所以小写的SQL语句更容易识别和维护。

3. 计算结果

在查询时,可以根据需要使用算术运算符或逻辑运算符对查询结果进行处理。
例如,表emp中有员工姓名name和当前工资salary,可以查询员工工资和调薪20%以后的工资。

SELECT name, salary, salary + salary*0.2 AS salary_new FROM emp;

4. 列别名

显示查询结果时,选择的列通常是以原表中的列名作为标题。但列名通常比较简短、甚至在一些情况下含义也模糊。为改善查询结果的显示,可以在SELECT语句的列名后使用AS 新列名重新命令该列。

AS:关键字。可有可无。

5. 去除重复项

使用DISTINCT选项可以在查询结果中删除重复项。

6. 表别名

如果要查询的数据表名称较长时使用不太方便,可以为表取一个别名来代替,简化查询SQL。

7. LIMIT限制数据

当数据表中包含大量数据时,可以通过指定显示记录数限制返回结果集中的行数。
LIMIT用法有两种:

  1. 指定初始位置
    LIMIT offset, row_count
    offset指定返回的第一行的偏移量。初始行的偏移量是0,不是1。
    row_count指定返回的行数的最大值。
  2. 不指定初始位置
    LIMIT row_count

三、WHERE子句

WHERE子句用于给定源表和视图中记录的筛选条件,只能符合筛选条件的记录才能入选结果集。

1. 比较查询条件

在查询条件中使用比较运算符进行比较。

2. BETWEEN AND范围查询

使用BETWEEN AND可以进行范围查询,可以指定范围的开始值和结束值。如果记录的字段值满足指定的范围,则记录被返回。
相反,可以在BETWEEN AND前加关键字NOT,表示指定范围之外的值。

BETWEEN匹配范围中的所有值,包括开始值和结束值。

3. IN查询

使用IN查询时,将所有检索条件放进括号里,不同条件用逗号分隔,只要满足条件范围内的任意一个值即为匹配项。
相反,可以使用关键字NOT检索不在条件范围内的记录。

4. LIKE匹配

使用LIKE可以匹配字符串是否相等。

[NOT] LIKE '字符串'

字符串参数可以是一个完整的字符串,也可以是包含%或_的通配符。

  • %:匹配任意长度的字符串,可以是空字符串。
  • _:匹配任意单个字符。

5. 空数据查询

数据表中的某些列可能包含空值,它不同于0,也不同于空字符串。查询时可以使用IS NULL子句。
相反,可以使用IS NOT NULL查询不为空的记录。

6. AND多条件查询

AND关键字可以用来联合多个条件进行查询,只能同时满足所有条件的记录才会被查询出来。

7. OR多条件查询

OR关键字也可以用来联合多个条件进行查询,只要满足任意一个条件,记录就会被查询出来。

四、操作查询结果

1. 排序

使用ORDER BY可以对记录进行排序。

ORDER BY column_name [ASC | DESC]

默认情况下,按照ASC方式进行排序。
如果要排序的字段值是空值时,按升序排序时,含空值的记录将最先显示,可以理解为空值是该字段的最小值;而按降序排序时,字段为空值的记录将最后显示。

2. 分组

分组查询是对数据按照某个或多个字段进行分组。基本语法:

[GROUP BY column_name] [HAVING <条件表达式>]
  • HAVING子句指定分组显示时需要满足的限定条件
  • GROUP BY子句通常和集合函数一起使用。

五、聚合函数统计

有时候并不需要返回实际表中的数据,只是对数据进行统计。

函数作用
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值的和

COUNT()函数统计查询结果中包含的记录行的总数。其使用有三种:

  • COUNT(1):统计表的所有记录数,包含字段为NULL的记录
  • COUNT(*):统计表的所有记录数,无论某列是否为空值
  • COUNT(column_name):计算指定列的总行数,忽略空值的行

一般情况下,COUNT(1)的执行效率要优于COUNT(*)。因为COUNT(1)不需要遍历整个表,因为它只需要统计满足条件的行数,而COUNT(*)要扫描整个表。
另外,MyISAM引擎不支持事务,它的锁是表级锁,在该引擎内使用COUNT(*)更快。而InnoDB支持事务,支持行级锁,使用COUNT(1)更快。

六、多表嵌套

多表嵌套查询又称为子查询,在SELECT子句中先计算子查询,其结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表。

1. 比较运算符

嵌套查询中可以使用的比较运算符有<、<=、=、>=、!=等。

2. IN

使用IN关键字嵌套查询时,内层查询语句仅仅返回一个数据列。这个列里的值将提供给外层查询语句进行比较。

3. ANY

通常使用比较运算符来连接ANY得到的结果,用于比较某一列的值是否全部大于 ANY后面子查询中的最小值或小于ANY后面嵌套查询中的最大值。

4. ALL

使用ALL关键字时需要同时满足所有内层查询条件。

5. SOME

SOME的用法与ANY类似,但意义不同。SOME通常用于比较满足查询结果中的任意一个值,而ANY要满足所有值才可以。
在SOME前面使用=时,等价于IN的用途。

6. EXISTS

EXISTS关键字是存在的意思,应用于嵌套查询中,只要嵌套查询返回的结果为空,返回结果就是TRUE,此时外层查询语句将进行查询;否则就是返回FALSE,外层语句将不进行查询。
NOT EXISTS与EXISTS使用方法相同,但结果相反。

EXIST和NOT EXIST的结果只取决于是否会返回行,而不取决于这些行的内容,所以子查询输入列表通常是无关紧要的。

七、多表内连接

连接是关系数据库模型的主要特点,连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。
语法格式如下:

SELECT column_name1, column_name2, ...
FROM table_name1 INNER JOIN table_name2
ON conditions;

八、多表外连接

几乎所有的查询语句,查询结果全部都是需要符合条件才能查询出来的。换句话说,如果执行查询语句后没有符合条件的结果,那么在结果中就不会有任何记录。外连接查询则与之相反,通过外连接查询,可以在查询出符合条件的结果后显示出某张表中不符合条件的数据。

SELECT column_name1, column_name2, ...
FROM table_name1 LEFT|RIGHT|FULL OUTER JOIN table_name2
ON conditions;
  • LEFT OUTER JOIN(左连接):左外连接,使用左外连接时得到的查询结果中,除了符合条件的查询结果外,还要加上左表中余下的数据。
  • RIGHT OUTER JOIN(右连接):右外连接,使用右外连接时得到的查询结果中,除了符合条件的查询结果外,还要加上右表中余下的数据。
  • FULL OUTER JOIN(全连接):全外连接,使用全外连接时得到的查询结果中,除了符合条件的查询结果外,还要加上左表和右表中余下的数据。

九、排序函数

在MySQL中,可以对返回的查询结果排序,排序函数提供了一种按升序的方式组织输出结果集。

1. ROW_NUMBER()

ROW_NUMBER()函数为每条记录增添递增的顺序数值序号,即便存在相同的值也是递增序号。
基本语法:

ROW_NUMBER() OVER ([PARTITION BY <expression_list>] ORDER BY <expression_list>
)
  • PARTITION BY:可选项,用于将结果集分隔成不同的分区。每个分区都会从1重新开始编号。
  • ORDER BY:必选项,用于指定结果集的排序顺序。

2. RANK()

如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名。RANK()函数并不总返回连续整数。

3. DENSE_RANK()

DENSE_RANK()函数为结果集或分区中的每一行分配排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。即相同的数据序号相同,接下来顺序递增。

DENSE_RANK() OVER (PARTITION BY <expression>[{,<expression>...}]ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
) 

4. NTILE()

NTILE(N)函数用来将查询结果中的记录分为N组。各个组有编号,编号从1开始。对于每一行,NTILE()函数将返回此行所属的组的编号。

十、正则表达式

正则表达式是一种文本模式,包括普通字符和特殊字符(称为元字符)。正则表达式的查询能力比普通字符的查询能力更强大,而且更加灵活,因此可以应用于非常复杂的数据查询。
语法如下:

属性名 REGEXP '匹配方式'

匹配方式 参数中有很多模式匹配字符,它们分别表示不同的意思。

字符描述
^匹配字符串开始的位置
$匹配字符串结束的位置
.匹配字符串中的任意一个字符,包括回车和换行
[集合]匹配集合中的任何一个字符
[^集合]匹配除了集合以外的任意一个字符
*代表多个该符号之前的字符,包括0和1个
+代表多个该符号之前的字符,包括1个
字符串{n}字符串出现n次
字符串{m, n}字符串至少出现m次,最多n次

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

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

相关文章

FFmpeg--AAC音频解码流程

文章目录 AAC 组成函数分析读aac帧写aac帧aac的head参数设置 运行结果 AAC 组成 AAC音频格式&#xff1a;是⼀种由MPEG-4标准定义的有损⾳频压缩格式 ADTS:是AAC音频的传输流格式 AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成 每⼀帧的ADTS的头⽂件都包含了⾳频的采…

llama-index调用qwen大模型实现RAG

背景 llama-index在实现RAG方案的时候多是用的llama等英文大模型&#xff0c;对于国内的诸多模型案例较少&#xff0c;本次将使用qwen大模型实现llama-index的RAG方案。 环境配置 &#xff08;1&#xff09;pip包 llamaindex需要预装很多包&#xff0c;这里先把我成功的案例…

计算机网络——概述

计算机网络——概述 计算机网络的定义互连网&#xff08;internet&#xff09;互联网&#xff08;Internet&#xff09;互联网基础结构发展的三个阶段第一个阶段——APPANET第二阶段——商业化和三级架构第三阶段——全球范围多层次的ISP结构 ISP的作用终端互联网的组成边缘部分…

Python 映射函数map()详解

一、映射函数定义 它用于对容器中的元素进行映射&#xff08;或变换&#xff09; 二、映射函数语法 map(function, iterable) function&#xff1a;一个提供变换规则的函数&#xff0c;返回变换之后的元素iterable&#xff1a;一个或多个序列&#xff08;可迭代对象&#xff09…

新零售SaaS架构:订单履约系统架构设计(万字图文总结)

什么是订单履约系统&#xff1f; 订单履约系统用来管理从接收客户订单到将商品送达客户手中的全过程。 它连接了上游交易&#xff08;客户在销售平台下单环&#xff09;和下游仓储配送&#xff08;如库存管理、物流配送&#xff09;&#xff0c;确保信息流顺畅、操作协同&…

【ElasticSearch】es索引、映射、文档基本操作复杂查询

各位小伙伴们大家好&#xff0c;欢迎来到这个小扎扎的ElasticSearch专栏&#xff0c;本篇博客由B战尚硅谷的ElasticSearch视频总结而来&#xff0c;鉴于 看到就是学到、学到就是赚到 精神&#xff0c;这波依然是血赚 ┗|&#xff40;O′|┛ &#x1f306; 内容速览 1 es数据格…

PDE小题

给出二阶偏微分方程 u t t − u x x − u x y x 2 t u_{tt}-u_{xx}-u_{xy}x^2t utt​−uxx​−uxy​x2t 的三维系数矩阵 对于二阶偏微分方程 u t t − u x x − u x y x 2 t u_{tt} - u_{xx} - u_{xy} x^2t utt​−uxx​−uxy​x2t&#xff0c;我们可以通过分析每个项的系…

浏览器本地存储localstorage,sessionStorage

浏览器本地存储localstorage&#xff0c;sessionStorage 文章目录 一、localstoragelocalstorage存储localstorage读取localstorage删除localstorage清空 二、sessionStoragelocalstorage读取localstorage删除localstorage清空 总结 一、localstorage 即使浏览器关闭&#xf…

替换模板变量生成测试用例

需求&#xff1a; 针对指标的查值有固定的文法例如 ${org_name}的业务量是多少&#xff0c;需要替换变量来生成测试用例 package net.yto.com.testplatform;import com.alibaba.fastjson.JSON;import java.util.ArrayList; import java.util.List;public class TestMain {publi…

【node版本问题】运行项目报错 PostCSS received undefined instead of CSS string

最近该项目没有做任何修改&#xff0c;今天运行突然跑不起来报错了 PostCSS received undefined instead of CSS string 【原因】突然想起来期间有换过 node 版本为 16.17.1 【解决】将 node 版本换回之前的 14.18.0 就可以了

vue3中基于路由层面和组件层面进行用户角色及权限控制的方法解析

文章目录 一、权限控制二、路由层面控制三、组件层面控制1、使用自定义指令2、使用方法控制3、封装一个权限控制组件来实现组件层面控制权限3.1、组件页面 Authority.vue3.2、使用页面 app.vue3.3、效果预览 一、权限控制 随着前端技术的不断发展&#xff0c;越来越多的前端框…

Linux命令记不住?保姆级教程来了

在软件开发过程中&#xff0c;Linux操作系统因其稳定性、安全性和高效性而备受青睐。作为开发者&#xff0c;熟练掌握Linux常用命令&#xff0c;不仅可以提高工作效率&#xff0c;还能更好地管理服务器和进行代码部署。本文将介绍一些开发常用的Linux命令及其应用场景&#xff…

JavaScript数组常见实例方法:forEach、filter、map、reduce、find、every等

博客背后的故事 其实我23年7月就学过这些数组方法了&#xff0c;但是为什么24年3月才做笔记呢&#xff1f;这就要讲一个小故事了&#xff08;不想听故事的同学自行拖动滚动条&#xff09; 24年年初我和两个队友合作开发一个小程序。JavaScript中数组的实例方法我已经学了很久…

Docker下Jenkins打包java项目并部署

docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…

Java高频面试之Redis篇

有需要互关的小伙伴,关注一下,有关必回关,争取今年认证早日拿到博客专家 谈下你对 Redis 的了解&#xff1f; Remote Dictionary Server 远程字典服务 高性能:redis是一个内存数据库,基于内存的读写丰富的数据结构支持持久化支持集群 Redis 一般都有哪些使用场景&#xff1f; …

VIM编译器的安装

文章目录 前言一、VIM软件安装二、遇到问题三、VIM使用1.文档创建命令touch2.VIM编译器输入模式3.VIM编译器指令模式3.VIM编译器底行模式4.VIM编译器使用小技巧 前言 &#x1f4a6; 我们如果要在终端模式下进行文本编辑或者修改文件就可以使用 VIM 编辑器&#xff0c;VIM 编辑…

treeview控件的应用

1.分类 treeview控件的基本应用&#xff0c;可以用于商品分类、文件分类等等。 2.辅助决策 treeview可以组成决策树&#xff0c;用来帮助人们做选择。比如说今天中午吃什么菜&#xff1f; 如果我来选择的话&#xff0c;那就是&#xff1a;不吃辣-鲁菜-糖醋鲤鱼。 3.求解算…

AD1102 小封装的3.7V锂电池转干电池使用的充放电管理芯片 替代传统干电池、镍氢电池

AD1102是一款锂电池充放电管理专用芯片。充电工作时&#xff0c;可以为 3.7V锂电池进行充电&#xff0c;电流最高可配置 1A。放电工作时&#xff0c;采用开关频率1MHz同步降压转换器进行放电&#xff0c;放电电流可以达到 3A。内部集成欠压保护、短路保护、过温保 护功能。 …

二 centos 7.9 磁盘挂载

上一步 一 windso10 笔记本刷linux cent os7.9系统-CSDN博客 笔记本有两个盘,系统装在128G的系统盘上,现在把另外一个盘挂载出来使用 lsblk 发现磁盘已经分好了,直接挂载就好了,参考文章:Centos7.9 挂载硬盘_centos7.9挂载硬盘-CSDN博客 永久挂载 lsblk -f分区格式化 mkfs…

XUbuntu22.04之reboot关机无效, 定制重启和关机(二百二十)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…