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

  • 存储方式:数据表保存的是真实数据,存储在硬盘当中;视图存储的是查询结果集合。
  • 数据更新:更新表可以更新视图,更新视图也可以更新表。一般情况下,视图仅用于展示数据。
  • 存储空间:数据表占用数据库的实际空间,而视图不占用数据库的空间。
相关推荐
Aileen_0v011 分钟前
【玩转OCR | 腾讯云智能结构化OCR在图像增强与发票识别中的应用实践】
android·java·人工智能·云计算·ocr·腾讯云·玩转腾讯云ocr
九河云1 小时前
华为云国内版与国际版的主要区别解析
华为云·云计算
007php0073 小时前
linux服务器上CentOS的yum和Ubuntu包管理工具apt区别与使用实战
linux·运维·服务器·ubuntu·centos·php·ai编程
djykkkkkk3 小时前
ubuntu编译遇到的问题
linux·运维·ubuntu
qq_429856574 小时前
linux 查看服务是否开机自启动
linux·运维·服务器
7yewh5 小时前
Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02
linux·arm开发·驱动开发·嵌入式硬件·嵌入式
dessler5 小时前
Docker-Dockerfile讲解(三)
linux·运维·docker
KevinRay_6 小时前
命令行之巅:Linux Shell编程的至高艺术(中)
linux·运维·服务器·重定向·shell编程
程序员JerrySUN6 小时前
Yocto 项目 - 共享状态缓存 (Shared State Cache) 机制
linux·嵌入式硬件·物联网·缓存·系统架构
dengjiayue6 小时前
MySQL 查询大偏移量(LIMIT)问题分析
数据库·mysql