SQL总结2: Join、Inner Join、Left Join、Right Join

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;

可得到如下结果:


SQL总结2: Join、Inner Join、Left Join、Right Join_第1张图片
表6

References:
http://www.w3school.com.cn/sql/sql_join_full.asp
https://blog.csdn.net/lasoup/article/details/52772365

你可能感兴趣的:(SQL总结2: Join、Inner Join、Left Join、Right Join)