0
点赞
收藏
分享

微信扫一扫

【运维】docker如何删除所有容器

干自闭 2023-09-27 阅读 42

目录

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 borrower
	WHERE borrowedCount > 0;

在这里插入图片描述

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

1.3 输出内容变换

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

USE library;

SELECT id AS 学号,
	CASE
		WHEN 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 book
	WHERE 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 book
    	WHERE 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 book
    	WHERE publishDate BETWEEN 2017 AND 2018;
    

    在这里插入图片描述

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

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

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

    USE library;
    
    SELECT * FROM book
    	WHERE 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 borrower
	GROUP BY category;

在这里插入图片描述

3.2 分组汇总

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

SELECT category AS 类别, sex AS 性别, SUM(borrowedCount) AS SUM(当前借书数) FROM borrower
	GROUP 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 borrower
	GROUP BY category;
SELECT category AS 类别, SUM(borrowedCount) AS SUM(当前借书数) FROM borrower
	GROUP BY category
	HAVING SUM(borrowedCount) > 5;

在这里插入图片描述

5. 输出行排序

5.1 ORDER BY

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

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

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

SELECT id AS 学号, `name` AS 姓名, borrowedAll AS 已借书籍数
	FROM borrower
	WHERE 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 borrower
	GROUP BY category
	ORDER BY SUM(已借书籍数) ASC;

在这里插入图片描述

5.2 LIMIT

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

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

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

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

在这里插入图片描述

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

参考书籍

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

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

举报

相关推荐

0 条评论