Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのas句についてまとめています。

以下、サンプルデータベースとしてEmployeesを、MySQLのバージョンは8.0.18を前提としています。

SQLのas句は別名をつける

asはカラム名やテーブル名を別名で置き換えるために使用します。

以下のSQLは、employees(社員)テーブルのfirst_name(姓名の名)をname1に、last_name(姓名の姓)をname2に置き換えてデータを10件抽出するサンプルSQLです。

mysql> desc employees;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.09 sec)

mysql> select first_name as name1,last_name as name2 from employees limit 10;
+-----------+-----------+
| name1     | name2     |
+-----------+-----------+
| Georgi    | Facello   |
| Bezalel   | Simmel    |
| Parto     | Bamford   |
| Chirstian | Koblick   |
| Kyoichi   | Maliniak  |
| Anneke    | Preusig   |
| Tzvetan   | Zielinski |
| Saniya    | Kalloufi  |
| Sumant    | Peac      |
| Duangkaew | Piveteau  |
+-----------+-----------+
10 rows in set (0.07 sec)

複数カラムを一つのカラムとして扱う

複数カラムの計算結果や文字列として連結した結果に名前をつけることも可能です。以下は、文字列をconcatで連結した結果に別名をつけるサンプルです。

mysql> select concat( first_name, ' ', last_name ) as fullname from employees limit 10;
+--------------------+
| fullname           |
+--------------------+
| Georgi Facello     |
| Bezalel Simmel     |
| Parto Bamford      |
| Chirstian Koblick  |
| Kyoichi Maliniak   |
| Anneke Preusig     |
| Tzvetan Zielinski  |
| Saniya Kalloufi    |
| Sumant Peac        |
| Duangkaew Piveteau |
+--------------------+

テーブル名を別名で扱う

asはテーブル名に別名をつける用途でも使われます。以下は、employees(社員)テーブル、dept_emp(社員・部署紐付け)テーブル、departments(部署)テーブルをjoinするSQLと、実行結果です。asを使って置き換えてみましょう。

mysql> select employees.emp_no, first_name, last_name, departments.dept_name from employees
left join dept_emp on employees.emp_no = dept_emp.emp_no
left join departments on dept_emp.dept_no = departments.dept_no
limit 10;

+--------+------------+-----------+--------------------+
| emp_no | first_name | last_name | dept_name          |
+--------+------------+-----------+--------------------+
|  10001 | Georgi     | Facello   | Development        |
|  10002 | Bezalel    | Simmel    | Sales              |
|  10003 | Parto      | Bamford   | Production         |
|  10004 | Chirstian  | Koblick   | Production         |
|  10005 | Kyoichi    | Maliniak  | Human Resources    |
|  10006 | Anneke     | Preusig   | Development        |
|  10007 | Tzvetan    | Zielinski | Research           |
|  10008 | Saniya     | Kalloufi  | Development        |
|  10009 | Sumant     | Peac      | Quality Management |
|  10010 | Duangkaew  | Piveteau  | Production         |
+--------+------------+-----------+--------------------+

以下のようにスッキリと置き換えられます。

mysql> select t1.emp_no, first_name, last_name, t3.dept_name from employees as t1
left join dept_emp as t2 on t1.emp_no = t2.emp_no
left join departments as t3 on t2.dept_no = t3.dept_no limit 10;

テーブル名の別名定義を使って、自己結合(セルフジョイン)を行う

asは、SQLの見た目をスッキリさせるだけではありません。一つのテーブルに異なる別名をつけて別テーブルとして扱うことで、セルフジョインをおこなうことができます。

以下は、給与テーブルから最新の年収を抽出するSQLです。

select *  FROM 	salaries as a 
WHERE 	(emp_no, to_date) not in (
		select emp_no, 
			max(to_date) as to_date
		from salaries as b 
		where a.emp_no = b.emp_no
		group by emp_no
		having count(*) > 1
	)

【関連記事】
SQLで重複を削除するサンプルコード 最新データを残してdeleteするには?

まとめ

ポテパンダの一言メモ
  • asは、カラム名とテーブル名に別名をつける
  • 計算式や関数の演算結果に別名をつけることも可能
  • 同一テーブルに複数の別名をつけてセルフジョインが実現できる

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。