SQLで SELECT した結果の列名が employee_id や dept_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(*)、count、expr1000 のようにバラバラになります。明示的に別名を付けることで、どの環境でも一貫した結果を得られます。
サブクエリの別名
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文字 |
employees → e |
| カラム別名(英語) |
スネークケース(小文字+アンダースコア) |
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 を書こう