根据
the join-op syntax,sqlite有13个不同的连接语句:
,JOIN LEFT JOIN OUTER JOIN LEFT OUTER JOIN INNER JOIN CROSS JOIN NATURAL JOIN NATURAL LEFT JOIN NATURAL OUTER JOIN NATURAL LEFT OUTER JOIN NATURAL INNER JOIN NATURAL CROSS JOIN
它们都是独一无二的吗?哪些是等价的?
sqlite语法有点不同于
the SQL-92 spec的,根据它,以下是非法的:
原文链接:https://www.f2er.com/sqlite/198133.html*OUTER JOIN *NATURAL OUTER JOIN *NATURAL CROSS JOIN
前两个,因为< join type>,为了包含OUTER,还必须包括< outer join type>之前它。最后一个,因为NATURAL只能出现在< qualified join>中,而不是< cross join>中。这些看起来不是根据任何规范,所以它是一个好主意,以避免它们。
正如the mailing list的回答,sqlite3只支持三个连接:CROSS JOIN,INNER JOIN和LEFT OUTER JOIN。以下是等效的:
,== CROSS JOIN JOIN == INNER JOIN LEFT JOIN == LEFT OUTER JOIN
如the wikipedia article中所述,NATURAL关键字是在同名列上查找和匹配的缩写,不影响连接类型。
根据SQLite page,不支持“RIGHT”和“FULL”OUTER JOIN。