はじめに
アドベントカレンダー12/7 = 7記事目になります
SQL の内容を把握していた際、以下のようなコードがあり、
「これは、何をしているのか?」と疑問に思いました。
EMP.first_name || ' ' || EMP.last_name AS full_name
このコードは、単に あるテーブルの列(TRI_NM と SHP_NM)をくっつけて、新しい見た目の列を“仮で”作っているだけ――つまり、“エイリアス(別名)” を使った書き方になります
本記事では、「AS(エイリアス)」とは何か、なぜこれが “データベースに保存されない” のか、ということを、まとめていきたいと思います。
執筆者のレベル
- SQL初学者
- 未経験からエンジニアへ
AS(エイリアス) とは?
-
ASは SQL におけるキーワードで、列やテーブルに「別名」をつけるために使うものになります - 別名を使う理由は主に以下になります
- 列名やテーブル名が長くて読みにくいときに、省略した分かりやすい名前にできる
- 計算式や関数の結果に“意味のある名前”をつけて、結果を見やすくする
- 複数テーブルを結合するような複雑な SQL で、どの列がどこ由来か分かりやすくする(テーブル別名)ことができる
- 重要なのは、この別名は「そのクエリを実行する間だけ」使われる仮の名前であって、データベースの元のテーブル構造や列名を変更するわけではないということ。
例:文字列結合 + 別名
SELECT
EMP.first_name || ' ' || EMP.last_name AS full_name
FROM
employees EMP;
- employees テーブル → 社員情報などを格納するテーブル
- first_name → 名(ファーストネーム)
- last_name → 姓(ラストネーム)
- EMP → テーブルのエイリアス(短くして扱いやすくするため)
- first_name || ' ' || last_name → 名と姓を半角スペースでつなぎ、「名 姓」のようにひとつの文字列に結合
- AS full_name → 結合した結果に「full_name」という見やすい列名(フルネーム)を付与
- 実行結果としては、たとえば
"田中 太郎"のように表示されることになります - ただし――
- この
full_nameという列は、あくまでその SELECT の結果だけに登場する“仮の列”。 - 実際のテーブル
employeesの中にfull_nameという列が追加されるわけでは ない。
このように、エイリアスを使うことで、「計算/結合した値を分かりやすい列名で表示する」ことができます。
- この
なぜ「保存されない」のか — エイリアスの性質
-
エイリアスは一時的
-
AS 別名でつけた名前は、その SQL 文が実行されるときだけ有効。クエリが終わればその名前は消える
-
-
テーブル構造(スキーマ)には影響しない
- エイリアスを使っても、元のテーブル定義(列名・型など)は変わらず、DBのスキーマには手を加えていない。
-
SQL の処理の順序の都合
- 多くのデータベースでは、
SELECT句でエイリアスが定義されるのは、クエリ処理の最後の段階付近。つまり、SELECTより前の段階(例えばWHERE)では、まだその別名は “存在しない” 扱いになる - そのため、もし
WHERE句でその別名をそのまま使おうとすると、エラーになることが多い
- 多くのデータベースでは、
以上の理由から、AS でつけた別名は、「出力(SELECT 結果)の見た目のためのラベル」であり、データベースに永続的な変更を加えるものではない、という性質があります。
まとめ
-
ASは SQL で「列名やテーブル名に一時的な別名をつける」ための文法。 - 別名を使うことで、長く複雑な名前や、計算・結合した列に意味のある、見やすい名前をつけられる。
- ただし、その別名は「結果(SELECT の出力)上の名前」であり、元のテーブルの構造/列名は変わらない。
- よって、
SELECT … AS MyAliasを書いたからといって、それがデータベースに保存されるわけではない。
さいごに
SQL 学び始めて間もない私にとって「結果表示用の名前」と「本当のデータ構造」の違いを知らなく混乱していました。
でも AS(エイリアス)は、「表示のためのラベル」であって、「実際のテーブル構造を変えるものではない」――という事を知り、混乱度合いが減少しました
今後もSQLを使用していて知った知識をアウトプットしていければと思います。
参考記事