JOIN 语法用于连接多个表。日志服务支持同日志主题内多个查询结果进行连接,或连接对象存储中的 CSV 文件、MySQL 数据库。
语法格式
* | SELECT [列名(KEY)] FROM table1 JOIN_TYPE table2 ON table1.key=table2.key
其中:
- 列名(KEY)在多个表名中相同时,必须指定表名或表的别名。
- JOIN_TYPE 支持如下类型([ ]内容可省略):
- [ INNER ] JOIN:返回两个表同时存在的结果
- 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) ,返回两个表的笛卡尔积(所有可能的组合)
- 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:从当前一个日志主题内,分别统计各个 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返回结果:


