説明
JOIN 句は、2つ以上のテーブルの行を、それらのテーブル間の関連する列に基づいて結合するために使用します。
権限要件
テーブル結合(JOIN)を実行するには、現在のユーザーが JOIN に参加する各テーブルに対して少なくとも SELECT 権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
table_references:
table_reference [, table_reference ...]
table_reference:
table_factor
| joined_table
table_factor:
table_name [PARTITION (partition_name_list)] [sample_clause [SEED(integer)]] [[AS] table_alias_name][index_hint_list]
| table_subquery [AS] table_alias_name
| (table_references)
partition_name_list:
partition_name [, partition_name ...]
sample_clause:
SAMPLE [BLOCK] [ALL | BASE | INCR] (sample_percent)
index_hint_list:
index_hint [, index_hint ...]
index_hint:
{USE | FORCE | IGNORE} {KEY | INDEX} [FOR {JOIN | ORDER BY | GROUP BY}] (index_name_list)
index_list:
index_name [, index_name ...]
table_subquery:
(select_stmt [sample_clause [SEED(integer)]])
joined_table:
table_reference [NATURAL] [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference outer_join_type JOIN table_factor join_condition
join_condition:
ON expression
| USING (join_column_list)
join_column_list:
column_name [, column_name ...]
outer_join_type:
[NATURAL] {LEFT | RIGHT | FULL} [OUTER]
パラメータの説明
パラメータ |
説明 |
|---|---|
| table_reference | テーブル参照を表します。単一のテーブル、結合テーブル、またはサブクエリが指定できます。 |
| table_factor | クエリのデータソーステーブルを表します。テーブルのサブクエリや括弧内のテーブル参照も指定できます。詳細については、後述の table_factor を参照してください。 |
| joined_table | 結合テーブルを表します。詳細については、後述の joined_table を参照してください。 |
table_factor
table_name [PARTITION (partition_name_list)] [sample_clause [SEED(integer)]] [[AS] table_alias_name] [index_hint_list]:クエリのデータソーステーブルを指定します。詳細は以下のとおりです:table_name:データを取得するテーブルまたはビューの名前を指定します。OceanBaseデータベースは、DBLinkを使用して他のデータベースのテーブルをクエリすることをサポートしています(table_name@dblink_name)。DBLinkの使用方法の詳細については、DBLinkを使用してリモートデータベースのデータにアクセスするを参照してください。説明
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは、現在DBLink機能をサポートしていません。
PARTITION (partition_name_list):オプションです。特定のパーティションのクエリを指定するために使用します。partition_name_list:パーティション名のリストを表します。partition_nameはパーティション名を表します。
例:
テーブル
tbl1からパーティションp0とp1のデータを読み取ります。SELECT * FROM tbl1 PARTITION(p0, p1);実行結果は次のとおりです:
+------+------+------+ | col1 | col2 | col3 | +------+------+------+ | 1 | A1 | 1 | +------+------+------+ 1 row in setsample_clause [SEED(integer)]:テーブルからのサンプリングルール、つまりレコードの一部をスキャンするルールを指定するために使用します。詳細は以下のとおりです:BLOCK:オプションです。ランダムなデータブロックをスキャンすることを表します。デフォルトではランダムな行をスキャンします。ALL | BASE | INCR:オプションです。スキャン方式を表します。詳細は以下のとおりです:ALL:すべてのデータをスキャンすることを表します。デフォルトはALLです。BASE:ベースラインデータをスキャンすることを表します。INCR:増分データをスキャンすることを表します。
sample_percent:サンプリング比率を表します。単位は%です。INTEGERまたはDECIMAL型を使用できます。SEED(integer):オプションです。ランダムサンプリングのシード値を指定するために使用します。値の範囲は[0,4294967295]です。同じサンプリングシード値は常に同じ結果を返します。
[AS] table_alias_name:オプションです。テーブルエイリアスを指定します。index_hint_list:オプションです。クエリで使用するインデックスヒントのリストを指定するために使用します。index_hintはインデックスヒントを表し、クエリで使用するインデックスを指定します。詳細は以下のとおりです:USE | FORCE | IGNORE:USE:特定の操作でインデックスを使用するよう指示します。FORCE:特定の操作でインデックスの使用を強制するよう指示します。IGNORE:特定の操作でインデックスを使用しないよう指示します。
KEY | INDEX:クエリで検索とソートに使用するインデックスを指定します。FOR {JOIN | ORDER BY | GROUP BY}:オプションです。インデックスで実行する操作を指定します。詳細は以下のとおりです:FOR JOIN:インデックスを使用して結合を指定します。FOR ORDER BY:インデックスを使用してソートを指定します。FOR GROUP BY:インデックスを使用してグループ化を指定します。
index_name_list:使用するインデックス名のリストを指定します。1つまたは複数のインデックス名が可能です。複数のインデックス名は半角カンマ(,)で区切ります。index_nameは参照するインデックス名を表します。
table_subquery [AS] table_alias_name:サブクエリを指定します。サブクエリの詳細については、サブクエリを参照してください。例:
テーブル
tbl1からcol1列を選択し、それをサブクエリとしてt1という名前を付け、最終的にt1のすべての列を選択します。SELECT t1.* FROM (SELECT col1 FROM tbl1) t1;実行結果は次のとおりです:
+------+ | col1 | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set
joined_table
table_reference [NATURAL] [INNER | CROSS] JOIN table_factor [join_condition]:内部結合を表します。これは、2つのテーブルのマッチする行の共通部分を返します。この結合では、マッチする行がない場合、結果は返されません。詳細は以下のとおりです:table_reference:テーブル参照を表し、単一のテーブル、結合テーブル、またはサブクエリを指定できます。NATURAL:オプションで、自然結合を行うことを示します。NATURAL JOINは、自動的に同じ列を使用して結合します。INNER | CROSS:オプションで、詳細は以下のとおりです:INNER JOIN:内部結合を行うことを表します。結合条件が指定されていない場合、INNER JOINは英語のカンマ(,)と同等であり、指定されたテーブルからデカルト積を生成します。内部結合の詳細については、INNER JOINを参照してください。注意
英語のカンマ(
,)は演算子として使用され、優先順位はINNER JOIN、CROSS JOIN、LEFT JOINよりも低いため、カンマを他の結合キーワードと混在させて使用すると、ON句の条件が誤って解釈される可能性があります。CROSS JOIN:OceanBase データベースの MySQL モードでは、CROSS JOINはJOIN、INNER JOINと同等です。
table_factor:結合するテーブルの参照を表します。table_factor を参照してください。join_condition:オプションで、結合条件を表します。詳細は以下のとおりです:ON expression:重複する列を返す結合条件で、異なる名前の列を結合条件として使用する場合に適用されます。任意の結合条件を指定でき、等しい条件に限定されません。例えば、大なり小なりなどの条件を使用して結合することもできます。例:
SELECT * FROM tbl1 JOIN tbl2 ON tbl1.col1 = tbl2.col1;実行結果は次のとおりです:
+------+------+------+------+------+------+ | col1 | col2 | col3 | col1 | col2 | col3 | +------+------+------+------+------+------+ | 1 | A1 | 1 | 1 | A1 | 1 | | 2 | A2 | 2 | 2 | A2 | 22 | | 3 | A3 | 3 | 3 | A3 | 33 | +------+------+------+------+------+------+ 3 rows in setUSING (join_column_list):重複する列を返さない結合条件で、結合するテーブルが同じ名前の列を使用することを条件とします。例:
SELECT * FROM tbl1 JOIN tbl2 USING (col1);実行結果は次のとおりです:
+------+------+------+------+------+ | col1 | col2 | col3 | col2 | col3 | +------+------+------+------+------+ | 1 | A1 | 1 | A1 | 1 | | 2 | A2 | 2 | A2 | 22 | | 3 | A3 | 3 | A3 | 33 | +------+------+------+------+------+ 3 rows in set
table_reference outer_join_type JOIN table_factor join_condition:外部結合を表します。これは、マッチするかどうかに関係なく、2つのテーブルのすべての行の結果を返します。この結合では、マッチする行がない場合、NULLが埋め込まれます。outer_join_type:外部結合のタイプを指定します。詳細は以下のとおりです:{LEFT | RIGHT | FULL} [OUTER] JOIN:LEFT [OUTER] JOIN:左外部結合を表します。左テーブルの1行が右テーブルで見つからない場合、右テーブルにNULLが自動的に埋め込まれます。左外部結合の詳細については、LEFT JOINを参照してください。RIGHT [OUTER] JOIN:右外部結合を表します。右テーブルの1行が左テーブルで見つからない場合、左テーブルにNULLが自動的に埋め込まれます。右外部結合の詳細については、RIGHT JOINを参照してください。FULL [OUTER] JOIN:完全外部結合を表します。左テーブルまたは右テーブルでマッチする行が見つからない場合、NULLが自動的に埋め込まれます。完全外部結合の詳細については、FULL JOINを参照してください。
join_condition:結合条件を表します。
例:
テーブル
tbl1のすべての列を選択し、テーブルtbl2のデータと左結合を行います。結合条件はtbl1.col1 = tbl2.col1で、条件tbl1.col1 > 2を使用してこの条件を満たすデータをフィルタリングします。SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl1.col1 = tbl2.col1 AND tbl1.col1 > 2;実行結果は次のとおりです:
+------+------+------+------+------+------+ | col1 | col2 | col3 | col1 | col2 | col3 | +------+------+------+------+------+------+ | 1 | A1 | 1 | NULL | NULL | NULL | | 2 | A2 | 2 | NULL | NULL | NULL | | 3 | A3 | 3 | 3 | A3 | 33 | +------+------+------+------+------+------+ 3 rows in set