> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL のテーブルエイリアス

> AS で MySQL のテーブルに短い名前を付ける方法、結合に修飾された列名が必要な理由、およびエイリアスの欠落や誤りを知らせる 2 つのエラー。

> [card] [VillageSQL is a drop-in replacement for MySQL with extensions.](https://villagesql.com/docs/en/8.4/stable/install-server.md)
>
> All examples on this page work on VillageSQL. Install Now →

テーブルエイリアスは、1 つのクエリの間だけ有効な、テーブルの短い名前です。
結合での入力の手間を省き、エイリアスがないとクエリが動かない状況が 2 つ
あります。

始める前に、`mysql -u root -p sakila` でクライアントを開いてください。

## テーブルエイリアスの仕組み

```sql theme={null}
SELECT ALIAS_NAME.COLUMN_NAME
FROM TABLE_NAME AS ALIAS_NAME;
```

`TABLE_NAME` をテーブルに、`ALIAS_NAME` を付けたい短い名前に、`COLUMN_NAME` を
そのテーブルの列に置き換えます。その時点から、このクエリの中ではエイリアスが
テーブルの名前になり、その列を指すには `ALIAS_NAME.COLUMN_NAME` と書きます。

列エイリアスと同じく、ここでの `AS` は省略できるため、`FROM film f` は
`FROM film AS f` と同じ意味です。`AS` を書くと意図が明確になります。

## 同じ結合を 2 通りに書く

エイリアスがないと、修飾されたすべての列が完全なテーブル名を伴います。

```sql theme={null}
SELECT film.title, language.name
FROM film
JOIN language ON film.language_id = language.language_id
ORDER BY film.title
LIMIT 3;
```

```text theme={null}
+------------------+---------+
| title            | name    |
+------------------+---------+
| ACADEMY DINOSAUR | English |
| ACE GOLDFINGER   | English |
| ADAPTATION HOLES | English |
+------------------+---------+
3 rows in set (0.00 sec)
```

エイリアスがあると、同じクエリは短くなり、形が見やすくなります。

```sql theme={null}
SELECT f.title, l.name
FROM film AS f
JOIN language AS l ON f.language_id = l.language_id
ORDER BY f.title
LIMIT 3;
```

```text theme={null}
+------------------+---------+
| title            | name    |
+------------------+---------+
| ACADEMY DINOSAUR | English |
| ACE GOLDFINGER   | English |
| ADAPTATION HOLES | English |
+------------------+---------+
3 rows in set (0.00 sec)
```

同一の行です。エイリアスは答えについて何も変えません。

## 両方のテーブルにある列は修飾しなければならない

`film` と `language` はどちらも `language_id` を持ちます。修飾せずに名前を
書くと、サーバーには選びようがありません。

```sql theme={null}
SELECT language_id
FROM film
JOIN language ON film.language_id = language.language_id
LIMIT 1;
```

```text theme={null}
ERROR 1052 (23000): Column 'language_id' in field list is ambiguous
```

`ERROR 1052` は、その名前が指しうるものをサーバーが 2 つ以上見つけたという
意味です。結合では、それはほぼ常に 2 つのテーブルが共有する列であり、意図した
テーブルまたはエイリアスで修飾すると解決します。1 つのテーブルにしかない列名は
修飾する必要がありません。上のクエリで `title` と `name` が修飾なしで動くのは
そのためです。

## エイリアスはテーブル名を置き換える

テーブルにエイリアスが付くと、クエリの残りの部分では元の名前は使えなくなります。

```sql theme={null}
SELECT film.title
FROM film AS f
JOIN language AS l ON f.language_id = l.language_id
LIMIT 1;
```

```text theme={null}
ERROR 1054 (42S22): Unknown column 'film.title' in 'field list'
```

データベース内では、テーブルは依然として `film` です。このクエリの中では、
`f` という名前にしか応答しません。スキーマに見えている名前に対する
`ERROR 1054` は、たいていこれです。

## エイリアスなしでは書けないケース

同じテーブルを 2 回指定するクエリには、`actor` と呼ばれるものが 2 つあり、
それらを区別する方法がありません。エイリアスがそのクエリを可能にするものであり、
[自己結合](https://villagesql.com/docs/ja/tutorial/self-join.md)のレッスンはそれの上に成り立っています。

## テーブルエイリアスは列エイリアスではない

両者は同じキーワードを使い、異なる仕事をします。列エイリアスは結果の列の名前を
変え、見出しに現れます。テーブルエイリアスはクエリ内でテーブルの名前を変え、
出力にはまったく現れません。もう一方については
[列エイリアス](https://villagesql.com/docs/ja/tutorial/column-aliases.md)を参照してください。

## まとめ

* 1 つのクエリの間だけテーブルに短い名前を付けるには `TABLE_NAME AS ALIAS_NAME` を使います。
* クエリ内の 2 つ以上のテーブルが持つ列名は、必ず修飾します。
* 結合での `ERROR 1052` は、修飾が必要な列名として読みます。
* 存在すると分かっている列を `ERROR 1054` が指すときは、付けたエイリアスの使い忘れを疑います。
* エイリアスは結果について何も変えないと考えてください。

## 関連項目

* [結合の仕組み](https://villagesql.com/docs/ja/tutorial/joins.md) — エイリアスが役に立ち始める場所
* [列エイリアス](https://villagesql.com/docs/ja/tutorial/column-aliases.md) — `AS` のもう 1 つの仕事
* [自己結合](https://villagesql.com/docs/ja/tutorial/self-join.md) — エイリアスなしでは書けないクエリ
* [MySQL の JOIN のパフォーマンスとよくある間違い](https://villagesql.com/docs/ja/guides/joins.md) — これらのエイリアスが最終的に使われる結合


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.