SQL join 用于把来自两个或多个表的行结合起来。
如果我们需要把多个表的结果组合查询出来,应该怎么做?
先来个例子:
有两个表:老师表和课程表,注意看它们之间的对应关系,注意看查询结果的差别
问题一:查询出所有老师对应的课程
select t1.name,t2.name from teacher t1
left join course t2 on t1.id=t2.teacher_id;
结果:
这就是左连接:left join table2 on
问题二:查询出所有课程对应的老师
扫描二维码关注公众号,回复:
13583597 查看本文章
select * from teacher t1
right join course t2 on t1.id=t2.teacher_id;
结果:
这就是右连接:right join table2 on
问题三:查询出有老师教的课程
select * from teacher t1
inner join course t2 on t1.id=t2.teacher_id;
结果:
这就是内连接:inner join table2 on
问题四:查询出所有的老师和课程,及它们之间存在的关系
full outer join
mysql不支持全连接,但可以通过左外连接+union+右外连接实现
(select * from teacher t1
left join course t2 on t1.id=t2.teacher_id)
union
(select * from teacher t1
right join course t2 on t1.id=t2.teacher_id)
总结:
- INNER JOIN:如果表中有至少一个匹配,则返回行(常用)
- LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行(常用)
- RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN:只要其中一个表中存在匹配,则返回行(mysql不支持)
- SELF JOIN:用于将表连接到自己,就好像该表是两个表一样,临时重命名了SQL语句中的至少一个表(也即是自连接)
所以基本掌握INNER JOIN 和LEFT JOIN 就差不多可以了。