C05S14-MySQL高级语句

一、MySQL高级语句

MySQL的高级语句主要是高级查询语句,实现复杂条件下的数据查询。

1. 单表查询

1.1 ORDER BY排序查询

要对数据进行排序可以使用ORDER BY子句。MySQL的ORDER BY子句可以按照一个或多个列的值进行升序排序(ASC)或降序排序(DESC),默认是顺序排序。

mysql 复制代码
SELECT 字段名 FROM 表名 ORDER BY 字段名 [ASC | DESC];
  • 当根据多个字段排序,会先按照指定的第一个字段排序,然后再在第一个字段相同的数据内进行排序。

1.2 WHERE条件查询

MySQL的WHERE子句可以按照一个或多个条件进行数据的查询,使用AND或者OR分隔多个条件,AND表示指定的条件要同时成立,OR表示只用满足其中的一个。

mysql 复制代码
SELECT 字段名 FROM 表名 WHERE 过滤条件;

1.3 GROUP BY分组查询

GROUP BY子句可以根据一个或多个列对数据进行分组,但是需要结合聚合函数一起使用。

常见的聚合函数包括:

  • COUNT():计数。
  • SUM():求和。
  • AVG():求平均值。
  • MAX():求最大值。
  • MIN():求最小值。
mysql 复制代码
SELECT 字段名1, 聚合函数(字段名2)
FROM 表名
GROUP BY 字段名1;
  • 聚合函数的字段要和分组的字段不相同。
  • 查询多个字段时,要按照非统计(非聚合)的字段进行分组。

1.4 HAVING过滤语句

HAVING子句是用于分组后的数据进行过滤,因此需要结合GROUP BY子句使用。

mysql 复制代码
SELECT 字段名1, 聚合函数(字段名2)
FROM 表名
GROUP BY 字段名1;
HAVING 过滤条件;
  • 聚合函数不是只能写在SELECT里面,HAVING语句中也可以使用。如果SELECT语句中没有聚合函数,HAVING执行语句中有函数,SQL语句也能够正常执行。

1.5 AS设置别名

AS语句可以设置数据表或者字段的别名。

mysql 复制代码
# 设置表的别名
SELECT 字段名 FROM 表名 AS 别名;

# 设置字段的别名
SELECT 字段名 AS 别名 FROM 表名;

1.6 通配符

MySQL中的通配符通常和LIKE子句搭配使用,用于设置查询条件时的模糊匹配。常见的通配符包括:%、_,%表示0个或多个字符,_表示单个字符。

1.7 子查询

子查询又称为嵌套查询,在SELECT语句中嵌套其他的SELECT语句。执行顺序是先执行子语句,再执行父语句。

  • IN操作符

    用于检查指定列的值是否匹配列表中的值或子查询中的任何值。

    mysql 复制代码
    SELECT 字段名 FROM 表名 WHERE 字段名 IN (子查询语句); 
  • EXISTS操作符

    用于检查子查询是否有符合条件的数据行,如果有一条或多条符合就返回True,否则返回False。

    mysql 复制代码
    SELECT 字段名 FROM 表名 WHERE EXISTS (子查询语句); 

    外查询依赖于子查询的返回结果,如果子查询返回True,外部查询才会执行。

2. 连接查询

连接查询是一种将多张数据表中的数据行组合在一起的查询操作,这些行基于表的共同字段或条件匹配。

2.1 INNER JOIN内连接

mysql 复制代码
SELECT 字段名
FROM 表名1 INNER [OUTER] JOIN 表名2 ON 表名1.字段名 = 表名2.字段名;
  • 在内连接全表中,只显示两个表相匹配的部分,也就是两张数据表的交集。

2.2 LEFT JOIN左连接

mysql 复制代码
SELECT 字段名
FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 表名1.字段名 = 表名2.字段名;
  • 在左连接的全表中,左表的数据都会显示,右表的数据只显示匹配部分,不匹配的部分为空。

2.3 RIGHT JOIN右连接

mysql 复制代码
SELECT 字段名
FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 表名1.字段名 = 表名2.字段名;
  • 在右连接的全表中,右表的数据都会显示,左表的数据只显示匹配部分,不匹配的部分为空。

二、视图

视图(View)是一种虚拟的表,视图的内容并不是存储在数据库中的实际数据,而是根据定义视图的查询语句而动态生成的。也就是说,视图和定义时指定的数据表相关联,如果该数据表中的数据发生变化,那么视图查询到的结果也会相对应改变。

mysql 复制代码
# 创建视图
CREATE VIEW 视图名 AS 子查询语句;
# 删除视图
DROP VIEW 视图名;

视图(View)和表(Table)的区别:

  • 存储方式:数据表保存的是真实数据,存储在硬盘当中;视图存储的是查询结果集合。
  • 数据更新:更新表可以更新视图,更新视图也可以更新表。一般情况下,视图仅用于展示数据。
  • 存储空间:数据表占用数据库的实际空间,而视图不占用数据库的空间。
相关推荐
code monkey.4 分钟前
【寻找Linux的奥秘】第一章:基础指令
linux·运维·服务器
qziovv4 分钟前
Ubuntu通过局域网共享文件夹实现文件夹的连接
linux·运维·ubuntu
@业精于勤荒于嬉7 分钟前
将图片存储至阿里云 OSS
前端·阿里云·云计算·oss
海鸥819 分钟前
在 k8s中查看最大 CPU 和内存的极限
linux·容器·kubernetes
森焱森11 分钟前
AArch64架构及其编译器
linux·c语言·单片机·架构
梵法利亚15 分钟前
Ubuntu-docker安装mysql
mysql·ubuntu·docker
Lin桐39 分钟前
②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
linux·网络协议·tcp/ip·网络安全·缓存·信息与通信·信号处理
罗技1231 小时前
Easysearch 使用 AWS S3 进行快照备份与还原:完整指南及常见错误排查
linux·云计算·aws·es·easysearch
AWS官方合作商1 小时前
AWS AppStream 2.0:开启云端应用交付新范式(实战解决方案剖析)
系统架构·云计算·aws
程序员爱钓鱼1 小时前
Go 语言高效连接 MySQL 数据库:从入门到实战
后端·mysql·go