Join可以根据多张表之间的关系用来获取新表?反正是类似的效果。
假设有以下两张表,Users 和 orders:
表一:Users 表二:orders
1 Join
执行以下语句:
select * from Users join orders where Users.id=orders.userId;
可得到如下表:
表三
若不使用join,执行以下语句:
select * from Users inner join orders where Users.id=orders.userId;
发现结果是一样的。
2 Left Join、Right Join
执行:
select * from Users left join orders where Users.id=orders.userId;
发现报错,不知为何,这个时候把 where 改成 on 再执行:
select * from Users left join orders on Users.id=orders.userId;
得到如下结果:
表4
表 4 结合了表1与表2的所有列,且保留了左表的所有行,若左表的行没有与右表对应的行,则用null填充。
Right join和left join效果是类似的。
执行
select * from Users right join orders on Users.id=orders.userId;
可得如下结果:
表5
若采用 full join,执行:
select * from Users full join orders on Users.id=orders.userId;
发现报错!原因是:mysql不支持full join。(这里用的是mysql)
替代的写法是采用 union:
select * from Users right join orders on Users.id=orders.userId
union
select * from Users left join orders on Users.id=orders.userId;
可得到如下结果:
表6
References:
http://www.w3school.com.cn/sql/sql_join_full.asp
https://blog.csdn.net/lasoup/article/details/52772365
网友评论