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)的区别:

  • 存储方式:数据表保存的是真实数据,存储在硬盘当中;视图存储的是查询结果集合。
  • 数据更新:更新表可以更新视图,更新视图也可以更新表。一般情况下,视图仅用于展示数据。
  • 存储空间:数据表占用数据库的实际空间,而视图不占用数据库的空间。
相关推荐
feifeigo1235 小时前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
2401_826097627 小时前
JavaEE-Linux环境部署
java·linux·java-ee
(:满天星:)8 小时前
第31篇:块设备与字符设备管理深度解析(基于OpenEuler 24.03)
linux·运维·服务器·网络·centos
爱莉希雅&&&8 小时前
shell编程之awk命令详解
linux·服务器·git
笑稀了的野生俊8 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
渡我白衣8 小时前
Linux操作系统之文件(四):文件系统(上)
linux
ZZH1120KQ8 小时前
Linux系统安全及应用
linux·运维·系统安全
程序漫游人9 小时前
centos8.5安装jdk21详细安装教程
java·linux
小小小糖果人9 小时前
Linux云计算基础篇(5)
linux·运维·服务器
small_wh1te_coder9 小时前
硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
linux·c语言·汇编·嵌入式硬件·算法·c