sekakuma3さんの助け合いフォーラム投稿一覧
SELECT employee_id, employee_name, DECODE(NULLIF(salary, 500000), NULL, '-', salary) sal FROM employees;
上記の選択肢で、NULLIF関数の第一引数にsalary列が指定されています。
NULLIF関数で、第一引数にNULLを指定したらエラーになると理解していますが、
もしsalary列(制約なし)にnullが含まれていたらエラーになる可能性はあるのでしょうか?
問題については正しい選択肢について理解しておりますが、次の選択肢に関して、エラーがなく正しく動作しているかどうか疑問があります。
SELECT TO_NUMBER('¥500,000.0', 'L999G999D0') FROM dual;
TO_NUMBER関数は、文字列を指定された書式にしたがって数値に変換します。変換された数値は¥やカンマを含むことは出来ないため、誤りです。
実際にクエリを実行したところ、無効な数値というエラーが発生しました。したがって、この選択肢はクエリ自体が無効である可能性があります。
なぜこのクエリがエラーになるのか、それは環境の違いによるものかどうかについては明確ではありませんが、ご教示いただけますと幸いです。
上記問題にて、下記の表記がありました。
・SELECT e.employee_name, j.job_name FROM employees e FULL OUTER JOIN jobs j ON e.job_id = j.job_id;
完全外部結合です。EMPLOYEES表、JOBS表の2つの表の結合条件を満たしていないデータも含めて表示されます。
問題文には、「担当する従業員がいない職種も含めて職種情報を表示するものとします。」とありますので、FULL OUTER JOINを使用しても条件は満たされていると考えられます。
結合条件を満たしていない(職種のない)従業員のデータも含めるべきかどうかは明記されていないため、このクエリは条件を満たしていると思います。
上記の問題にて、以下のような表記がありました。
・USING句に結合条件を指定する
USING句は同じ名前の列のみを結合することができます。自己結合の実行例のように結合列に表接頭辞(表別名)を使用できないので、誤りです。
しかし、実際に、以下のクエリを実行したところ、エラーが発生せず、正常に実行されました。
SELECT e1.employee_name, e2.employee_name FROM employees e1 JOIN employees e2 using(job_id)
自己結合においてUSING句が使用できない理由について、詳細をご教示いただけないでしょうか。
私はSQLに関する経験が浅く、現在PingTを通じて学習を始めたばかりです。
そのため、この分野における知識には不確かな部分があります。もし誤解がある場合は、適切な指摘をいただけますと幸いです。