MySQL的合并查询结果分为两种方式:UNION和UNION ALL。两种方式的区别在于返回结果是否去重。
UNION的格式如下:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
它会将两个SELECT语句的结果集合并,并去除重复的行,合并成一个新的结果集。需要注意的是,两个SELECT语句的列数必须相同,且数据类型也必须相同。
例如,假设我们有两张表fruit1和fruit2,它们的结构和数据如下:
fruit1表:
名称 | 价格 |
---|---|
苹果 | 5 |
橙子 | 3 |
香蕉 | 4 |
fruit2表:
名称 | 价格 |
---|---|
橙子 | 3 |
香蕉 | 4 |
西瓜 | 10 |
现在我们想要查询fruit1和fruit2中所有名称和价格的记录,可以使用UNION语句:
SELECT 名称, 价格 FROM fruit1
UNION
SELECT 名称, 价格 FROM fruit2;
执行后的结果如下:
名称 | 价格 |
---|---|
苹果 | 5 |
橙子 | 3 |
香蕉 | 4 |
西瓜 | 10 |
可以看到,查询结果去重后只剩下了4条记录。
UNION ALL的格式和UNION一样,只是它不会去重。例如,我们可以使用UNION ALL查询fruit1和fruit2中所有记录:
SELECT 名称, 价格 FROM fruit1
UNION ALL
SELECT 名称, 价格 FROM fruit2;
执行后的结果如下:
名称 | 价格 |
---|---|
苹果 | 5 |
橙子 | 3 |
香蕉 | 4 |
橙子 | 3 |
香蕉 | 4 |
西瓜 | 10 |
可以看到,查询结果中包含了两个橙子记录和两个香蕉记录,没有去重。
除了使用UNION和UNION ALL之外,也可以使用子查询的方式实现查询结果的合并。例如,我们可以使用子查询查询fruit1和fruit2中所有记录:
SELECT 名称, 价格 FROM (
SELECT 名称, 价格 FROM fruit1
UNION
SELECT 名称, 价格 FROM fruit2
) AS tmp;
执行后的结果和使用UNION语句的结果相同:
名称 | 价格 |
---|---|
苹果 | 5 |
橙子 | 3 |
香蕉 | 4 |
西瓜 | 10 |
需要注意的是,在使用子查询的方式实现查询结果的合并时,需要给子查询添加别名as tmp,否则会出现错误提示。
以上就是MySQL合并查询结果的实现攻略的详细讲解,其中包含了UNION、UNION ALL和子查询的用法示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL合并查询结果的实现 - Python技术站