説明
JOIN句は、2つ以上のテーブルの行を関連する列に基づいてマッチングし、結合するために使用されます。
権限要件
テーブル結合(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