1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLのAS句を使いこなそう!サブクエリでの使い方と影響範囲を解説

Last updated at Posted at 2025-09-05

こんにちは!私は4月から会社に入り、SQLを学び始めました。そこで覚えて役に立った情報などをブログを通して紹介します!

今回はSQLのAS句についてお話します。ASはカラムやテーブルに別名(エイリアス)をつけるための便利な機能です。

1. AS句の基本的な使い方

まずは基本的な使い方から紹介します

カラムに別名をつける

別名を付けることで、元々のカラム名が長かったり分かりにくかったりする場合に、見やすい名前に変更できます。

SELECT
  employee_id AS id,
  first_name AS given_name,
  last_name AS family_name
FROM
  employees;

この例では、employee_ididに、first_namegiven_nameに、last_namefamily_nameに変更されて結果に表示されます。

テーブルに別名をつける

複数のテーブルを結合(JOIN)する場合など、テーブル名を短くすることでクエリ全体をスッキリさせることができます。

SELECT
  e.first_name,
  d.department_name
FROM
  employees AS e
LEFT JOIN
  departments AS d
ON
  e.id = d.id;

この例では、employeesテーブルがeに、departmentsテーブルがdに別名がつけられています。これにより、employees.idではなく、e.idと簡潔にカラムを指定することができるようになります。

2. サブクエリとAS

ここからは、サブクエリとAS句の関係について解説します。
「ASをつけているのにエラーが出てしまう…」というときに役立つ知識です。

サブクエリに別名をつける

サブクエリとは 「クエリの中に書く小さなクエリ」 のことです。
一時的な表を作って、それを外側のクエリで利用できるようにします。

例:部署ごとの平均給与を出し、その結果を外側で使う場合

SELECT
  a.department_id,
  a.avg_salary
FROM (
  SELECT
    department_id,
    AVG(salary) AS avg_salary
  FROM
    employees
  GROUP BY
    department_id
) AS a; -- サブクエリ全体に別名をつける

ここで AS a と書いているので、外側のクエリからは
a.department_ida.avg_salary といった形で参照できます。

サブクエリを「a という名前の表」として扱えるようになる、というイメージです。

サブクエリ内の「カラム別名」は外側でも使える

サブクエリの中で列に AS を使うと、そのカラム名は外側からも使えます

上の例では AVG(salary) AS avg_salary と書いたので、
外側から a.avg_salary と参照できるのです。

もし AS を書かないと AVG(salary) のままになり、外側から読むときにわかりにくくなります。
カラムの別名は必ず付けるのがおすすめです。

サブクエリ内の「テーブル別名」は外側では使えない

一方で注意したいのは、サブクエリ内で使うテーブルの別名です。

例えば次のクエリはエラーになります:

SELECT
  e.first_name
FROM (
  SELECT
    department_id
  FROM
    employees AS e
) AS sub;

なぜなら employees AS e でつけた e という別名はサブクエリ内だけ有効だからです。
外側から e.first_name を呼ぼうとしても、外側には e という名前は存在しないので参照できません。

外側から見えるのは「サブクエリの結果だけ」であり、サブクエリの中でどう計算したかは外には伝わらない、とイメージすると分かりやすいです。

ポイント

  • 外から見えるのは サブクエリの結果だけ
  • サブクエリ全体の別名 → 外側でも参照可能
  • サブクエリ内のテーブル別名 → サブクエリの中だけ有効
  • カラムの別名 → 内側・外側どちらからでも参照可能
  • サブクエリには必ず AS で別名を付けないとエラーになる

補足
もし「ASをつけたのに外側で参照できない!」とエラーになった場合は、
それが「テーブルの別名」なのか「サブクエリ全体の別名」なのか「カラムの別名」なのかを確認してみると解決につながると思います。

3. AS句が使えない句と使える句

SELECT句で定義したカラムの別名は、全てのSQL句で使えるわけではありません。

SQLのクエリは、

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY

という順序で実行されるため、別名が定義される前の句では使うことができないのです。

ASが使えない句:GROUP BYWHEREHAVING

これらの句は、SELECT句で別名が定義されるより前に処理されるため、カラムの別名を使えません

SELECT
  department_id,
  AVG(salary) AS avg_salary
FROM
  employees
WHERE
  avg_salary > 5000; -- エラー!'avg_salary'はWHERE句では使えない

この場合、WHERE句には元のカラム名、またはサブクエリを使って条件を指定する必要があります。

SELECT *
FROM (
  SELECT
    department_id,
    AVG(salary) AS avg_salary
  FROM
    employees
  GROUP BY
    department_id
) AS a
WHERE
  a.avg_salary > 5000; -- OK!サブクエリの別名を使える

このように、サブクエリ全体に別名をつけることで、外側のクエリではWHERE句でもa.avg_salaryを参照できます。


ASが使える句:ORDER BY

一方、ORDER BY句はSELECT句が実行された後に処理されるため、ASでつけた別名を使うことができます

SELECT
  department_id,
  AVG(salary) AS avg_salary
FROM
  employees
GROUP BY
  department_id
ORDER BY
  avg_salary DESC; -- OK!'avg_salary'でソートできる

この例では、avg_salaryという別名を使って、平均給与の高い順に結果を並べ替えています。

まとめ

今回の記事では、SQLのAS句について基礎からサブクエリまで幅広く整理しました。

  • カラムに別名をつけることで、長いカラム名やわかりにくい名前を読みやすく変更できる。
  • テーブルに別名をつけることで、JOINなど複数テーブルを扱うクエリがスッキリする。
  • サブクエリには必ず AS で別名をつける必要がある(MySQLやPostgreSQLなど多くのDBでは省略するとエラーになる)。
  • サブクエリ全体につけた別名は外側のクエリから参照できるが、サブクエリ内のテーブル別名は外側では使えない。
  • カラムにつけた別名はサブクエリの内側・外側どちらからも利用できる。
  • SQLは実行順序があるため、WHEREGROUP BYHAVINGではカラムの別名を使えない
  • 一方で、ORDER BYではカラムの別名を使えるので、結果を見やすく整えるのに便利。

これらの違いを理解しておくと、SQLを書く上で不要なエラーに悩まされることがなくなります。SQLの実行順序を意識しながら、AS句を上手に活用していきましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?