SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine Day 2024 Winter

2024年2月1日(木)12:00~17:40

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

その他のスペック一覧

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

採用管理システム<br>主要製品スペック一覧 2023

採用管理システム
主要製品スペック一覧 2023

落とし穴はこれで回避! Oracle DB 12c SQL基礎 弱点克服スクール | 第9回

集合演算子を使ったSQL文と落とし穴のORDER BY

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena

ORDER BYの指定

集合演算子に関して多く出題されるのは、実はORDER BYにまつわる問題です。やはり、設問を解きながら解説しましょう。

問2

集合演算子について正しい記述はどれですか。

  • a. 各SELECT文にGROUP BYを記述できる
  • b. 各SELECT文にORDER BYを記述できる
  • c. 最初のSELECT文の末尾にのみORDER BYを記述できる
  • d. 最初のSELECT文に指定した列名をORDER BYに記述する
  • e. 最後のSELECT文に指定した列名をORDER BYに記述する

次の実行例が示すとおり、各SELECT文にGROUP BYを記述することができます(選択肢aは正解)。

SQL> SELECT COUNT(*) FROM employees GROUP BY department_id
  2  UNION
  3  SELECT COUNT(*) FROM employees GROUP BY manager_id;

  COUNT(*)
----------
         1
         2
         4
         5
         6
         8
        14
        34
        45

9行が選択されました。

しかし、次の実行例が示すとおり、各SELECT文にORDER BYを記述することはできません(選択肢bは不正解)。

SQL> SELECT LAST_NAME FROM employees ORDER BY LAST_NAME
  2  UNION
  3  SELECT FIRST_NAME FROM employees ORDER BY FIRST_NAME;
UNION
*
行2でエラーが発生しました。:
ORA-00933: SQLコマンドが正しく終了されていません。

また、ORDER BYは、問合せ全体に対して1つしか指定できません。最後のSELECT文の後に記述します(選択肢cは不正解)。さらに、次の実行例が示すとおり、ORDER BYで指定できる列は、最初のSELECT文に指定した列名だけです(選択肢dは正解、選択肢eは不正解)。

SQL> --最後のSELECT文に指定した列名
SQL> SELECT LAST_NAME FROM employees
  2  UNION
  3  SELECT FIRST_NAME FROM employees ORDER BY FIRST_NAME;
SELECT FIRST_NAME FROM employees ORDER BY FIRST_NAME
                                          *
行3でエラーが発生しました。:
ORA-00904: "FIRST_NAME": 無効な識別子です。

SQL> --最初のSELECT文に指定した列名
SQL> SELECT LAST_NAME FROM employees
  2  UNION
  3  SELECT FIRST_NAME FROM employees ORDER BY LAST_NAME;

LAST_NAME
---------------
Abel
Adam
……(途中省略)……
Winston
Zlotkey

195行が選択されました。

そういえば、ORDER BYって副問合せの中でも指定できませんでしたよね(前回学習したばかりです。覚えていますか?!)。

どちらも「途中の処理でソートしたって意味ないじゃん! ORDER BYはSQL文実行者の手元に渡すデータを並べ替えるために使うもの。だから、最後に1つだけ記述するんだよ!」と頭に入れておけば、間違えないはずです。

では、もう1問解きながら、決まり事を確認します。

問3

集合演算子について正しい記述はどれですか。

  • a. 出力結果の列名は、最初のSELECT文の列名が使用される
  • b. 出力結果の列名は、最後のSELECT文の列名が使用される
  • c. ORDER BYでは、列位置を使用できる
  • d. ORDER BYでは、最初のSELECT文で指定した列別名を使用できる

問2の解説を注意深く読んだ人は正解できたはずです。出力結果の列名には、最初のSELECT文の列名が使用されます(選択肢aは正解、選択肢bは不正解)。

また、次の実行例のとおり、ORDER BYでは列位置および最初のSELECT文の列別名を使用できます(選択肢c、dは正解)。

SQL> SELECT department_id,employee_id AS empno FROM employees
  2  UNION
  3  SELECT department_id,manager_id AS mgrno FROM departments ORDER BY 1,empno DESC;

DEPARTMENT_ID      EMPNO
------------- ----------
           10        200
           20        202
           20        201
    ……(途中省略)……
          260
          270
                     178

124行が選択されました。

次のページ
その他の結合演算子と結合演算子との組み合わせ

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
めざせオラクルマスターホルダー! Oracle DB 12c SQL基礎 弱点克服スクール連載記事一覧

もっと読む

この記事の著者

林 優子(ハヤシ ユウコ)

日本オラクル株式会社の教育ビジネスのスタートアップを全面的に支援し、バージョン5の頃からOracleに携わるベテラン講師として知る人も多い。Oracle認定講師を表彰するExcellent Instructorを連続受賞。1ランク上のITスペシャリスト育成を目標に、データベース分野にとどまらず「プレゼンテーション」、「ロジカルシンキング」などのトレーニングも手がけている。著書に『オラクルマスター教科書』シリーズ(翔泳社)、『プロとしてのデータモデリング入門』(SBクリエイティブ)など。その他、雑誌執筆、著書・メディア出演も多数。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/249 2016/11/08 14:00

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年2月1日(木)12:00~17:40

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング