连载的上一篇文章,我们在实践连接查询的时候,实际上是通过连接条件在水平方向上组合多张表。本节实践的组合查询则相当于是并集,在垂直方向上组合字段相同的多个查询结果。
有如下的用户信息表 user_profile
:
下面,我们需要编写 SQL 检索出其中学校为山东大学或者性别为男性的用户信息,结果不去重。
那如果是去重的话,通常我们会编写多个条件的 WHERE
子句来实现:
SELECT
device_id, gender, age, gpa
FROM
user_profile
WHERE
university = '山东大学' OR gender = 'male';
或者在条件比较复杂时,也可以使用 UNION
来使得结果更清晰:
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE university = '山东大学'
UNION
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE gender = 'male';
检索结果如下:
可见 UNION
在并集检索时,对结果中重复的部分进行了去重。那如果期望像我们题目中要求的那样,结果不去重怎么实现呢?
很简单,使用 UNION ALL
即可:
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE university = '山东大学'
UNION ALL
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE gender = 'male';
检索结果如下:
网友评论