SQLのasについてまとめてます。
SQL asの構文
SQLのas句はテーブル名やカラムに別名をつけることが可能です。
以下は、カラムに別名A、B、Cをつけてselectを実行する例です。
SELECT emp_no AS A, birth_date AS B, first_name AS C FROM employees LIMIT 10; +-------+------------+-----------+ | A | B | C | +-------+------------+-----------+ | 10001 | 1953-09-02 | Georgi | | 10002 | 1964-06-02 | Bezalel | | 10003 | 1959-12-03 | Parto | | 10004 | 1954-05-01 | Chirstian | | 10005 | 1955-01-21 | Kyoichi | | 10006 | 1953-04-20 | Anneke | | 10007 | 1957-05-23 | Tzvetan | | 10008 | 1958-02-19 | Saniya | | 10009 | 1952-04-19 | Sumant | | 10010 | 1963-06-01 | Duangkaew | +-------+------------+-----------+ 10 rows in set (0.05 sec)
関数の実行結果にもasで別名をつけることができ、表示の際のカラム名を見やすく変更することが可能です。
【関連記事】
▶【SQL中級テク】カラムに命名!SQLのAS句ハンズオンにトライ
以下は、テーブル名にasで別名をつける例です。テーブル名をそのまま記述するよりも、where句がすっきりします。
SELECT a.emp_no, a.first_name, a.last_name, c.dept_name FROM employees AS a, dept_emp AS b, departments AS c WHERE a.emp_no = b.emp_no AND b.dept_no = c.dept_no ORDER BY emp_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 | +--------+------------+-----------+--------------------+ 10 rows in set (0.00 sec)
【関連記事】
▶SQLで別名をつけるならAS句を使いこなそう!つけ方をわかりやすく解説
SQL asの使い方
出力結果のカラム名を短くわかりやすいものに変更して表示する
関数を使ってselectを実行すると、カラム名に計算式がそのまま出力されます。これをasを使用することで短く見やすい名前に変更することが可能です。
以下の例では、concat( first_name, ” “, last_name )をnameに変更しています。
mysql> select emp_no, concat( first_name, " ", last_name ) from employees limit 10; +--------+--------------------------------------+ | emp_no | concat( first_name, " ", last_name ) | +--------+--------------------------------------+ | 10001 | Georgi Facello | : : select emp_no, concat( first_name, " ", last_name ) as name from employees limit 10; +--------+--------------------+ | emp_no | name | +--------+--------------------+ | 10001 | Georgi Facello | | 10002 | Bezalel Simmel | | 10003 | Parto Bamford | | 10004 | Chirstian Koblick | | 10005 | Kyoichi Maliniak | | 10006 | Anneke Preusig | | 10007 | Tzvetan Zielinski | | 10008 | Saniya Kalloufi | | 10009 | Sumant Peac | | 10010 | Duangkaew Piveteau | +--------+--------------------+
同じテーブル自身でjoinするセルフジョインをおこなう
同じテーブルにas句でaとbという別の名前をつけ、サブクエリ中でジョインするというクエリです。一時テーブルなどを使わずに複雑な処理がこなせるのがメリットですが、パッと見て何をやっているのかわかりにくいので可読性が下がり、バグを引き起こしやすいというデメリットがあります。
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するには?
まとめ
- SQLのasはカラム名やテーブル名を変更する
- カラム名変更は、関数を使った長い計算式を見やすく変更するのに便利
- テーブル名変更を応用してセルフジョインが可能