Sql 如果表名在左联接中颠倒,是否会导致右联接?

Sql 如果表名在左联接中颠倒,是否会导致右联接?,sql,sqlite,Sql,Sqlite,考虑以下情况。我们有两张桌子,用户和订单。用户表有三列Id、Name、Order\u Id。Orders表有两列Id和order\u item SQL查询以获取每个用户的所有订单 select*from users left join orders on users.order\u id=orders.id; SQL查询以获取每个订单的所有用户 select*from users right join orders on users.order\u id=orders.id; 但我使用的是S

考虑以下情况。我们有两张桌子,用户和订单。用户表有三列Id、Name、Order\u Id。Orders表有两列Id和order\u item

SQL查询以获取每个用户的所有订单

select*from users left join orders on users.order\u id=orders.id;
SQL查询以获取每个订单的所有用户

select*from users right join orders on users.order\u id=orders.id;
但我使用的是Sqlite3,它目前不支持正确的完全外部连接。所以我试着用倒过来的表名跟随左连接。这可以解决我的问题

select*from orders righ join users.order\u id=orders.id;
所以我的问题是,如果我在left join中颠倒了表名,它会导致Right join吗?当然,右连接以不同的顺序打印表列,我的查询以不同的顺序打印


请帮我解决这个问题?与物权外接的比较、缺点和其他值得注意的事情?

如果只有两个表,那么是的

有了更多的桌子,事情就变得有点复杂了。这些查询并不完全相同,但在大多数情况下都是相同的。相当于:

from a left join b left join c
是:

问题在于
连接的解释顺序。因此,第一个版本是:

from (a left join b) left join c
这与:

from a left join (b left join c)

根据情况而定。

右侧
连接很少使用。
原因是,对于大多数人来说,
LEFT
join更容易理解(我的观点是,尽管使用RTL写作的人可能不同意)。

当您想要表1的所有行和表2的任何行相匹配时,通常会考虑一个结果集,该结果集的左侧有表1的列,右侧有表2的列。

所以你写:

SELECT * FROM Table1 LEFT JOIN Table2 ON <condition>
或者,如果不需要所有列,请枚举所需的所有列:

SELECT Table2.col1, Table2.col2, ...., Table1.col1, ....
当然,使用别名缩短代码是一种很好的做法,因此可以编写查询:

SELECT o.*, u.* 
FROM orders AS o LEFT JOIN users AS u
ON u.order_id = o.id;
SELECT Table2.*, Table1.* ....
SELECT Table2.col1, Table2.col2, ...., Table1.col1, ....
SELECT o.*, u.* 
FROM orders AS o LEFT JOIN users AS u
ON u.order_id = o.id;