1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【oracle備忘録】UNION ALL句の中でORDER BY使用して並べ替え

Last updated at Posted at 2020-12-06

※この備忘録は初学者の私が学習した内容を忘れないために書き起こしたものとなります。
#目的
UNION ALL と ORDER BY を使用して、並び替え済みのUNION ALL句を結合したい。
##例題
1組、2組、3組の生徒の生年月日情報の中から誕生日の昇順に並び替えて、
1998年生まれの人のみ表示したい
・1組の誕生日の一番早い人⇒1組の誕生日の一番遅い人
⇒2組の誕生日の一番早い人⇒2組の誕生日の一番遅い人
⇒3組の誕生日の一番早い人⇒3組の誕生日の一番遅い人

各組のテーブル
image.png

##誤答
単純に考えて、下記のようにUNION ALL句の中にORDER BYを使用するとエラーとなる。

SELECT *
  FROM 1
 WHERE 誕生日 <= 19981231
 ORDER BY 誕生日

UNION ALL

SELECT *
  FROM 2
 WHERE 誕生日 <= 19981231
 ORDER BY 誕生日

UNION ALL

SELECT *
  FROM 3
 WHERE 誕生日 <= 19981231
 ORDER BY 誕生日

##上手く表示できたコード
下記のようにサブクエリを使用するとうまくいった。

SELECT *
  FROM (SELECT *
          FROM 1
         ORDER BY 誕生日
         WHERE 誕生日 <= 19981231
       )

UNION ALL

SELECT *
  FROM (SELECT *
          FROM 2
         ORDER BY 誕生日
         WHERE 誕生日 <= 19981231
       )

UNION ALL

SELECT *
  FROM (SELECT *
          FROM 3
         ORDER BY 誕生日
         WHERE 誕生日 <= 19981231
       )

##感想
上記コードでうまく表示することができたが、なんとなく少し回りくどい表現なのかもしれないと思っている。
もっと勉強して、さらに簡潔なソースコードが記述できるようになったら、また改めてこの記事を更新したい。
自分と同じような初学者の方が、この記事にたどり着いて、少しでもヒントになってくれると嬉しく思うとともに、エンジニアの諸先輩方から「もっとこうした方がいいと思うよ!」といったアドバイスをいただけると大変ありがたいと思っています。

1
2
2

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?