JOIN構文は複数のテーブルを結合するために使用され、以下の使用方式をサポートします:
同一ログトピック内の複数のクエリ結果を結合します。
COS内のCSVファイル、MySQLデータベースを接続します。詳細については外部データの関連付けを参照してください。 構文形式
* | SELECT [列名(KEY)] FROM table1 JOIN_TYPE table2 ON table1.key=table2.key
ここで:
列名(KEY)が複数のテーブル名で同じである場合、テーブル名またはテーブルの別名を指定する必要があります。
JOIN_TYPEは以下のタイプをサポートします([ ]内の内容は省略可能です):
[ INNER ] JOIN:2つのテーブルに同時に存在する結果を返します。
LEFT [ OUTER ] JOIN:右側のテーブル(table2)に一致するデータがない場合でも、左側のテーブル(table1)からすべてのSELECT結果を返します。
RIGHT [ OUTER ] JOIN:左側のテーブル(table1)に一致するデータがない場合でも、右側のテーブル(table2)からすべてのSELECT結果を返します。
FULL [ OUTER ] JOIN:いずれかのテーブルに一致するデータが存在する場合、条件を満たすすべてのSELECT結果を返します。
CROSS JOIN:JOIN_CONDITION(つまりON table1.key=table2.key)を指定する必要はなく、2つのテーブルのデカルト積(すべての可能な組み合わせ)を返します。
JOIN_CONDITION、つまりON table1.key=table2.keyです。同時にフィルタ条件を指定することもできます。例えばON (table1.key=table2.key and table2.key='xxx')の場合、指定した条件に従って元のテーブルのデータをフィルタリングしてから、結合クエリを実行します。
構文例
LEFT JOIN:ログデータ(log)からip、url、user_idを照会し、user_idに基づいてuserinfoテーブルからName、Genderを照会します。
* |
select
log.ip,
log.url,
log.user_id,
userinfo.Name,
userinfo.Gender
from
log
left join userinfo on log.user_id = userinfo.id
limit
10000
結果を返します:
INNER JOIN:現在の1つのログトピック内で、各URLのエラーログ件数errorCountと総ログ件数allCountをそれぞれ集計し、その後関連付けます。この例では、ネストされたサブクエリとJOIN構文を組み合わせて使用する方法も示しています。
* |
select
errorCount,
allCount,
table1.url as url
from
(
select
count(*) as errorCount,
url
where
status_code != 200
group by
url
) as table1
inner join (
select
count(*) as allCount,
url
group by
url
) as table2 on table1.url = table2.url
結果を返します: