新鮮

頑張らないために頑張る

MySQL勉強 UNION, UNION ALLを混ぜて使うと?

SQL で UNION と UNION ALL では以下の違いがある。

説明
a union b a と b を足す。重複を削除する。
a union all b a と b を足す。重複を削除しない。

では、a union b union all c のときは?

 

下準備。a,b,c テーブルを作って値を入れる。

mysql> select * from a;
+------+
| i    |
+------+
|    1 |
|    2 |
+------+

mysql> select * from b;
+------+
| i    |
+------+
|    2 |
|    3 |
+------+

mysql> select * from c;
+------+
| i    |
+------+
|    3 |
|    4 |
+------+

次のパターンを試してみる。

  • a union b union all c
  • a union all b union c
mysql> select i from a union select i from b union all select i from c;
+------+
| i    |
+------+
|    1 |
|    2 |
|    3 |
|    3 |
|    4 |
+------+

mysql> select i from a union all select i from b union select i from c;
+------+
| i    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
  • a union b union all c : a, b は重複を削除するが、c はそのまま
  • a union all b union c : a, b, c の重複がなくなる

前から順番に処理しているだけの普通の結果だった。