MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

9.2.2 識別子の修飾子

オブジェクト名は、修飾されていない場合と修飾されている場合があります。 名前の解釈があいまいでないコンテキストでは、修飾されていない名前を使用できます。 修飾名には、デフォルトコンテキストをオーバーライドするか、欠落しているコンテキストを提供することによって解釈コンテキストを明確にするための修飾子が少なくとも 1 つ含まれています。

たとえば、次のステートメントは、修飾されていない名前 t1 を使用してテーブルを作成します:

CREATE TABLE t1 (i INT);

t1 にはデータベースを指定する修飾子が含まれていないため、このステートメントはデフォルトデータベースにテーブルを作成します。 デフォルトのデータベースがない場合は、エラーが発生します。

次のステートメントは、修飾名 db1.t1 を使用してテーブルを作成します:

CREATE TABLE db1.t1 (i INT);

db1.t1 にはデータベース修飾子 db1 が含まれているため、このステートメントは、デフォルトのデータベースに関係なく、db1 という名前のデータベースに t1 を作成します。 デフォルトのデータベースがない場合は、修飾子を指定する必要があります。 修飾子は、デフォルトデータベースがある場合、デフォルトとは異なるデータベースを指定する場合、またはデフォルトが指定したものと同じ場合にデータベースを明示的にする場合に指定できます。

クオリファイアには次の特性があります:

オブジェクト名に使用できる修飾子は、オブジェクトタイプによって異なります:

修飾されていない参照があいまいでないかぎり、ステートメントでオブジェクト参照の修飾子を指定する必要はありません。 カラム c1 がテーブル t1t2 のみの c2 および t1t2 の両方の c に出現するとします。 c への修飾されていない参照は、両方のテーブルを参照するステートメントであいまいであり、どのテーブルを意味するかを示すために t1.c または t2.c として修飾する必要があります:

SELECT c1, c2, t1.c FROM t1 INNER JOIN t2
WHERE t2.c > 100;

同様に、データベース db1 のテーブル t および同じステートメントのデータベース db2 のテーブル t から取得するには、テーブル参照を修飾する必要があります: これらのテーブルのカラムを参照する場合、修飾子は両方のテーブルに表示されるカラム名にのみ必要です。 カラム c1 がテーブル db1.tdb2.t のみの c2 および db1.tdb2.t の両方の c に出現するとします。 この場合、c はあいまいであり、修飾する必要がありますが、c1 および c2 は次のようにする必要はありません:

SELECT c1, c2, db1.t.c FROM db1.t INNER JOIN db2.t
WHERE db2.t.c > 100;

テーブルのエイリアスを使用すると、修飾カラム参照をより簡単に書き込むことができます:

SELECT c1, c2, t1.c FROM db1.t AS t1 INNER JOIN db2.t AS t2
WHERE t2.c > 100;