ORACLE DATABASE 12c SQL基礎(1Z0-061)の試験範囲でもある、
列別名(列見出し)の指定方法を紹介します。
目次
デフォルトの列名
OracleのSELECT文で抽出した列名は、デフォルトでは以下のように表示されます。
- 列名を大文字で表示する
- 指定した式をそのまま表示する
SQLで列名の表示を確認してみます。
SELECT employee_id,name,salary * 12,salary + 10000 FROM test5;
列別名の指定方法
列別名は以下の2つの方法で指定することができます。
- 列名と列別名をスペースで区切る方法
- 列名と列別名をASキーワードで区切る方法
<半角スペースで区切る方法> SELECT 列名 列別名 FROM テーブル名; <ASキーワードで列別名を指定する方法> SELECT 列名 AS 列別名 FROM テーブル名;
実際に半角スペース、ASキーワードで区切って列別名を指定してみよう。
SELECT employee_id 社員番号 , name Name , salary * 12 AS 年間給与 , salary + 10000 AS Bonus FROM test5;
上記の場合だと「Name」、「Bonus」を指定したにもかかわらず、「NAME」、「BONUS」とすべて大文字で表示されてしまいました。
これはデフォルトの列の表示規則によるものです。
列別名で「大文字・小文字」を区別させたり、「スペース」を含む列別名を指定したりするには「二重引用符」で列別名を囲む必要があります。
列別名の命名規則
列別名はオブジェクトの命名規則に従う必要があります。
Oracle オブジェクトの命名規則
- 長さは30バイト以下
- 英数字(AからZ、aからz、0から9)を使用可能(日本語環境では、漢字、ひらがな、カタカナも使用可能)
- 特殊記号(#,$,_)が使用可能
- 名前は文字で開始する必要がある(数字、特殊記号は名前の先頭に使用不可 例:1EMP、#EMP 等)
- スペースは使用不可
- Oracleの予約語は使用不可予約語はORACLEですでに予約されている、つまり使用用途が定義されている単語です。TABLE、USER、SELECT 等
- 同じユーザが所有する別のオブジェクトと重複する名前は使用不可
二重引用符(ダブルクォーテーション)を使った列別名の指定方法
「大文字・小文字」を区別した列別名や、Oracleの命名規則に反した列別名を指定するためには、列別名を「二重引用符(")」で囲んで指定する必要があります。
列別名を二重引用符で囲む必要があるケース
- 列別名にスペースを含む
- 大文字・小文字を区別する
- 数字や記号で始まる
<列別名 二重引用符> SELECT 列名 "列別名" FROM テーブル名; SELECT 列名 AS "列別名" FROM テーブル名;
二重引用符を使って大文字・小文字を区別して列別名を指定します。
「Name」、「Bonus」とすべて大文字ではなく、大文字と小文字を区別した列別名で指定ができます。
SELECT employee_id 社員番号 , name "Name" , salary * 12 AS 年間給与 , salary + 10000 AS "Bonus" FROM test5;
Oracleの命名規則に反するため、二重引用符で囲まないとエラーになる列別名を試してみましょう。
SELECT employee_id "社員 番号" , name "123" , salary * 12 AS "#a" , salary + 10000 AS "TABLE" , salary + 20000 AS "/+" FROM test5;
各列別名を二重引用符で囲まないと、以下のような理由からエラーとなります。
- 「社員 番号」はスペースを含んでいるため
- 「123」は数字から始まる名前のため
- 「#a」は特殊記号から始まっているため
- 「TABLE」はORACLEの予約語のため
- 「/*」は記号のため
注意
列別名は一重引用符(シングルクォーテーション)では囲むことはできませんので注意しましょう。
大文字・小文字を区別したり、命名規則に反する列別名を囲む場合は、「二重引用符」で囲うことを覚えておきましょう。
以下のようなSQLは、一重引用符で列別名を囲んでいるのでエラーとなります。
SELECT employee_id '社員番号' FROM test5;