【SQL】AS句で別名(エイリアス)を設定する方法|カラム・テーブル・サブクエリの使い方

SQLで SELECT した結果の列名が employee_iddept_code のままだと、レポートやアプリケーションで分かりにくいことがあります。

そんなときに使うのが AS キーワード(別名 / エイリアス)です。カラムやテーブルに「別名」を付けることで、クエリの可読性と保守性が大幅に向上します。

この記事では、AS句の基本構文から、テーブル別名・計算式・関数・サブクエリでの活用法、RDBMS間の違い、実務のベストプラクティスまで、コード例付きで網羅的に解説します。

スポンサーリンク

ASキーワードの基本構文(カラムの別名)

SELECT 文でカラムに別名を設定するには、AS キーワードを使います。

SQL – 基本構文
SELECT カラム名 AS 別名
FROM テーブル名;

例えば、employees テーブルの employee_id を「社員番号」、employee_name を「社員名」として表示する場合は次のように書きます。

SQL
SELECT
  employee_id   AS 社員番号,
  employee_name AS 社員名,
  department    AS 部署
FROM employees;

実行結果

社員番号  社員名      部署
--------  ----------  ----------
1001      田中太郎    営業部
1002      鈴木花子    開発部
1003      佐藤一郎    人事部

元のカラム名 employee_id が「社員番号」に、employee_name が「社員名」に変わっていることが確認できます。

ASの省略構文(スペースだけで別名を設定)

実は AS キーワードは省略可能です。カラム名の後にスペースを空けて別名を書くだけでも同じ結果になります。

SQL – AS省略
-- ASあり(推奨)
SELECT employee_id AS id FROM employees;

-- AS省略(動作は同じ)
SELECT employee_id id FROM employees;

注意:AS を省略すると、カラム名と別名の区別が付きにくくなり可読性が下がります。チーム開発では AS を明示的に書くのが一般的です。

日本語の別名(ダブルクォートで囲む)

別名に日本語スペースを含む文字列を使いたい場合は、ダブルクォート(”)で囲みます。

SQL – 日本語別名
SELECT
  employee_id   AS "社員番号",
  employee_name AS "社員 名前",
  salary        AS "月給(円)"
FROM employees;
RDBMS 日本語別名の囲み方
Oracle ダブルクォート "別名"
PostgreSQL ダブルクォート "別名"
MySQL バッククォート `別名` またはダブルクォート
SQL Server 角括弧 [別名] またはダブルクォート

ポイント:英数字のみの別名であればクォートなしでも動作しますが、予約語と被る可能性がある場合はクォートで囲むのが安全です。

テーブルの別名(テーブルエイリアス)

AS はカラムだけでなく、テーブルにも別名を付けることができます。テーブル別名は JOIN で複数テーブルを扱うときに特に便利です。

SQL – テーブル別名
-- 基本構文
SELECT t.カラム名
FROM テーブル名 AS t;

-- AS省略(テーブル別名では省略が一般的)
SELECT t.カラム名
FROM テーブル名 t;

カラム別名 vs テーブル別名

  • カラム別名:SELECT句で指定。結果セットの列名を変更する
  • テーブル別名:FROM句/JOIN句で指定。SQL文中でテーブルを短い名前で参照する
  • テーブル別名では AS を省略するのが一般的な慣習

JOINでのテーブル別名活用

テーブル別名が最も活躍するのが JOIN です。テーブル名が長い場合や、自己結合する場合に別名は必須です。

複数テーブルのJOIN

SQL – JOINでの別名活用
SELECT
  e.employee_name AS 社員名,
  d.department_name AS 部署名,
  e.salary AS 給与
FROM employees e
INNER JOIN departments d
  ON e.department_id = d.department_id;

実行結果

社員名      部署名    給与
----------  --------  --------
田中太郎    営業部    350000
鈴木花子    開発部    420000
佐藤一郎    人事部    380000

自己結合(セルフジョイン)

同じテーブルを2回参照する「自己結合」では、テーブル別名が必須です。

SQL – 自己結合
-- 社員とその上司の名前を取得
SELECT
  e.employee_name  AS 社員名,
  m.employee_name  AS 上司名
FROM employees e
LEFT JOIN employees m
  ON e.manager_id = m.employee_id;

同じ employees テーブルを e(社員)と m(マネージャー)の2つの別名で参照することで、どちらのカラムかを区別できます。

計算結果への別名

計算式をそのまま列名にすると salary * 12 のような読みにくい名前になります。AS で意味のある名前を付けましょう。

SQL – 計算結果への別名
SELECT
  employee_name                    AS 社員名,
  salary                           AS 月給,
  salary * 12                     AS 年収,
  salary * 12 + bonus              AS 年収_ボーナス込,
  ROUND(salary * 1.1, 0)           AS 昇給後月給
FROM employees;

実行結果

社員名      月給      年収       年収_ボーナス込  昇給後月給
----------  --------  ---------  ---------------  ----------
田中太郎    350000    4200000    4700000          385000
鈴木花子    420000    5040000    5540000          462000

計算結果に別名が付いていると、結果の意味が一目で分かります。

関数結果への別名(COUNT, SUM, AVG等)

集約関数(COUNT, SUM, AVG, MAX, MIN)の結果に別名を付けると、結果が格段に分かりやすくなります。

SQL – 集約関数への別名
SELECT
  department        AS 部署,
  COUNT(*)          AS 社員数,
  SUM(salary)       AS 給与合計,
  AVG(salary)       AS 平均給与,
  MAX(salary)       AS 最高給与,
  MIN(salary)       AS 最低給与
FROM employees
GROUP BY department;

実行結果

部署    社員数  給与合計    平均給与    最高給与    最低給与
------  ------  ----------  ----------  ----------  ----------
営業部  5       1750000     350000      420000      280000
開発部  8       3360000     420000      550000      320000
人事部  3       1140000     380000      450000      300000

別名なしの場合、COUNT(*) の列名はRDBMSによって COUNT(*)countexpr1000 のようにバラバラになります。明示的に別名を付けることで、どの環境でも一貫した結果を得られます。

サブクエリの別名

FROM 句でサブクエリ(派生テーブル / インラインビュー)を使う場合、別名の指定は必須です。別名を付けないとエラーになります。

SQL – サブクエリに別名
-- サブクエリには必ず別名を付ける
SELECT
  sub.部署,
  sub.社員数
FROM (
  SELECT
    department AS 部署,
    COUNT(*) AS 社員数
  FROM employees
  GROUP BY department
) AS sub
WHERE sub.社員数 >= 5;

注意:Oracleでは FROM 句のサブクエリに AS を使うとエラーになります。Oracle の場合は ) sub のように AS を省略してください。

RDBMS サブクエリ別名の構文
MySQL / PostgreSQL / SQL Server ) AS sub (ASあり)
Oracle ) sub (AS省略が必須)

WHERE句での別名使用制限

SQL初心者がハマりやすいのが、WHERE句ではカラム別名を使えないという制限です。

なぜWHERE句で別名が使えないのか?

SQLの処理順序は以下のとおりです。

処理順 説明
1 FROM テーブルを特定
2 WHERE 行を絞り込み
3 GROUP BY グループ化
4 HAVING グループの絞り込み
5 SELECT カラム選択・別名定義
6 ORDER BY 並び替え

SELECT で定義した別名は処理順序の5番目で確定します。WHERE は2番目に処理されるため、まだ別名が存在しない段階でフィルタリングが実行されます。

エラーになる例とその回避方法

SQL – WHERE句での別名(エラー)
-- NG:WHERE句で別名は使えない
SELECT salary * 12 AS 年収
FROM employees
WHERE 年収 >= 5000000;  -- エラー!

-- OK:元の式を直接書く
SELECT salary * 12 AS 年収
FROM employees
WHERE salary * 12 >= 5000000;  -- OK

別名が使える句・使えない句

カラム別名の使用 理由
WHERE 不可 SELECTより前に処理される
GROUP BY DBによる(※) MySQLは可、Oracle/PostgreSQLは不可
HAVING DBによる(※) MySQLは可、Oracleは不可
ORDER BY SELECTより後に処理される

ポイント:ORDER BY はSQL処理順序の最後なので、別名を問題なく使えます。ORDER BY 年収 DESC のように書けば、読みやすいクエリになります。

SQL – ORDER BYで別名を使う
SELECT
  employee_name AS 社員名,
  salary * 12  AS 年収
FROM employees
ORDER BY 年収 DESC;  -- OK:別名が使える

RDBMS間のAS構文の違い

各RDBMSでAS句の動作に微妙な違いがあります。複数のDBを扱う場合は注意が必要です。

機能 Oracle MySQL PostgreSQL SQL Server
カラム AS 別名
カラム 別名(AS省略)
テーブル AS 別名 不可
テーブル 別名(AS省略)
サブクエリ AS 別名 不可
別名のクォート “…” `…` “…” […]
GROUP BYで別名使用 不可 不可 不可
別名 = 値 構文 不可 不可 不可

注意:Oracle ではテーブル別名・サブクエリ別名に AS を使うとエラーになります。Oracle を使う場合は FROM employees e のように AS を省略する必要があります。

SQL Server独自の別名構文

SQL Server では、別名 = 式 という独自の構文も使えます。

SQL Server – 独自の別名構文
-- SQL Server 独自構文
SELECT
  社員名 = employee_name,
  年収   = salary * 12
FROM employees;

-- 標準SQL(AS使用)と結果は同じ
SELECT
  employee_name AS 社員名,
  salary * 12  AS 年収
FROM employees;

よくあるエラーと対処法

AS句に関連してよく発生するエラーと、その解決方法をまとめます。

エラー内容 原因 対処法
ORA-00933: SQL command not properly ended Oracleでテーブル別名に AS を使った テーブル別名の AS を削除する
Unknown column '年収' in 'where clause' WHERE句でカラム別名を使った 元の式 salary * 12 を直接書く
Every derived table must have its own alias サブクエリに別名を付け忘れた(MySQL) ) AS sub のように別名を追加する
ORA-00918: column ambiguously defined JOINで同名カラムをテーブル修飾なしで参照した テーブル別名 e.column_name で修飾する
別名が予約語と被ってエラー 別名に order, group 等を使った ダブルクォートで囲む "order"

実務でのベストプラクティス

チーム開発で AS句 を使う際の推奨ルールをまとめます。

1. カラム別名には AS を明示的に書く

SQL – 推奨スタイル
-- 推奨:ASを明示
SELECT employee_name AS emp_name FROM employees;

-- 非推奨:AS省略(カラム名と別名の区別が曖昧)
SELECT employee_name emp_name FROM employees;

2. テーブル別名は AS を省略する

テーブル別名は慣習的に AS を省略します。Oracle でエラーになることもあり、省略するほうがポータビリティが高くなります。

SQL – テーブル別名の慣習
-- 推奨:AS省略(Oracle互換・慣習的)
SELECT e.name FROM employees e;

-- 非推奨:AS明示(Oracleでエラー)
SELECT e.name FROM employees AS e;

3. 別名の命名規則

場面 推奨ルール
テーブル別名 テーブル名の頭文字1〜2文字 employeese
カラム別名(英語) スネークケース(小文字+アンダースコア) total_amount
カラム別名(日本語) ダブルクォートで囲む "合計金額"
サブクエリ別名 意味のある短い名前 sub, dept_summary
集約関数の別名 集約の内容を表す名前 total_sales, avg_score

4. 別名を使う場面と使わない場面

別名を付けるべき場面

  • 計算式や関数の結果カラム → 列名が自動生成されて分かりにくいため
  • JOIN で複数テーブルを使う場合 → テーブル修飾を簡潔にするため
  • レポート出力用のSQL → 日本語列名で見やすくするため
  • サブクエリを FROM句に書く場合 → 多くのRDBMSで必須

別名が不要な場面

  • 単純な SELECT * → 全カラムをそのまま取得する場合
  • カラム名がそのまま分かりやすい場合 → 冗長な別名は避ける
  • 元のカラム名と同じ別名 → name AS name は無意味

実践的な活用例

最後に、実務でよく使う AS句の活用パターンを紹介します。

CASE式と組み合わせる

SQL – CASE式 + 別名
SELECT
  employee_name AS 社員名,
  salary        AS 月給,
  CASE
    WHEN salary >= 500000 THEN 'A(高給)'
    WHEN salary >= 350000 THEN 'B(中給)'
    ELSE 'C(低給)'
  END AS 給与ランク
FROM employees
ORDER BY 月給 DESC;

実行結果

社員名      月給      給与ランク
----------  --------  ----------
山田部長    550000    A(高給)
鈴木花子    420000    B(中給)
田中太郎    350000    B(中給)
新人佐藤    280000    C(低給)

文字列結合と別名

SQL – 文字列結合 + 別名
-- MySQL / SQL Server
SELECT
  CONCAT(last_name, ' ', first_name) AS 氏名
FROM employees;

-- Oracle / PostgreSQL
SELECT
  last_name || ' ' || first_name AS 氏名
FROM employees;

ウィンドウ関数と別名

SQL – ウィンドウ関数 + 別名
SELECT
  employee_name AS 社員名,
  department    AS 部署,
  salary        AS 給与,
  RANK() OVER (
    PARTITION BY department
    ORDER BY salary DESC
  ) AS 部署内順位
FROM employees;

実行結果

社員名      部署    給与      部署内順位
----------  ------  --------  ----------
山田部長    営業部  550000    1
田中太郎    営業部  350000    2
鈴木花子    開発部  420000    1
高橋次郎    開発部  380000    2

まとめ

項目 ポイント
基本構文 SELECT カラム AS 別名
AS省略 可能だが、カラム別名ではASを書くのが推奨
テーブル別名 JOINで必須。AS省略が一般的(Oracle互換)
日本語別名 ダブルクォート(Oracle/PostgreSQL)で囲む
WHERE句制限 WHERE句では別名不可。ORDER BYでは使用可能
サブクエリ FROM句のサブクエリには別名必須
Oracle注意点 テーブル/サブクエリのASは不可(省略必須)
  • 別名を使うことで クエリの可読性・保守性 が大幅に向上する
  • 計算式や集約関数の結果には 必ず別名を付ける 習慣をつけよう
  • RDBMS間の構文差異(特にOracleのAS制限)を理解し、移植性の高いSQL を書こう