メインコンテンツへスキップ

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
テーブルエイリアスは、1 つのクエリの間だけ有効な、テーブルの短い名前です。 結合での入力の手間を省き、エイリアスがないとクエリが動かない状況が 2 つ あります。 始める前に、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 が指すときは、付けたエイリアスの使い忘れを疑います。
  • エイリアスは結果について何も変えないと考えてください。

関連項目