【sql在三年前学过,现在差不多都忘了,学习hive顺便复习下sql语句】
创建2个表stu(id int,name string,grade int,tid int),teacher(tid int,name string),并分别load data。
1、创建一个view(学生的名字,对应的教师名字)【涉及到连接】
create view stu_teacher as select stu.name as stuname,teacher.name as tea_name from stu join teacher on(stu.tid=teacher.tid);
2、连接操作(left semi join类似于关系数据库中的in,其余的类似于关系数据库中的子查询)
左连接:获取学生以及学生对应的老师的信息(当学生老师不存在时显示null)
select stu.id,stu.*,teacher.* from stu right outer join teacher on (stu.tid=teacher.tid);
全连接:获取学生以及学生对应的老师的信息(当学生老师不存在时显示null,当老师的学生不存在时也显示null)
select stu.id,stu.*,teacher.* from stu full outer join teacher on (stu.tid=teacher.tid);
左半连接:获取有学生的老师的信息
select teacher.* from teacher left semi join stu on (stu.tid=teacher.tid);
当一个表足够小时,这时可以将这张表加载进内存,再进行连接(MAP join),其中红色的表示要将这张表加入内存进行map join
select /*+ MAPJOIN(teacher)*/ stu.*,teacher.* from stu join teacher on (stu.tid=teacher.tid);