オーロラさんの勉強帳

SESのロースキル客先常駐勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。

【SQL】列別名(列見出し)の指定方法 (ORACLE DATABASE 12C SQL基礎)

ORACLE DATABASE 12c SQL基礎(1Z0-061)の試験範囲でもある、
列別名(列見出し)の指定方法を紹介します。


目次

デフォルトの列名

OracleのSELECT文で抽出した列名は、デフォルトでは以下のように表示されます。

  • 列名を大文字で表示する
  • 指定した式をそのまま表示する

SQLで列名の表示を確認してみます。

SELECT employee_id,name,salary * 12,salary + 10000 FROM test5;

f:id:auroralights:20210719213642p:plain


列別名の指定方法

列別名は以下の2つの方法で指定することができます。

  • 列名と列別名をスペースで区切る方法
  • 列名と列別名をASキーワードで区切る方法
<半角スペースで区切る方法>
SELECT 列名 列別名 FROM テーブル名;

<ASキーワードで列別名を指定する方法>
SELECT 列名 AS 列別名 FROM テーブル名;


実際に半角スペース、ASキーワードで区切って列別名を指定してみよう。

SELECT
  employee_id 社員番号
  , name Name
  , salary * 12 AS 年間給与
  , salary + 10000 AS Bonus
FROM
  test5;

f:id:auroralights:20210719214658p:plain

上記の場合だと「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;

f:id:auroralights:20210719221322p:plain


Oracleの命名規則に反するため、二重引用符で囲まないとエラーになる列別名を試してみましょう。

SELECT
  employee_id "社員 番号"
  , name "123"
  , salary * 12 AS "#a"
  , salary + 10000 AS "TABLE"
  , salary + 20000 AS "/+"
FROM
  test5;

f:id:auroralights:20210719222123p:plain

各列別名を二重引用符で囲まないと、以下のような理由からエラーとなります。

  • 「社員 番号」はスペースを含んでいるため
  • 「123」は数字から始まる名前のため
  • 「#a」は特殊記号から始まっているため
  • 「TABLE」はORACLEの予約語のため
  • 「/*」は記号のため

注意

列別名は一重引用符(シングルクォーテーション)では囲むことはできませんので注意しましょう。
大文字・小文字を区別したり、命名規則に反する列別名を囲む場合は、「二重引用符」で囲うことを覚えておきましょう。


以下のようなSQLは、一重引用符で列別名を囲んでいるのでエラーとなります。

SELECT
  employee_id '社員番号'
FROM
  test5;