JOIN 语法

最近更新时间: 2026-03-13 09:03:00

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
    

    返回结果: