关于MySQL数据库的union联合查询,可分为以下几个步骤进行讲解:
1. union查询的基本语法
UNION语句用于合并来自两个或多个SELECT语句的结果集,但是每个SELECT语句返回的列数必须相等,而且列的数据类型必须相似。UNION语句会自动去除结果集中的重复记录,如果不想自动去重,可以使用UNION ALL语句。基本的语法如下:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;
其中,column_name(s)应指定SELECT语句中需要选择的列名,table1和table2则是两个表格的名称,需要注意的是,union查询会以第一个SELECT语句的列名作为最终的列名出现在结果集中,所以列名的数量和名称要与第一个SELECT语句保持一致。
2. union查询的案例分析
- 示例一
假设有两个表格,一个是消费者表格(consumer),一个是商品表格(goods),它们的结构如下所示:
消费者表格(consumer)
+-------+--------+---------+
| id | name | address |
+-------+--------+---------+
| 1 | Alice | 北京 |
| 2 | Bob | 上海 |
| 3 | Charlie| 广州 |
+-------+--------+---------+
商品表格(goods)
+-------+--------+---------+
| id | name | price |
+-------+--------+---------+
| 1 | Apple | 2.5 |
| 2 | Brownie| 5.2 |
| 3 | Cookie | 1.8 |
+-------+--------+---------+
现在要将这两个表格合并成一个结果集,获取所有的消费者名称和商品名称。合并的SQL语句如下:
SELECT name as consumer_name, '' as goods_name FROM consumer
UNION
SELECT '' as consumer_name, name as goods_name FROM goods;
该语句的执行结果如下所示:
+----------------+-----------+
| consumer_name | goods_name|
+----------------+-----------+
| Alice | |
| Bob | |
| Charlie | |
| | Apple |
| | Brownie |
| | Cookie |
+----------------+-----------+
从上面的结果可以看出,两个表格的所有名称都被展示在了同一个结果集中。
- 示例二
再假设现在有两个表格,一个是用户成绩表格(score),一个是社团活动表格(activity),它们的结构如下所示:
用户成绩表格(score)
+-------+------+--------+
| id | math | english|
+-------+------+--------+
| 1 | 80 | 90 |
| 2 | 90 | 80 |
| 3 | 70 | 60 |
+-------+------+--------+
社团活动表格(activity)
+-------+-----------------+
| id | club_name |
+-------+-----------------+
| 1 | music |
| 2 | drama |
| 3 | sports |
+-------+-----------------+
现在需要将这两个表格中的所有信息合并在一起,并按照每个用户的总成绩由大到小进行排序,合并的SQL语句如下:
SELECT id, math+english as total_score, '' as club_name FROM score
UNION
SELECT '' as id, '' as total_score, club_name as club_name FROM activity
ORDER BY total_score DESC;
该语句的执行结果如下所示:
+------+-------------+-------------+
| id | total_score | club_name |
+------+-------------+-------------+
| 2 | 170 | |
| 1 | 170 | |
| | | drama |
| | | music |
| 3 | 130 | |
| | | sports |
+------+-------------+-------------+
从上面的结果可以看出,两个表格中的信息合并在了一起,并按照总成绩由大到小进行排序,其中社团活动信息对应的列为空。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL数据库之联合查询 union - Python技术站