【数据库——MySQL】(6)查询(1)

目录

  • 1. 数据库查询
    • 1.1 输出项为列名
    • 1.2 输出项为表达式
    • 1.3 输出内容变换
    • 1.4 消除输出项的重复行
    • 1.5 聚合函数
  • 2. 查询条件:逻辑条件
    • 2.1 比较运算
    • 2.2 模式匹配
    • 2.3 范围限定
    • 2.4 空值判断
  • 3. 分组
    • 3.1 基本分组
    • 3.2 分组汇总
  • 4. 分组后筛选
  • 5. 输出行排序
    • 5.1 ORDER BY
    • 5.2 LIMIT
  • 参考书籍

1. 数据库查询

查询语法如下:

SELECT [ALL|DISTINCT|DISTINCTROW] 输出项, ...[FROM 表名|视图名]			/*指定数据源*/[WHERE 条件表达式]			/*指定查询条件*/[GROUP BY ... ]				/*指定分组项*/[HAVING 条件]				/*指定分组后筛选条件*/[ORDER BY ...]				/*指定输出行排列依据项*/[LIMIT 行数]					/*指定输出行范围*/[UNION SELECT语句]			/*数据源联合*/[WINDOWS ...]				/*窗口定义*/

1.1 输出项为列名

之后的例子都会用 library 这个数据库来进行演示,数据库的创建见 图书管理系统实战源代码 。

USE library;SELECT id, `name`, press FROM book;

在这里插入图片描述

:由于 name 是关键字,为了查询时避免出错,可将关键字用 `` 括起来。

1.2 输出项为表达式

USE library;SELECT id AS 学号, `name` AS 姓名, FORMAT(grade-1,0) AS 用户星级(扣一分) FROM borrowerWHERE borrowedCount > 0;

在这里插入图片描述

可以用 AS 定义一个别名作为新的计算结果列的名称。

1.3 输出内容变换

在对表进行查询时,输出列显示内容可以通过 CASE 语句进行变换。

USE library;SELECT id AS 学号,CASEWHEN LEFT(id,1) = '1' THEN '教师'ELSE '学生'END AS 类别FROM borrower;

在这里插入图片描述

1.4 消除输出项的重复行

查询结果显示“输出项”可能会出现重复行,可以使用 DISTINCTDISTINCTROW 关键字消除结果集中的重复行。

USE library;SELECT grade AS 星级 FROM borrower;
SELECT DISTINCT grade AS 星级 FROM borrower;	

在这里插入图片描述

1.5 聚合函数

输出项为表达式中用到的系统函数仅仅是对包含的列值进行处理,而这里的“聚合函数”处理的是查询得到的行和列。

函数名说明
COUNT求记录行数
MAX求最大值
MIN求最小值
SUM求表达式的和
AVG求表达式的平均值
STD或STDDEV求表达式列中所有值的标准差
VARIANCE求表达式列中所有值的方差
GROUP_CONCAT产生由属于一组的列值连接组合而成的字符串

2. 查询条件:逻辑条件

WHERE 子句指定查询条件。

表达式 <比较运算符> 表达式						/*比较运算*/
| 匹配列 [NOT] LIKE 表达式 [ESCAPE '转义字符']				/*模式匹配*/
| 匹配列 [NOT] [REGEXP | RLIKE] 正则表达式				/*模式匹配*/
| 表达式 [NOT] BETWEEN 表达式 AND 表达式				/*范围限定*/
| 表达式 [NOT] IN (值, ...)						/*范围限定*/
| 表达式 IS [NOT] NULL						/*空值判断*/
| 表达式 [NOT] IN (SELECT语句)					/*IN子查询*/
| 表达式 比较运算符 ALL | SOME | ANY (SELECT语句)			/*比较子查询*/
| [NOT] EXISTS (SELECT语句)						/*EXISTS子查询*/
| 逻辑值

2.1 比较运算

USE library;SELECT * FROM bookWHERE publishDate >= 2017 AND publishDate < 2019;

在这里插入图片描述

2.2 模式匹配

模式匹配包括两种形式:使用 LIKE 进行简单模式匹配和用 REGEXP 实现正则表达式匹配。

  1. LIKE 简单模式匹配
    LIKE 运算符用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是 char、varchar、text、datetime 等类型的数据,返回逻辑值 TRUEFALSE

    匹配列 [NOT] LIKE 表达式 [ESCAPE '转义字符']
    

    在使用LIKE将匹配列与表达式进行模式匹配时,常使用特殊符号_和%,它们可用来进行模糊查询。其中,“%”代表0个以上字符,“_”则代表单个字符。

    USE library;SELECT * FROM bookWHERE id LIKE '10110___5%';		# 3个'_'连字符
    

    在这里插入图片描述

  2. REGEXP 正则表达式匹配
    REGEXP 运算符通过正则表达式来执行更复杂的字符串匹配运算,它是 MySQLSQL 标准的一种扩展,功能极为强大,另外,REGEXP 还有一个同义词是 RLIKE

    匹配列 [NOT] [REGEXP | RLIKE] 正则表达式
    

    不同于 LIKE 运算符仅有“_”和“%”两个匹配符,REGEXP 拥有更多具有特殊含义的符号,参见下表。

    特殊字符含义
    ^匹配字符串的开始部分
    $匹配字符串的结束部分
    .匹配任何一个字符(包括回车和新行)
    *匹配星号之前的0个或多个字符的任何序列
    +匹配加号之前的1个或多个字符的任何序列
    ?匹配问号之前0个或多个字符
    {n}匹配括号前的内容出现n次的序列
    ()匹配括号里的内容
    [abc]匹配方括号里出现的字符串abc
    [a-z]匹配方括号里出现的a~z之间的1个字符
    [^a-z]匹配方括号里出现的不在a~z之间的1个字符
    |匹配符号左边或右边出现的字符串
    [[…]]匹配方括号里出现的符号(如空格、换行、括号、句号、冒号、加号、连字符等)
    [[:<:] 和 [[:>:]]匹配一个单词的开始和结束
    [[: :]匹配方括号里出现的字符中的任意一个字符

2.3 范围限定

  1. BETWEEN…AND 限定范围

    表达式 [NOT] BETWEEN 表达式1 AND 表达式2
    

    当不使用 NOT 时,若表达式的值在表达式1值与表达式2值(表达式1≤表达式2)之间,返回 TRUE,否则返回 FALSE ;使用 NOT 时,返回结果刚好相反。

    USE library;SELECT * FROM bookWHERE publishDate BETWEEN 2017 AND 2018;
    

    在这里插入图片描述

  2. IN… 限定范围
    使用 IN 运算符可以指定一个值表,其中列出所有可能的值。

    表达式 [NOT] IN (值, ...)
    

    当不使用 NOT 时,若表达式的值与值表中的任一个匹配,即返回 TRUE,否则返回 FALSE;使用 NOT 时,表达式的值与值表中的没有一个匹配,即返回 TRUE,否则返回 FALSE

    USE library;SELECT * FROM bookWHERE publishDate IN (2017, 2018);
    

    在这里插入图片描述

2.4 空值判断

使用 IS NULL 运算符判定一个表达式的值是否为空。

表达式 IS [NOT] NULL

当不使用 NOT 时,若表达式的值为空,返回 TRUE,否则返回 FALSE;使用 NOT 时,结果刚好相反。

3. 分组

GROUP BY 子句主要用于对查询结果按行分组:

GROUP BY 列名 | 表达式, ... [WITH ROLLUP]

说明:

  1. 列名或表达式就是分组依据,可以是一个或多个,列名或表达式相同的为同一组,作为统计汇总的依据。
  2. WITH ROLLUP 指定在结果集内组后还包含汇总行。
  3. 在系统默认状态下,SQL_MODE 设置包含 sql_mode = only_full_group_by,包含“GROUP BY x”的 SELECT 输出项,除了 x 项,其他只能是采用聚合函数的项。否则需要在 SQL_MODE 设置中不能包含 sql_mode = only_full_group_by

3.1 基本分组

SELECT category AS 类别, SUM(borrowedCount) AS SUM(当前借书数) FROM borrowerGROUP BY category;

在这里插入图片描述

3.2 分组汇总

GROUP BY 后的列或者表达式包含一个以上,此时的分组就出现了多个层次。

SELECT category AS 类别, sex AS 性别, SUM(borrowedCount) AS SUM(当前借书数) FROM borrowerGROUP BY category, sex;

在这里插入图片描述

4. 分组后筛选

HAVING 子句的目的与 WHERE 子句一样均为定义筛选条件,不同的是 WHERE 子句是用来在 FROM 子句之后选择行,而 HAVING 子句则是用来在 GROUP BY 子句后选择行。不过 HAVING 子句中的条件可以包含聚合函数,而 WHERE 子句则不可以。

语法格式为:

SELECT...GROUP BY ...HAVING 条件

示例如下:

SELECT category AS 类别, SUM(borrowedCount) AS SUM(当前借书数) FROM borrowerGROUP BY category;
SELECT category AS 类别, SUM(borrowedCount) AS SUM(当前借书数) FROM borrowerGROUP BY categoryHAVING SUM(borrowedCount) > 5;

在这里插入图片描述

5. 输出行排序

5.1 ORDER BY

ORDER BY 子句指定查询结果中的记录行按指定内容顺序排列。

ORDER BY 列名 | 表达式 | 位置序号 [ASC | DESC], ...

说明: ORDER BY 子句后可以是一个或者一个以上的列、表达式或位置序号,位置序号为一正整数,表示按结果表中该位置上的列排序。

SELECT id AS 学号, `name` AS 姓名, borrowedAll AS 已借书籍数FROM borrowerWHERE LEFT(id,1)='2'ORDER BY 3 DESC;

在这里插入图片描述

说明:

  1. 使用 ORDER BY 3 表示对 SELECT 列清单上的第 3 列(即“已借书籍数”列)进行排序。
  2. 关键字 DESC 表示降序排列,ASC 则表示升序排列,不选该项,系统默认为 ASC
    ORDER BY 子句可以与 GROUP BY 配合使用,且可用在多个表上,对符合要求的记录先分组再排序
SELECT category AS 类别, SUM(borrowedAll) AS SUM(已借书籍数)FROM borrowerGROUP BY categoryORDER BY SUM(已借书籍数) ASC;

在这里插入图片描述

5.2 LIMIT

LIMIT 子句主要用于限制被 SELECT 语句返回的行数。

LIMIT [起始行,] 行数 | 行数 OFFSET起始行

“起始行”和“行数”都必须是非负的整数,返回指定“起始行”开始的“行数”条记录。起始行的偏移量为 0,而不是 1

SELECT id AS 学工号, `name` AS 姓名, borrowedAll AS 已借书籍数 FROM borrowerORDER BY 已借书籍数 DESC LIMIT 2,4;

在这里插入图片描述

由于查询的知识点较多,所以将会分为几部分来进行分享。

参考书籍

《MySQL实用教程(第4版)》

上一篇文章:【数据库——MySQL】(5)运算符、表达式和系统函数
下一篇文章:【数据库——MySQL】(7)查询(2)

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

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

相关文章

识别车牌的代码分享

接口 接口为车牌的自动定位和识别,返回地域编号和车牌号车牌颜色: # pip install poocr import poocr # 可以填写本地图片的地址:img_path,也可以填写在线图片的地址:img_url # 如果2个都填,则只用在线图片img_url # configPath是配置文件的信息,可以不填 Number…

找高清、4K图片素材就上这6个网站,免费下载!

不会还有人找图片素材直接上网去搜吧&#xff0c;告诉你们6个网站&#xff0c;轻松找到想要的图片素材&#xff0c;不仅质量高&#xff0c;还可以免费下载&#xff0c;重点是还可以商用。赶紧收藏起来吧~ 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要为…

Scrapy+Selenium自动化获取个人CSDN文章质量分

前言 本文将介绍如何使用Scrapy和Selenium这两个强大的Python工具来自动获取个人CSDN文章的质量分数。我们将详细讨论Scrapy爬虫框架的使用&#xff0c;以及如何结合Selenium浏览器自动化工具来实现这一目标。无需手动浏览每篇文章&#xff0c;我们可以轻松地获取并记录文章的…

查询PCIE设备的VID,DID,SVID,SDID

查询PCIE设备的VID,DID,SVID,SDID &#xff08; Vendor ID、 Device ID、Subsystem Vendor ID、Subsystem Device ID &#xff09; [rootlocalhost ~]# lspci -s 04:00.0 -xxxvvv 04:00.0 Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)C…

Docker部署ElasticSearch数据库+analysis-ik分词器插件

文章目录 一、部署ElasticSearch数据库二、添加分词器插件(analysis-ik)三、测试ElasticSearch数据库analysis-ik分词器插件 一、部署ElasticSearch数据库 1、准备工作 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6 Pwd"/data/software/elasticse…

Casper Network 构建企业级区块链生态的野望

Casper Network 是基于 Layer1 且图灵完备 Wasm 的智能合约平台&#xff0c;它由唯一可操作的 CBC-Casper Proof-of-Stake (PoS) 共识算法&#xff08;称为 Highway&#xff09;支持&#xff0c;该网络是一个无需许可、去中心化的公共区块链。 Casper Network 主网在 2021 年 4…

架构案例-架构真题2016(四十)

&#xff08;2016&#xff09;嵌入式处理器是嵌入式系统的核心部件&#xff0c;一般可分为嵌入式微处理器&#xff08;MPU&#xff09;微控制器&#xff08;MCU&#xff09;、数字信号处理器&#xff08;DSP&#xff09;和片上系统&#xff08;SOC&#xff09;。以下叙述中&…

一篇文章让你熟悉unordered_map及其模拟实现

熟悉unordered_map及其模拟实现 unordered_map的定义1. unordered_map的模板定义2. unordered_map的成员类型 unordered_map构造函数unordered_map赋值运算符重载unordered_map容量函数&#xff08;Capacity&#xff09;unordered_map迭代器&#xff08;Iterators&#xff09;1…

慢性疼痛治疗服务公司Kindly MD申请700万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉,慢性疼痛治疗服务公司Kindly MD近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纳斯达克IPO上市&#xff0c;股票代码为&#xff08;KDLY&#xff09;,Kindly MD计划通过…

通信协议:Uart的Verilog实现(下)

4、UART接收器 UART接收器负责接收串行比特流&#xff0c;去除起始位和停止位&#xff0c;并以并行格式将数据保存到与主机数据总线相连的寄存器里。接收器无法获得发送时钟&#xff0c;因此尽管数据以标准比特率到达&#xff0c;但数据未必与接收主机内的时钟同步。同步问题可…

面试算法13:二维子矩阵的数字之和

题目 输入一个二维矩阵&#xff0c;如何计算给定左上角坐标和右下角坐标的子矩阵的数字之和&#xff1f;对于同一个二维矩阵&#xff0c;计算子矩阵的数字之和的函数可能由于输入不同的坐标而被反复调用多次。例如&#xff0c;输入图2.1中的二维矩阵&#xff0c;以及左上角坐标…

python机器学习融合模型:Stacking与Blending(附代码)_论文_模型竞赛_企业建模

大家好&#xff0c;今天给大家总结归纳了python机器学习融合模型&#xff1a;Stacking与Blending&#xff08;附代码&#xff09;。 1 堆叠法Stacking 一套弱系统能变成一个强系统吗&#xff1f; 当你处在一个复杂的分类问题面前时&#xff0c;金融市场通常会出现这种情况&…

自定义热加载:如何不停机实现核心代码更新

文章目录 1. 常见的几种实现代码热更新的几种方式对于开发环境我们可以使用部署环境1. 使用 Arthas 的 redefine 命令来加载新的 class 文件2. 利用 URLClassLoader 动态加载3. 通过Java的Instrumentation API 也是可以实现的 2. 实现1. ClassScanner扫描目录和加载类2. 定时任…

Mybatis学习笔记7 参数处理专题

Mybatis学习笔记6 使用时的一些小技巧_biubiubiu0706的博客-CSDN博客 1.单个简单类型参数 2.Map参数 3.实体类参数 4.多参数 5.Param注解(命名参数) 6.Param源码分析 建表 插入点数据 新建模块 pom.xml <?xml version"1.0" encoding"UTF-8"?&…

SpringBoot 学习(七)Swagger

7. Swagger 7.1 简介 便于前后端集成联调RestFul Api 文档在线生成工具 > Api 文档与 Api 定义同步更新直接运行&#xff0c;在线测试 Api 接口 7.2 springboot 集成 swagger (1) 导入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger…

2001-2021年上市公司基于Jones 修正模型的盈余管理测度(含原始数据+stata 计算代码)

2001-2021年上市公司基于Jones 修正模型的盈余管理测度&#xff08;含原始数据stata 计算代码&#xff09; 1、时间&#xff1a;2001-2021 年 3、范围&#xff1a;沪深 A 股上市公司 4、指标&#xff1a;经营活动现金流、总资产、净利润、总收入、固定资产、应收账款、盈余管…

如何快速做跨业务测试?

当业务任务多且人力资源不充足的情况下&#xff0c;不同业务的同学可能需要去不同的业务进行临时支援&#xff0c;可能在时间方面有长有短&#xff0c;但是如何迈出第一步是很多人需要关心的一件事。 本文以实际跨业务测试经验&#xff08;订单业务测试人员如何测试售后业务&a…

什么是HTTP/2?它与HTTP/1.1相比有什么改进?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTTP/2 简介⭐ 主要的改进和特点⭐ 总结⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端…

梦想让生活得以忍受-寄语机器视觉工程师

我&#xff0c;曾梦想梦想走天涯&#xff0c;看看这世界的繁华&#xff0c;年少的心总有些轻狂&#xff0c;如今四海为家。 大家都听过这首歌&#xff0c;迎来很多打工人的共鸣&#xff0c;著名作家海明威曾说&#xff0c;“一个人可以被打败&#xff0c;但不可以被毁灭”&…

Web自动化测试 —— 如何进行Selenium页面数据及元素交互?啊哈

前言&#xff1a; Web自动化测试是一种常用的测试方式&#xff0c;通过在浏览器中模拟用户操作以及与页面元素的交互&#xff0c;可以有效地检验页面的功能性以及稳定性。Selenium是一款流行的Web自动化测试工具&#xff0c;在本篇文章中&#xff0c;我们将介绍如何使用Seleni…