SHOEISHA iD

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

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

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

HRzine×SmartHR 人材・組織活性化フォーラム

2024年12月6日(金)13:00~15:30

主要製品スペック一覧

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

eラーニング・LMS<br>主要製品スペック一覧 2024

eラーニング・LMS
主要製品スペック一覧 2024

その他のスペック一覧

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

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

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

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

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

単一行関数の使用による出力のカスタマイズ ~ 変換関数と条件式の使用方法


  • Facebook
  • X
  • Pocket
  • note
  • hatena

汎用関数の問題

変換関数という言い方はしないけれど、「値がNULLだったら、指定した値に変えて出力する」という関数NVLがあります。Oracleにのみ、古いバージョンから提供されていて、Oracleの開発者の間では有名な関数の1つです。一方、Oracleユーザーになじみが薄い(?)と思われるNULLIFCOALESCEという関数がありますが、これらはANSI/規格の関数です。使いこなせるのはNVLだけでは困ります。

問2

次を確認してください。

SQL>  SELECT empno,comm,sal FROM emp;

     EMPNO     COMM         SAL
---------- ---------- ----------
      7369                  800
      7499      300        1600
      7521      500        1250
      7566                 2975
      7654     1400        1250
      7698                 2850
      7782                 2450
      7839                 5000
      7844        0        1500
      7900                  950
      7902                 3000
      7934                 1300

COMM列の値がNULLであれば、SAL列の10%を返すSQLをすべて選びなさい。

  • a. SELECT empno,NVL(comm,sal*0.1) AS comm FROM emp;
  • b. SELECT empno,NVL2(comm,comm,sal*0.1) AS comm FROM emp;
  • c. SELECT empno,NVL2(NULLIF(sal,NVL(comm,sal)),comm,sal*0.1) AS comm FROM emp;

正解は、選択肢abcです(全選択肢が正解という設問は、実際の試験にはありません)。

設問の関数は次のとおりです。

表2:汎用関数
関数 説明
NVL(列値) 列値がNULLならば値を返す
NVL2(列値, 値1, 値2) 列値がNULLならば値2を返し、NULL以外であれば値1を返す
NULLIF(列1, 列2) 列1と列2が等価ならばNULLを返し、非等価ならば列1の値を返す
図2:NVL関数、NVL2関数、NULLIF関数
図2:NVL関数、NVL2関数、NULLIF関数

実行結果は次のとおりです。

SQL> --選択肢a
SQL> SELECT empno,NVL(comm,sal*0.1) AS comm FROM emp;

     EMPNO     COMM
---------- ----------
      7369       80
      7499      300
      7521      500
      7566    297.5
      7654     1400
      7698      285
      7782      245
      7839      500
      7844        0
      7900       95
      7902      300
      7934      130

SQL> --選択肢b
SQL> SELECT empno,NVL2(comm,comm,sal*0.1) AS comm FROM emp;

     EMPNO     COMM
---------- ----------
      7369       80
      7499      300
      7521      500
      7566    297.5
      7654     1400
      7698      285
      7782      245
      7839      500
      7844        0
      7900       95
      7902      300
      7934      130

SQL> --選択肢c
SQL> SELECT empno,NVL2(NULLIF(sal,NVL(comm,sal)),comm,sal*0.1) AS comm FROM emp;

     EMPNO     COMM
---------- ----------
      7369       80
      7499      300
      7521      500
      7566    297.5
      7654     1400
      7698      285
      7782      245
      7839      500
      7844        0
      7900       95
      7902      300
      7934      130

選択肢cは、頭の中で関数の実行結果をトレース(処理の過程を頭の中で追いかけていくこと)できないと、正解か否か判断できません。

「そんな無理やり使わなくても」と思ったでしょうが、試験では、入れ子になった関数がいろんなところ(結合や副問合せDMLなど)で登場します。結合について理解できていても、入れ子になった関数の結果を追い間違えて(トレースできなくて)正解の選択肢を見つけられなかったということがあり得ます。入れ子になった関数は面倒くさがらず落ち着いてトレースしてください。

試験会場では、ペンとメモ用紙みたいなものを渡してくれるので、入れ子の内側の結果から順に、メモしていけば良いでしょう。

次のページ
汎用関数の問題(続き)

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

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

もっと読む

この記事の著者

林 優子(ハヤシ ユウコ)

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

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

この記事をシェア

  • Facebook
  • X
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/105 2016/09/12 19:11

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

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

2024年12月6日(金)13:00~15:30

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング