MySQL的聚合查询和联合查询操作是SQL语言中非常重要的操作,提供了在多个表格中查询和汇总数据的能力,下面是完整的攻略。
MySQL 数据库聚合查询操作
在MySQL中,聚合查询操作可以基于多个行的数据汇总实现类似于SUM、AVG、COUNT等计算操作,这些操作可以以单独的列或多个列为基础进行聚合查询。
使用SUM、AVG、COUNT等函数
以下是使用SUM、AVG、COUNT等函数的基本语法:
SELECT aggregate_function(column_name)
FROM table_name
WHERE condition;
实际上,这个basic SQL查询可以使用更多的聚合函数:
- AVG() — 返回某列的平均值
- COUNT() — 返回某列的行数
- MIN() — 返回某列的最小值
- MAX() — 返回某列的最大值
- SUM() — 返回某列的总和
例如,我们有一个名为orders
的表,其中包含以下行:
OrderID | CustomerID | OrderDate | OrderAmount |
---|---|---|---|
1 | 100 | 2018-01-01 | 50.00 |
2 | 200 | 2018-01-02 | 75.00 |
3 | 100 | 2018-01-03 | 25.00 |
4 | 100 | 2018-01-04 | 100.00 |
现在,我们可以使用以下查询了解orders
表中的平均订单金额:
SELECT AVG(OrderAmount)
FROM orders;
使用GROUP BY子句
GROUP BY子句用于根据一个或多个列对聚合函数进行分组,以下是使用GROUP BY子句的基本格式:
SELECT column1, column2, aggregate_function(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2;
例如,以下查询将以CustomerID
为基础,给出每个不同客户的订单总金额:
SELECT CustomerID, SUM(OrderAmount)
FROM orders
GROUP BY CustomerID;
MySQL数据库联合查询操作
与聚合查询操作相比,在MySQL数据库中,联合查询操作用于组合两个或多个SELECT语句的结果,其结果将包含所有SELECT语句的结果集。
使用UNION操作符
以下是使用UNION操作符的联合查询操作的简单语法:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
然而,在联合查询中有更多的语法:
- UNION ALL — 保留重复行
- INTERSECT — 仅保留两个查询之间的重复行
- MINUS — 从第一个查询中减去在第二个查询中找到的所有行
例如,假设我们有一个名为customers1
和customers2
的两个表,各有以下行:
customers1
表:
CustomerID | CustomerName |
---|---|
1 | John |
2 | Sarah |
3 | Lily |
customers2
表:
CustomerID | CustomerName |
---|---|
3 | Lily |
4 | Tom |
5 | Jack |
下面的联合查询操作将列出联合查询两个表的结果,包括重复的行,并在结果中按CustomerName
列的值进行排序:
SELECT CustomerName
FROM customers1
UNION ALL
SELECT CustomerName
FROM customers2
ORDER BY CustomerName;
结果为:
CustomerName |
---|
Jack |
John |
Lily |
Lily |
Sarah |
Tom |
示例说明
下面是两个联合查询的示例:
1. 从两个表中选择重复的行
假设我们有一个名为orders1
的表和orders2
的表,各有以下行:
orders1
表:
OrderID | CustomerName | OrderDate |
---|---|---|
1 | John | 2018-01-01 |
2 | Sarah | 2018-01-02 |
3 | Lily | 2018-01-03 |
orders2
表:
OrderID | CustomerName | OrderDate |
---|---|---|
4 | Tom | 2019-01-01 |
3 | Lily | 2019-02-02 |
下面的联合查询操作将列出联合查询两个表的结果,并仅列出CustomerName
列有重复值的行:
SELECT CustomerName, OrderDate
FROM orders1
WHERE CustomerName IN (
SELECT CustomerName
FROM orders2
)
UNION
SELECT CustomerName, OrderDate
FROM orders2
WHERE CustomerName IN (
SELECT CustomerName
FROM orders1
)
ORDER BY CustomerName;
结果为:
CustomerName | OrderDate |
---|---|
Lily | 2018-01-03 |
Lily | 2019-02-02 |
2. 从两个表中选择不同的行
假设我们有一个名为customers1
的表和customers2
的表,各有以下行:
customers1
表:
CustomerID | CustomerName |
---|---|
1 | John |
2 | Sarah |
3 | Lily |
customers2
表:
CustomerID | CustomerName |
---|---|
4 | Tom |
5 | Jack |
下面的联合查询操作将列出联合查询两个表的结果,并仅列出不存在于另一个表中的行:
SELECT *
FROM customers1
WHERE CustomerID NOT IN (
SELECT CustomerID
FROM customers2
)
UNION
SELECT *
FROM customers2
WHERE CustomerID NOT IN (
SELECT CustomerID
FROM customers1
)
ORDER BY CustomerName;
结果为:
CustomerID | CustomerName |
---|---|
5 | Jack |
1 | John |
3 | Lily |
4 | Tom |
这就是MySQL数据库中聚合和联合操作的完整攻略。以上示例可以帮助您开始尝试使用这些操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 数据库聚合查询和联合查询操作 - Python技术站