0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SQL】UNIONとUNION ALLの違い

Last updated at Posted at 2025-06-07

SQL初心者ですが、備忘録です。

UNIONはオプティマイザで実行計画が2つになるので、あまりよくないと言いますが、例えばステータスの確認で1回実行するだけの時に役に立ちます。あまり考えずに結果セットを合体させたい時はUNIONで十分な気がしています。

例えばこんな感じで似た構造の異なるテーブルからデータを取り、結果をページに反映させたい時、便利です。

get_task_schedule.sql
select task_id, task_status
from task_schedule_main
UNION
select  task_id, task_status
from task_schedule_sub

UNIONは重複排除なので、distinctしているのと同じです。
重複も確認したい時は、UNION ALLを使いましょう。
UNIONをした場合はOracleのROWIDが使えずエラーになりますが、UNION ALLでは使えます。

以下、ChatGPT4oによる記事チェック。

「UNIONはオプティマイザで実行計画が2つになるので、あまりよくない」
 → 必ずしも悪いとは限らない。実行計画が2つになるのは事実だが、最適化されることもある。パフォーマンスが悪くなるかはケースバイケース。

「UNIONはdistinctしているのと同じ」
 → 厳密には正しいが、「ソートが発生する可能性がある=コストが高くなることもある」点には触れていない。

「UNIONではROWIDが使えずエラーになる」
 → 正確には、UNIONの結果にROWIDを含めようとするとエラーになる。ROWIDは物理行に紐づくため、UNIONで複数テーブルをマージすると意味を持たなくなる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?