考虑以下情况。我们有两个表的用户和订单。用户表具有三列Id,Name,Order_id。Orders表具有两列Id和order_item。
SQL查询以获取每个用户的所有订单。
select * from users left join orders on users.order_id = orders.id;
SQL查询以获取每个订单的所有用户
select * from users right join orders on users.order_id = orders.id;
但是我使用的Sqlite3当前不支持Right,Full Outer连接。因此,我尝试使用反向表名称跟随左联接。这可以解决我的问题。
select * from orders righ join users on users.order_id = orders.id;
所以我的问题是,如果我在左联接中反转了表名,是否会导致右联接?当然,Right join以不同的顺序打印表列,而我的查询以不同的顺序打印。
请帮我这种方法吗?与Real Right外部连接的比较,劣势和其他值得注意的东西?
RIGHT
联接很少使用。
原因是LEFT
对于大多数人来说,联接更容易理解(我认为,尽管使用RTL编写的人可能会不同意)。
当您需要Table1的所有行和Table2的任何匹配行时,通常会考虑一个结果集,该结果集在结果的左侧具有Table1的列,而在右侧具有Table2的列。
所以你写:
SELECT * FROM Table1 LEFT JOIN Table2 ON <condition>
这与以下内容完全相同:
SELECT * FROM Table2 RIGHT JOIN Table1 ON <condition>
当然,Right join以不同的顺序打印表列我的查询以不同的顺序打印
您必须显式设置结果中列的顺序。
因此,SELECT *
如果您不想首先让Table2的列写入:
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句