语法格式
* | 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。
* |selectlog.ip,log.url,log.user_id,userinfo.Name,userinfo.Genderfromlogleft join userinfo on log.user_id = userinfo.idlimit10000
返回结果:
INNER JOIN:从当前一个日志主题内,分别统计各个 URL 的错误日志条数 errorCount 和总日志条数 allCount,然后关联在一起。该实例同时演示了嵌套子查询于 JOIN 语法一起使用的方式。
* |selecterrorCount,allCount,table1.url as urlfrom(selectcount(*) as errorCount,urlwherestatus_code != 200group byurl) as table1inner join (selectcount(*) as allCount,urlgroup byurl) as table2 on table1.url = table2.url
返回结果: