目次
SQLで別名のつけ方
SQLでデータを取得する際に、そのままでは意味がわかりづらい名前や演算結果のカラムに特別な名前をつけたい場合があると思います。
このように、カラム名やテーブル名に別名をつけたい場合は「AS句」を使いましょう。
この記事では、SQLで別名を設定できるAS句について解説します。
短期集中でWebエンジニアになれるスクールはこちら
AS句とは
AS句とは、カラムやテーブルに別名をつけられる句です。
記述方法は次の通りになります。
SELECT カラム名 AS 別名 FROM テーブル名;
別名をつけたいカラムの後ろに「AS」と別名を記述すればOKです。
サンプルデータで別名をつけてみましょう。ここでは次のテーブルを作成しました。
mysql> CREATE TABLE user(id int, name varchar(20), address varchar(20));
このテーブルに次のようにデータを追加します。
mysql> INSERT INTO user VALUES(1, '佐藤', '東京'); mysql> INSERT INTO user VALUES(2, '田中', '大阪'); mysql> INSERT INTO user VALUES(3, '山田', '北海道');
これらのデータを取得する際に「id」「name」「address」に別名をつけてみましょう。
今回は、それぞれのカラムを日本語に変更してみます。
mysql> SELECT id AS '番号', name AS '名前', address AS '住所' FROM user; +--------+--------+-----------+ | 番号 | 名前 | 住所 | +--------+--------+-----------+ | 1 | 佐藤 | 東京 | | 2 | 田中 | 大阪 | | 3 | 山田 | 北海道 | +--------+--------+-----------+ 3 rows in set (0.00 sec)
このように、それぞれ指定した別名がつけられているのがわかります。
別名に日本語を指定する場合は「’(シングルクォーテーション)」で囲んでください。
テーブルに別名をつける場合の例
テーブルに別名をつけるのは、データ取得の際に「複数のテーブルを指定」する場合によく使われます。
こちらもサンプルで確認してみましょう。
先ほどのuserテーブルとは別に、次の「employee」テーブルを作成します。
CREATE TABLE employee(id int, salary int);
そして、次のようにデータを追加します。
mysql> INSERT INTO employee VALUES(1, 200000); mysql> INSERT INTO employee VALUES(2, 230000); mysql> INSERT INTO employee VALUES(3, 180000);
employeeテーブルとuserテーブルを結合してデータを取得してみます。
mysql> SELECT u.id, u.name, u.address, e.salary FROM user AS u, employee AS e WHERE u.id = e.id; +------+--------+-----------+--------+ | id | name | address | salary | +------+--------+-----------+--------+ | 1 | 佐藤 | 東京 | 200000 | | 2 | 田中 | 大阪 | 230000 | | 3 | 山田 | 北海道 | 180000 | +------+--------+-----------+--------+ 3 rows in set (0.01 sec)
上記のクエリを見るとuserを「u」に、employeeを「e」と別名をつけています。
別名をつけないと「user.id」「employee.salary」など、クエリが冗長になってしまうでしょう。
このように、テーブル名を短く設定したい場合などにテーブルの別名設定は有効です。
別名はWHERE句では使用不可
SELECTで別名を設定し、WHERE句で条件を指定したい場合もあるかと思います。
しかし、WHERE句内では別名は使用できません。
次のようなエラーになります。
mysql> SELECT id AS '番号', name AS '名前', address AS '住所' FROM user WHERE '番号' = 1; Empty set, 1 warning (0.01 sec) mysql> SELECT id AS user_id, name AS '名前', address AS '住所' FROM user WHERE user_id = 1; ERROR 1054 (42S22): Unknown column 'user_id' in 'where clause'
簡単な回避方法は、別名をつける前のカラム名を使うことです。
mysql> SELECT id AS '番号', name AS '名前', address AS '住所' FROM user WHERE id = 1; +--------+--------+--------+ | 番号 | 名前 | 住所 | +--------+--------+--------+ | 1 | 佐藤 | 東京 | +--------+--------+--------+ 1 row in set (0.01 sec)
すでにあるカラムを指定する分には問題ありませんが、次のような計算結果などを取得したい場合は少し面倒になるでしょう。
SELECT (Sum1_Total + Sum2_Total + Sum3_Total) AS TotalSum FROM sample WHERE (Sum1_Total + Sum2_Total + Sum3_Total) > 100;
ORDER BY句で別名は使用可
WHERE句では別名の使用ができませんが、ORDER BY句は使用できます。
mysql> SELECT id AS user_id, name AS first_name, address FROM user ORDER BY user_id DESC; +---------+------------+-----------+ | user_id | first_name | address | +---------+------------+-----------+ | 3 | 山田 | 北海道 | | 2 | 田中 | 大阪 | | 1 | 佐藤 | 東京 | +---------+------------+-----------+ 3 rows in set (0.00 sec)
ただし、別名を日本語で設定していると期待した動作にならないことがあるので注意が必要です。
mysql> SELECT id AS '番号', name AS '名前', address AS '住所' FROM user ORDER BY '番号' DESC; +--------+--------+-----------+ | 番号 | 名前 | 住所 | +--------+--------+-----------+ | 1 | 佐藤 | 東京 | | 2 | 田中 | 大阪 | | 3 | 山田 | 北海道 | +--------+--------+-----------+ 3 rows in set (0.00 sec)
別名に括弧は使える?
カラムの別名に括弧を使いたい場合もあるでしょう。
括弧はMySQLでは使用可能です。
mysql> SELECT id AS '番号(ID)', name AS '名前', address AS '住所' FROM user; +------------+--------+-----------+ | 番号(ID) | 名前 | 住所 | +------------+--------+-----------+ | 1 | 佐藤 | 東京 | | 2 | 田中 | 大阪 | | 3 | 山田 | 北海道 | +------------+--------+-----------+ 3 rows in set (0.00 sec) mysql> SELECT id AS '番号(ID)', name AS '名前', address AS '住所' FROM user; +----------------+--------+-----------+ | 番号(ID) | 名前 | 住所 | +----------------+--------+-----------+ | 1 | 佐藤 | 東京 | | 2 | 田中 | 大阪 | | 3 | 山田 | 北海道 | +----------------+--------+-----------+ 3 rows in set (0.00 sec) mysql> SELECT id AS '番号「ID」', name AS '名前', address AS '住所' FROM user; +----------------+--------+-----------+ | 番号「ID」 | 名前 | 住所 | +----------------+--------+-----------+ | 1 | 佐藤 | 東京 | | 2 | 田中 | 大阪 | | 3 | 山田 | 北海道 | +----------------+--------+-----------+ 3 rows in set (0.00 sec)
このように、さまざまな括弧が使用できます。
ただし、DBMSによっては使えないものもあります。
詳しくは、使用しているDBMSで確認してみてください。
別名をつけるのにルールはある?
SQLで別名をつける際に決まったルールというものはありません。
好きなようにつけられますが、仕事やプロジェクトで他の人も使う場合は誰が見てもわかりやすい別名をつけるとよいでしょう。
AS句は省略も可能
ここまで別名をつける際には「AS句」を使用してきましたが、実は省略も可能です。
mysql> SELECT id '番号', name '名前', address '住所' FROM user; +--------+--------+-----------+ | 番号 | 名前 | 住所 | +--------+--------+-----------+ | 1 | 佐藤 | 東京 | | 2 | 田中 | 大阪 | | 3 | 山田 | 北海道 | +--------+--------+-----------+ 3 rows in set (0.00 sec)
このように、カラム名の後ろに別名を記述すればOKです。
SQLを学んでWebエンジニアを目指そう
Webエンジニアは、Webサービスを作るエンジニアで非常に人気の高い職種です。
スタートアップやベンチャー企業が中心なので柔軟性のある雇用形態、魅力的な作業環境、面白いプロジェクト、高い報酬など非常に魅力的な求人が多いです。
Ruby on RailsやGo言語を用いたプロジェクトが多く、SQLも重要なスキルとなります。
このブログを運営するプログラミングスクールのポテパンキャンプでは、実践的なカリキュラムと現役エンジニアからのレビュー、そしてポートフォリオ添削や模擬面談などの面談転職サポートにより、最短距離でWebエンジニアを目指すことができます。
Webエンジニアへの転職を考えている方は、是非一度無料カウンセリングへお申込みください。