一、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)的区别:
- 存储方式:数据表保存的是真实数据,存储在硬盘当中;视图存储的是查询结果集合。
- 数据更新:更新表可以更新视图,更新视图也可以更新表。一般情况下,视图仅用于展示数据。
- 存储空间:数据表占用数据库的实际空间,而视图不占用数据库的空间。