連載的上一篇文章忘嫉,我們在實踐連接查詢的時候,實際上是通過連接條件在水平方向上組合多張表吏廉。本節(jié)實踐的組合查詢則相當(dāng)于是并集笋庄,在垂直方向上組合字段相同的多個查詢結(jié)果效扫。
有如下的用戶信息表 user_profile
:
下面,我們需要編寫 SQL 檢索出其中學(xué)校為山東大學(xué)或者性別為男性的用戶信息直砂,結(jié)果不去重菌仁。
那如果是去重的話,通常我們會編寫多個條件的 WHERE
子句來實現(xiàn):
SELECT
device_id, gender, age, gpa
FROM
user_profile
WHERE
university = '山東大學(xué)' OR gender = 'male';
或者在條件比較復(fù)雜時静暂,也可以使用 UNION
來使得結(jié)果更清晰:
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE university = '山東大學(xué)'
UNION
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE gender = 'male';
檢索結(jié)果如下:
可見 UNION
在并集檢索時济丘,對結(jié)果中重復(fù)的部分進行了去重。那如果期望像我們題目中要求的那樣洽蛀,結(jié)果不去重怎么實現(xiàn)呢摹迷?
很簡單,使用 UNION ALL
即可:
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE university = '山東大學(xué)'
UNION ALL
SELECT device_id, gender, age, gpa
FROM user_profile
WHERE gender = 'male';
檢索結(jié)果如下: