JOIN 语法

最近更新时间:2024-01-31 16:54:21

我的收藏
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
返回结果: