1、温馨提示:本篇内容1200字,阅读全篇大约需要10分钟。

下面以mysql 50题的数据为例来讲。

join
内连接,返回两张表都有的数据。
select s.*,sc.*from student sjoin score scon s.student_id = sc.student_id
结果:

left join
左连接,以左边的表为主表,返回的数据行数跟主表相同,关联不上的字段为NULL。
select s.*,sc.*from student sleft join score scon s.student_id = sc.student_id
结果:

right join
右连接,以右边的表为主表,返回的数据行数跟主表相同,关联不上的字段为NULL。
select s.*,sc.*from student sright join score scon s.student_id = sc.student_id
结果同上面的join
left out join
同 left join,只是写法不一样
right out join
同 right join,只是写法不一样
full out join
全连接,返回两个表的并集,空缺的字段为NULL。
select s.*,sc.*from student sfull outer join score scon s.student_id = sc.student_id
结果同上面的right join
left semi join
并不拼接两张表,两个表对 on 的条件字段做交集,返回左表的记录,相较于其他的方法,这样子 hive 处理速度比较快。
select s.*from student sleft semi join score scon s.student_id = sc.student_id

map side join
select s.*,sc.course_id,sc.scorefrom student sjoin score scon s.student_id = sc.student_idjoin(select sc1.student_idfrom (select * from score where course_id = 1) sc1join (select * from score where course_id = 2) sc2on sc1.student_id = sc2.student_idwhere sc1.score > sc2.score) ton s.student_id = t.student_id;
结果:

总结:

文章转载自细说数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




