VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
mysql -u root -p sakila でクライアントを開いてください。
テーブルエイリアスの仕組み
TABLE_NAME をテーブルに、ALIAS_NAME を付けたい短い名前に、COLUMN_NAME を
そのテーブルの列に置き換えます。その時点から、このクエリの中ではエイリアスが
テーブルの名前になり、その列を指すには ALIAS_NAME.COLUMN_NAME と書きます。
列エイリアスと同じく、ここでの AS は省略できるため、FROM film f は
FROM film AS f と同じ意味です。AS を書くと意図が明確になります。
同じ結合を 2 通りに書く
エイリアスがないと、修飾されたすべての列が完全なテーブル名を伴います。両方のテーブルにある列は修飾しなければならない
film と language はどちらも language_id を持ちます。修飾せずに名前を
書くと、サーバーには選びようがありません。
ERROR 1052 は、その名前が指しうるものをサーバーが 2 つ以上見つけたという
意味です。結合では、それはほぼ常に 2 つのテーブルが共有する列であり、意図した
テーブルまたはエイリアスで修飾すると解決します。1 つのテーブルにしかない列名は
修飾する必要がありません。上のクエリで title と name が修飾なしで動くのは
そのためです。
エイリアスはテーブル名を置き換える
テーブルにエイリアスが付くと、クエリの残りの部分では元の名前は使えなくなります。film です。このクエリの中では、
f という名前にしか応答しません。スキーマに見えている名前に対する
ERROR 1054 は、たいていこれです。
エイリアスなしでは書けないケース
同じテーブルを 2 回指定するクエリには、actor と呼ばれるものが 2 つあり、
それらを区別する方法がありません。エイリアスがそのクエリを可能にするものであり、
自己結合のレッスンはそれの上に成り立っています。
テーブルエイリアスは列エイリアスではない
両者は同じキーワードを使い、異なる仕事をします。列エイリアスは結果の列の名前を 変え、見出しに現れます。テーブルエイリアスはクエリ内でテーブルの名前を変え、 出力にはまったく現れません。もう一方については 列エイリアスを参照してください。まとめ
- 1 つのクエリの間だけテーブルに短い名前を付けるには
TABLE_NAME AS ALIAS_NAMEを使います。 - クエリ内の 2 つ以上のテーブルが持つ列名は、必ず修飾します。
- 結合での
ERROR 1052は、修飾が必要な列名として読みます。 - 存在すると分かっている列を
ERROR 1054が指すときは、付けたエイリアスの使い忘れを疑います。 - エイリアスは結果について何も変えないと考えてください。
関連項目
- 結合の仕組み — エイリアスが役に立ち始める場所
- 列エイリアス —
ASのもう 1 つの仕事 - 自己結合 — エイリアスなしでは書けないクエリ
- MySQL の JOIN のパフォーマンスとよくある間違い — これらのエイリアスが最終的に使われる結合