助け合いフォーラム
Oracle Master Silver SQL 2019(1Z0-071)
問題ID : 26669
問題を開く
EMPLOYEES表の構造を確認してください。
次の問い合わせを実行したところエラーが発生しました。
SELECT employee_name AS "Name", salary * 12 AS "Sal", Sal + commission AS "Total"
FROM employees;
エラーの原因はどれですか。
次の問い合わせを実行したところエラーが発生しました。
SELECT employee_name AS "Name", salary * 12 AS "Sal", Sal + commission AS "Total"
FROM employees;
エラーの原因はどれですか。
正解
算術式の中で列別名を使うことはできない
解説
SELECT句に指定された算術式に列別名を指定することはできますが、算術式の中で列別名を使用することはできません。
設問の「Sal + commission」の部分の「Sal」は、SELECT句の2つ目の項目に指定された列別名ですので使用することはできません。
以上より、
・算術式の中で列別名を使うことはできない
が正解となります。
その他の選択肢については以下のとおりです。
・SELECT句に指定した項目が算術式の場合は、列別名を指定できない
算術式にも列別名を指定できます。
・列別名は一重引用符(')で囲まなければならない
一重引用符(')は文字リテラルや日付リテラルを囲むときに使用します。
列別名の大文字と小文字を区別したい場合や、スペース等を使用したい場合は列別名を二重引用符(")で囲みますので、設問のSQL文で列別名は正しく指定されています。
・Sal + commissionの「Sal」を二重引用符(")で囲まなければならない
二重引用符(")で囲んだとしても、列別名を算術式の中で使用することはできません。
設問の「Sal + commission」の部分の「Sal」は、SELECT句の2つ目の項目に指定された列別名ですので使用することはできません。
以上より、
・算術式の中で列別名を使うことはできない
が正解となります。
その他の選択肢については以下のとおりです。
・SELECT句に指定した項目が算術式の場合は、列別名を指定できない
算術式にも列別名を指定できます。
・列別名は一重引用符(')で囲まなければならない
一重引用符(')は文字リテラルや日付リテラルを囲むときに使用します。
列別名の大文字と小文字を区別したい場合や、スペース等を使用したい場合は列別名を二重引用符(")で囲みますので、設問のSQL文で列別名は正しく指定されています。
・Sal + commissionの「Sal」を二重引用符(")で囲まなければならない
二重引用符(")で囲んだとしても、列別名を算術式の中で使用することはできません。
参考
SQL文の実行結果に表示される列見出しは、SELECT句に指定した列名や算術式が大文字で表示されます。
ですが、算術式の列見出しでは見にくい場合や、大文字,小文字を区別した列見出しに変更したほうが良い場合もあります。そのような場合には列別名を指定して、列見出しを任意の文字列で置き換えることができます。
列別名を指定するには、以下の2つの方法があります。
[項目と列別名をスペースで区切る]
SELECT 項目1 列別名1, [項目2 列別名2 ...]
[ASキーワードを使用する]
SELECT 項目1 AS 列別名1, [項目2 AS 列別名2 ...]
列別名はオブジェクトのネーミング規則に従い命名しなければなりません。
ネーミング規則は以下のとおりです。
・30バイト以下であること(12c R2以降は128バイト以下)
・SQLの予約語は使用不可
・英数字、特殊文字(#,$,_)が使用可
・日本語環境では、漢字、ひらがな、カタカナも使用可
・数字、特殊文字(#,$,_)は名前の先頭に使用不可
・スペースは使用不可
また、列別名は大文字と小文字が区別されません。
大文字と小文字を区別したり、スペースを含めるなどネーミング規則に反する列別名を使用する場合は、列別名を 二重引用符(") で囲まなければなりませんので注意しましょう。
なお、予約語とは、SQLの仕様で定められた表名や列名として使用することのできない単語のことです。(「SELECT」や「FROM」など)。
例えば「SELECT」が表名や列名として自由に使用できてしまうと、実際にSELECT文を実行しようとした際にSQLを正しく解釈できなくなるため、予約語として定義されています。
但し予約語も、二重引用符(")で囲む事で列別名として使用できます。以下は日付型を意味するDATEという予約語を使用しています。
また、別名に関する注意点として、「算術式の中で列別名を使うことはできない」というルールがあります。間違い易い点ですので、併せて覚えて下さい。
SQLを表示
SELECT employee_id, employee_name, salary * 12
FROM employees;
FROM employees;
ですが、算術式の列見出しでは見にくい場合や、大文字,小文字を区別した列見出しに変更したほうが良い場合もあります。そのような場合には列別名を指定して、列見出しを任意の文字列で置き換えることができます。
列別名を指定するには、以下の2つの方法があります。
[項目と列別名をスペースで区切る]
SELECT 項目1 列別名1, [項目2 列別名2 ...]
SQLを表示
SELECT employee_id 社員No, employee_name 社員名,
salary * 12 年収 FROM employees;
salary * 12 年収 FROM employees;
[ASキーワードを使用する]
SELECT 項目1 AS 列別名1, [項目2 AS 列別名2 ...]
SQLを表示
SELECT employee_id AS 社員No, employee_name AS 社員名,
salary * 12 AS 年収 FROM employees;
salary * 12 AS 年収 FROM employees;
列別名はオブジェクトのネーミング規則に従い命名しなければなりません。
ネーミング規則は以下のとおりです。
・30バイト以下であること(12c R2以降は128バイト以下)
・SQLの予約語は使用不可
・英数字、特殊文字(#,$,_)が使用可
・日本語環境では、漢字、ひらがな、カタカナも使用可
・数字、特殊文字(#,$,_)は名前の先頭に使用不可
・スペースは使用不可
また、列別名は大文字と小文字が区別されません。
大文字と小文字を区別したり、スペースを含めるなどネーミング規則に反する列別名を使用する場合は、列別名を 二重引用符(") で囲まなければなりませんので注意しましょう。
SQLを表示
SELECT employee_id 社員No, employee_name 社員名,
salary * 12 給与(年収) FROM employees;
salary * 12 給与(年収) FROM employees;
SQLを表示
SELECT employee_id "社員No", employee_name 社員名,
salary * 12 "給与(年収)" FROM employees;
salary * 12 "給与(年収)" FROM employees;
なお、予約語とは、SQLの仕様で定められた表名や列名として使用することのできない単語のことです。(「SELECT」や「FROM」など)。
例えば「SELECT」が表名や列名として自由に使用できてしまうと、実際にSELECT文を実行しようとした際にSQLを正しく解釈できなくなるため、予約語として定義されています。
但し予約語も、二重引用符(")で囲む事で列別名として使用できます。以下は日付型を意味するDATEという予約語を使用しています。
SQLを表示
SELECT hiredate DATE FROM employees;
SQLを表示
SELECT hiredate "DATE" FROM employees;
また、別名に関する注意点として、「算術式の中で列別名を使うことはできない」というルールがあります。間違い易い点ですので、併せて覚えて下さい。
SQLを表示
SELECT salary * 12 AS "Sal",
Sal + commission AS "Total"
FROM employees;
Sal + commission AS "Total"
FROM employees;
選択肢が理解できない
投稿日 2024/02/24
下記の選択肢ですが、Salaryはどこにありますか
・Sal + commissionのSalaryを二重引用符(")で囲まなければならない
スタッフからの返信
この投稿に対して返信しませんか?
s staff_ishii
2024/02/26 16:02
sekakuma3 様 ご指摘の点を修正いたしました。 ご報告、誠にありがとうございました。