Hive案例-学生成绩表综合案例

元数据:

course数据:
1,数据库
2,数学
3,信息系统
4,操作系统
5,数据结构
6,数据处理
student数据:
95002,刘晨,女,19,IS
95017,王风娟,女,18,IS
95018,王一,女,19,IS
95013,冯伟,男,21,CS
95014,王小丽,女,19,CS
95019,邢小丽,女,19,IS
95020,赵钱,男,21,IS
95003,王敏,女,22,MA
95004,张立,男,19,IS
95012,孙花,女,20,CS
95010,孔小涛,男,19,CS
95005,刘刚,男,18,MA
95006,孙庆,男,23,CS
95007,易思玲,女,19,MA
95008,李娜,女,18,CS
95021,周二,男,17,MA
95022,郑明,男,20,MA
95001,李勇,男,20,CS
95011,包小柏,男,18,MA
95009,梦圆圆,女,18,MA
95015,王君,男,18,MA
95016,钱国,男,21,MA
studentcourse数据:
95001,1,81
95001,2,85
95001,3,88
95001,4,70
95002,2,90
95002,3,80
95002,4,71
95002,5,60
95003,1,82
95003,3,90
95003,5,100
95004,1,80
95004,2,92
95004,4,91
95004,5,70
95005,1,70
95005,2,92
95005,3,99
95005,6,87
95006,1,72
95006,2,62
95006,3,100
95006,4,59
95006,5,60
95006,6,98
95007,3,68
95007,4,91
95007,5,94
95007,6,78
95008,1,98
95008,3,89
95008,6,91
95009,2,81
95009,4,89
95009,6,100
95010,2,98
95010,5,90
95010,6,80
95011,1,81
95011,2,91
95011,3,81
95011,4,86
95012,1,81
95012,3,78
95012,4,85
95012,6,98
95013,1,98
95013,2,58
95013,4,88
95013,5,93
95014,1,91
95014,2,100
95014,4,98
95015,1,91
95015,3,59
95015,4,100
95015,6,95
95016,1,92
95016,2,99
95016,4,82
95017,4,82
95017,5,100
95017,6,58
95018,1,95
95018,2,100
95018,3,67
95018,4,78
95019,1,77
95019,2,90
95019,3,91
95019,4,67
95019,5,87
95020,1,66
95020,2,99
95020,5,93
95021,2,93
95021,5,91
95021,6,99
95022,3,69
95022,4,93
95022,5,82
95022,6,100
在hive中建表:
create table course 
(num int,course string) 
row format delimited fields terminated by ',';

load data local inpath '/home/potter/course.txt' 
into table course;

create table student 
(id int , name string , sex string ,age int , deparment string) 
row format delimited fields terminated by ',';

load data local inpath "/home/potter/student1.txt" 
into table student;

create table studentcourse 
(id int,num int,score int) 
row format delimited fields terminated by ',';

load data local inpath '/home/potter/studentcourse.txt' 
into table studentcourse;
第一题:基本操作

(1)查询全体学生的学号与姓名

select id,name from student;

结果:
95002   刘晨
95017   王风娟
95018   王一
95013   冯伟
95014   王小丽
95019   邢小丽
95020   赵钱
95003   王敏
95004   张立
95012   孙花
95010   孔小涛
95005   刘刚
95006   孙庆
95007   易思玲
95008   李娜
95021   周二
95022   郑明
95001   李勇
95011   包小柏
95009   梦圆圆
95015   王君
95016   钱国

(2)查询选修了课程的学生姓名

create table id_course as 
select sc.id id,c.course course 
from course c join studentcourse sc on c.num=sc.num ;
结果:
id_course.id    id_course.course
95001   数据库
95001   数学
95001   信息系统
95001   操作系统
95002   数学
95002   信息系统
95002   操作系统
95002   数据结构
95003   数据库
95003   信息系统
95003   数据结构
95004   数据库
95004   数学
95004   操作系统
95004   数据结构
95005   数据库
95005   数学
95005   信息系统
95005   数据处理
95006   数据库
95006   数学
95006   信息系统
95006   操作系统
95006   数据结构
95006   数据处理
95007   信息系统
95007   操作系统
95007   数据结构
95007   数据处理
95008   数据库
95008   信息系统
95008   数据处理
95009   数学
95009   操作系统
95009   数据处理
95010   数学
95010   数据结构
95010   数据处理
95011   数据库
95011   数学
95011   信息系统
95011   操作系统
95012   数据库
95012   信息系统
95012   操作系统
95012   数据处理
95013   数据库
95013   数学
95013   操作系统
95013   数据结构
95014   数据库
95014   数学
95014   操作系统
95015   数据库
95015   信息系统
95015   操作系统
95015   数据处理
95016   数据库
95016   数学
95016   操作系统
95017   操作系统
95017   数据结构
95017   数据处理
95018   数据库
95018   数学
95018   信息系统
95018   操作系统
95019   数据库
95019   数学
95019   信息系统
95019   操作系统
95019   数据结构
95020   数据库
95020   数学
95020   数据结构
95021   数学
95021   数据结构
95021   数据处理
95022   信息系统
95022   操作系统
95022   数据结构
95022   数据处理

select ic.course, s.name 
from id_course ic join student s on ic.id=s.id;

结果:
数据库  李勇
数学    李勇
信息系统        李勇
操作系统        李勇
数学    刘晨
信息系统        刘晨
操作系统        刘晨
数据结构        刘晨
数据库  王敏
信息系统        王敏
数据结构        王敏
数据库  张立
数学    张立
操作系统        张立
数据结构        张立
数据库  刘刚
数学    刘刚
信息系统        刘刚
数据处理        刘刚
数据库  孙庆
数学    孙庆
信息系统        孙庆
操作系统        孙庆
数据结构        孙庆
数据处理        孙庆
信息系统        易思玲
操作系统        易思玲
数据结构        易思玲
数据处理        易思玲
数据库  李娜
信息系统        李娜
数据处理        李娜
数学    梦圆圆
操作系统        梦圆圆
数据处理        梦圆圆
数学    孔小涛
数据结构        孔小涛
数据处理        孔小涛
数据库  包小柏
数学    包小柏
信息系统        包小柏
操作系统        包小柏
数据库  孙花
信息系统        孙花
操作系统        孙花
数据处理        孙花
数据库  冯伟
数学    冯伟
操作系统        冯伟
数据结构        冯伟
数据库  王小丽
数学    王小丽
操作系统        王小丽
数据库  王君
信息系统        王君
操作系统        王君
数据处理        王君
数据库  钱国
数学    钱国
操作系统        钱国
操作系统        王风娟
数据结构        王风娟
数据处理        王风娟
数据库  王一
数学    王一
信息系统        王一
操作系统        王一
数据库  邢小丽
数学    邢小丽
信息系统        邢小丽
操作系统        邢小丽
数据结构        邢小丽
数据库  赵钱
数学    赵钱
数据结构        赵钱
数学    周二
数据结构        周二
数据处理        周二
信息系统        郑明
操作系统        郑明
数据结构        郑明
数据处理        郑明
第二题:hive的group by 和集合函数

(1)查询学生的总人数

select count(*) from student;

结果:
22

(2)计算1号课程的学生平均成绩

select num ,avg(score) 
from studentcourse where num=1 group by num;

结果:
1       83.66666666666667

(3)查询各科成绩平均分

create table course_score as 
select c.course course,sc.score score 
from course c join studentcourse sc on c.num=sc.num;
结果:
course_score.course     course_score.score
数据库  81
数学    85
信息系统        88
操作系统        70
数学    90
信息系统        80
操作系统        71
数据结构        60
数据库  82
信息系统        90
数据结构        100
数据库  80
数学    92
操作系统        91
数据结构        70
数据库  70
数学    92
信息系统        99
数据处理        87
数据库  72
数学    62
信息系统        100
操作系统        59
数据结构        60
数据处理        98
信息系统        68
操作系统        91
数据结构        94
数据处理        78
数据库  98
信息系统        89
数据处理        91
数学    81
操作系统        89
数据处理        100
数学    98
数据结构        90
数据处理        80
数据库  81
数学    91
信息系统        81
操作系统        86
数据库  81
信息系统        78
操作系统        85
数据处理        98
数据库  98
数学    58
操作系统        88
数据结构        93
数据库  91
数学    100
操作系统        98
数据库  91
信息系统        59
操作系统        100
数据处理        95
数据库  92
数学    99
操作系统        82
操作系统        82
数据结构        100
数据处理        58
数据库  95
数学    100
信息系统        67
操作系统        78
数据库  77
数学    90
信息系统        91
操作系统        67
数据结构        87
数据库  66
数学    99
数据结构        93
数学    93
数据结构        91
数据处理        99
信息系统        69
操作系统        93
数据结构        82
数据处理        100

select course ,avg(score) 
from course_score group by course;

结果:
信息系统        81.46153846153847
操作系统        83.125
数学    88.66666666666667
数据处理        89.45454545454545
数据库  83.66666666666667
数据结构        85.0

(4)查询选修1号课程的学生最高分数

create table num_score as 
select c.num num,sc.score score 
from course c join studentcourse sc on c.num=sc.num;
结果:
num_score.num   num_score.score
1       81
2       85
3       88
4       70
2       90
3       80
4       71
5       60
1       82
3       90
5       100
1       80
2       92
4       91
5       70
1       70
2       92
3       99
6       87
1       72
2       62
3       100
4       59
5       60
6       98
3       68
4       91
5       94
6       78
1       98
3       89
6       91
2       81
4       89
6       100
2       98
5       90
6       80
1       81
2       91
3       81
4       86
1       81
3       78
4       85
6       98
1       98
2       58
4       88
5       93
1       91
2       100
4       98
1       91
3       59
4       100
6       95
1       92
2       99
4       82
4       82
5       100
6       58
1       95
2       100
3       67
4       78
1       77
2       90
3       91
4       67
5       87
1       66
2       99
5       93
2       93
5       91
6       99
3       69
4       93
5       82
6       100
select num ,max(score) 
from num_score where num=1 group by num;

结果:
1       98

(5)求各个课程号及相应的选课人数

create table id_num_course as 
select sc.id id, sc.num num ,c.course course 
from course c join studentcourse sc on c.num=sc.num ;
结果:
id_num_course.id        id_num_course.num       id_num_course.course
95001   1       数据库
95001   2       数学
95001   3       信息系统
95001   4       操作系统
95002   2       数学
95002   3       信息系统
95002   4       操作系统
95002   5       数据结构
95003   1       数据库
95003   3       信息系统
95003   5       数据结构
95004   1       数据库
95004   2       数学
95004   4       操作系统
95004   5       数据结构
95005   1       数据库
95005   2       数学
95005   3       信息系统
95005   6       数据处理
95006   1       数据库
95006   2       数学
95006   3       信息系统
95006   4       操作系统
95006   5       数据结构
95006   6       数据处理
95007   3       信息系统
95007   4       操作系统
95007   5       数据结构
95007   6       数据处理
95008   1       数据库
95008   3       信息系统
95008   6       数据处理
95009   2       数学
95009   4       操作系统
95009   6       数据处理
95010   2       数学
95010   5       数据结构
95010   6       数据处理
95011   1       数据库
95011   2       数学
95011   3       信息系统
95011   4       操作系统
95012   1       数据库
95012   3       信息系统
95012   4       操作系统
95012   6       数据处理
95013   1       数据库
95013   2       数学
95013   4       操作系统
95013   5       数据结构
95014   1       数据库
95014   2       数学
95014   4       操作系统
95015   1       数据库
95015   3       信息系统
95015   4       操作系统
95015   6       数据处理
95016   1       数据库
95016   2       数学
95016   4       操作系统
95017   4       操作系统
95017   5       数据结构
95017   6       数据处理
95018   1       数据库
95018   2       数学
95018   3       信息系统
95018   4       操作系统
95019   1       数据库
95019   2       数学
95019   3       信息系统
95019   4       操作系统
95019   5       数据结构
95020   1       数据库
95020   2       数学
95020   5       数据结构
95021   2       数学
95021   5       数据结构
95021   6       数据处理
95022   3       信息系统
95022   4       操作系统
95022   5       数据结构
95022   6       数据处理
create table id_num_course_student as 
select ic.id id,ic.num num, ic.course course, s.name name 
from id_num_course ic join student s on ic.id=s.id;
结果:
95001   1       数据库  李勇
95001   2       数学    李勇
95001   3       信息系统        李勇
95001   4       操作系统        李勇
95002   2       数学    刘晨
95002   3       信息系统        刘晨
95002   4       操作系统        刘晨
95002   5       数据结构        刘晨
95003   1       数据库  王敏
95003   3       信息系统        王敏
95003   5       数据结构        王敏
95004   1       数据库  张立
95004   2       数学    张立
95004   4       操作系统        张立
95004   5       数据结构        张立
95005   1       数据库  刘刚
95005   2       数学    刘刚
95005   3       信息系统        刘刚
95005   6       数据处理        刘刚
95006   1       数据库  孙庆
95006   2       数学    孙庆
95006   3       信息系统        孙庆
95006   4       操作系统        孙庆
95006   5       数据结构        孙庆
95006   6       数据处理        孙庆
95007   3       信息系统        易思玲
95007   4       操作系统        易思玲
95007   5       数据结构        易思玲
95007   6       数据处理        易思玲
95008   1       数据库  李娜
95008   3       信息系统        李娜
95008   6       数据处理        李娜
95009   2       数学    梦圆圆
95009   4       操作系统        梦圆圆
95009   6       数据处理        梦圆圆
95010   2       数学    孔小涛
95010   5       数据结构        孔小涛
95010   6       数据处理        孔小涛
95011   1       数据库  包小柏
95011   2       数学    包小柏
95011   3       信息系统        包小柏
95011   4       操作系统        包小柏
95012   1       数据库  孙花
95012   3       信息系统        孙花
95012   4       操作系统        孙花
95012   6       数据处理        孙花
95013   1       数据库  冯伟
95013   2       数学    冯伟
95013   4       操作系统        冯伟
95013   5       数据结构        冯伟
95014   1       数据库  王小丽
95014   2       数学    王小丽
95014   4       操作系统        王小丽
95015   1       数据库  王君
95015   3       信息系统        王君
95015   4       操作系统        王君
95015   6       数据处理        王君
95016   1       数据库  钱国
95016   2       数学    钱国
95016   4       操作系统        钱国
95017   4       操作系统        王风娟
95017   5       数据结构        王风娟
95017   6       数据处理        王风娟
95018   1       数据库  王一
95018   2       数学    王一
95018   3       信息系统        王一
95018   4       操作系统        王一
95019   1       数据库  邢小丽
95019   2       数学    邢小丽
95019   3       信息系统        邢小丽
95019   4       操作系统        邢小丽
95019   5       数据结构        邢小丽
95020   1       数据库  赵钱
95020   2       数学    赵钱
95020   5       数据结构        赵钱
95021   2       数学    周二
95021   5       数据结构        周二
95021   6       数据处理        周二
95022   3       信息系统        郑明
95022   4       操作系统        郑明
95022   5       数据结构        郑明
95022   6       数据处理        郑明

select num , count(course) 
from id_num_course_student group by num ;

结果:
1       15
2       15
3       13
4       16
5       12
6       11

(6)查询选修了3门以上的课程的学生学号

create table id_count as 
select id ,count(id) count 
from id_num_course_student group by id;
结果:
id_count.id     id_count.count
95001   4
95002   4
95003   3
95004   4
95005   4
95006   6
95007   4
95008   3
95009   3
95010   3
95011   4
95012   4
95013   4
95014   3
95015   4
95016   3
95017   3
95018   4
95019   5
95020   3
95021   3
95022   4

select id 
from id_count where count > 3;
结果:
id
95001
95002
95004
95005
95006
95007
95011
95012
95013
95015
95018
95019
95022
第三题:hive的Order By/Sort By/Distribute By

(1)查询学生信息,结果按学号全局有序

select * from student order by id;
结果:
id      name    sex     age     deparment
95001   李勇    男      20      CS
95002   刘晨    女      19      IS
95003   王敏    女      22      MA
95004   张立    男      19      IS
95005   刘刚    男      18      MA
95006   孙庆    男      23      CS
95007   易思玲  女      19      MA
95008   李娜    女      18      CS
95009   梦圆圆  女      18      MA
95010   孔小涛  男      19      CS
95011   包小柏  男      18      MA
95012   孙花    女      20      CS
95013   冯伟    男      21      CS
95014   王小丽  女      19      CS
95015   王君    男      18      MA
95016   钱国    男      21      MA
95017   王风娟  女      18      IS
95018   王一    女      19      IS
95019   邢小丽  女      19      IS
95020   赵钱    男      21      IS
95021   周二    男      17      MA
95022   郑明    男      20      MA

(2)查询学生信息,结果区分性别按年龄有序

需要先开两个tasks,默认的是-1:
set mapred.reduce.tasks=2;(默认-1)

select * from student distribute by sex sort by age;

结果:
student.id      student.name    student.sex     student.age     student.deparment
95021   周二    男      17      MA
95005   刘刚    男      18      MA
95015   王君    男      18      MA
95011   包小柏  男      18      MA
95004   张立    男      19      IS
95010   孔小涛  男      19      CS
95001   李勇    男      20      CS
95022   郑明    男      20      MA
95016   钱国    男      21      MA
95020   赵钱    男      21      IS
95013   冯伟    男      21      CS
95006   孙庆    男      23      CS
95008   李娜    女      18      CS
95009   梦圆圆  女      18      MA
95017   王风娟  女      18      IS
95019   邢小丽  女      19      IS
95014   王小丽  女      19      CS
95002   刘晨    女      19      IS
95018   王一    女      19      IS
95007   易思玲  女      19      MA
95012   孙花    女      20      CS
95003   王敏    女      22      MA
第四题:Join查询,join只支持等值连接

(1)查询每个学生及其选修课程的情况

create table id_num_course as 
select sc.id id, sc.num num ,c.course course 
from course c join studentcourse sc on c.num=sc.num ;
结果:
id_num_course.id        id_num_course.num       id_num_course.course
95001   1       数据库
95001   2       数学
95001   3       信息系统
95001   4       操作系统
95002   2       数学
95002   3       信息系统
95002   4       操作系统
95002   5       数据结构
95003   1       数据库
95003   3       信息系统
95003   5       数据结构
95004   1       数据库
95004   2       数学
95004   4       操作系统
95004   5       数据结构
95005   1       数据库
95005   2       数学
95005   3       信息系统
95005   6       数据处理
95006   1       数据库
95006   2       数学
95006   3       信息系统
95006   4       操作系统
95006   5       数据结构
95006   6       数据处理
95007   3       信息系统
95007   4       操作系统
95007   5       数据结构
95007   6       数据处理
95008   1       数据库
95008   3       信息系统
95008   6       数据处理
95009   2       数学
95009   4       操作系统
95009   6       数据处理
95010   2       数学
95010   5       数据结构
95010   6       数据处理
95011   1       数据库
95011   2       数学
95011   3       信息系统
95011   4       操作系统
95012   1       数据库
95012   3       信息系统
95012   4       操作系统
95012   6       数据处理
95013   1       数据库
95013   2       数学
95013   4       操作系统
95013   5       数据结构
95014   1       数据库
95014   2       数学
95014   4       操作系统
95015   1       数据库
95015   3       信息系统
95015   4       操作系统
95015   6       数据处理
95016   1       数据库
95016   2       数学
95016   4       操作系统
95017   4       操作系统
95017   5       数据结构
95017   6       数据处理
95018   1       数据库
95018   2       数学
95018   3       信息系统
95018   4       操作系统
95019   1       数据库
95019   2       数学
95019   3       信息系统
95019   4       操作系统
95019   5       数据结构
95020   1       数据库
95020   2       数学
95020   5       数据结构
95021   2       数学
95021   5       数据结构
95021   6       数据处理
95022   3       信息系统
95022   4       操作系统
95022   5       数据结构
95022   6       数据处理

select s.name name ,ic.course course
from id_num_course ic join student s on ic.id=s.id;
结果:
name    course
李勇    数据库
李勇    数学
李勇    信息系统
李勇    操作系统
刘晨    数学
刘晨    信息系统
刘晨    操作系统
刘晨    数据结构
王敏    数据库
王敏    信息系统
王敏    数据结构
张立    数据库
张立    数学
张立    操作系统
张立    数据结构
刘刚    数据库
刘刚    数学
刘刚    信息系统
刘刚    数据处理
孙庆    数据库
孙庆    数学
孙庆    信息系统
孙庆    操作系统
孙庆    数据结构
孙庆    数据处理
易思玲  信息系统
易思玲  操作系统
易思玲  数据结构
易思玲  数据处理
李娜    数据库
李娜    信息系统
李娜    数据处理
梦圆圆  数学
梦圆圆  操作系统
梦圆圆  数据处理
孔小涛  数学
孔小涛  数据结构
孔小涛  数据处理
包小柏  数据库
包小柏  数学
包小柏  信息系统
包小柏  操作系统
孙花    数据库
孙花    信息系统
孙花    操作系统
孙花    数据处理
冯伟    数据库
冯伟    数学
冯伟    操作系统
冯伟    数据结构
王小丽  数据库
王小丽  数学
王小丽  操作系统
王君    数据库
王君    信息系统
王君    操作系统
王君    数据处理
钱国    数据库
钱国    数学
钱国    操作系统
王风娟  操作系统
王风娟  数据结构
王风娟  数据处理
王一    数据库
王一    数学
王一    信息系统
王一    操作系统
邢小丽  数据库
邢小丽  数学
邢小丽  信息系统
邢小丽  操作系统
邢小丽  数据结构
赵钱    数据库
赵钱    数学
赵钱    数据结构
周二    数学
周二    数据结构
周二    数据处理
郑明    信息系统
郑明    操作系统
郑明    数据结构
郑明    数据处理

(2)查询学生的得分情况。

create table id_num_course_score as 
select sc.id id,sc.num num,c.course course,sc.score score 
from course c join studentcourse sc on c.num=sc.num;

select * from id_num_course_score;
结果:
id_num_course_score.id  id_num_course_score.num id_num_course_score.course      id_num_course_score.score
95001   1       数据库  81
95001   2       数学    85
95001   3       信息系统        88
95001   4       操作系统        70
95002   2       数学    90
95002   3       信息系统        80
95002   4       操作系统        71
95002   5       数据结构        60
95003   1       数据库  82
95003   3       信息系统        90
95003   5       数据结构        100
95004   1       数据库  80
95004   2       数学    92
95004   4       操作系统        91
95004   5       数据结构        70
95005   1       数据库  70
95005   2       数学    92
95005   3       信息系统        99
95005   6       数据处理        87
95006   1       数据库  72
95006   2       数学    62
95006   3       信息系统        100
95006   4       操作系统        59
95006   5       数据结构        60
95006   6       数据处理        98
95007   3       信息系统        68
95007   4       操作系统        91
95007   5       数据结构        94
95007   6       数据处理        78
95008   1       数据库  98
95008   3       信息系统        89
95008   6       数据处理        91
95009   2       数学    81
95009   4       操作系统        89
95009   6       数据处理        100
95010   2       数学    98
95010   5       数据结构        90
95010   6       数据处理        80
95011   1       数据库  81
95011   2       数学    91
95011   3       信息系统        81
95011   4       操作系统        86
95012   1       数据库  81
95012   3       信息系统        78
95012   4       操作系统        85
95012   6       数据处理        98
95013   1       数据库  98
95013   2       数学    58
95013   4       操作系统        88
95013   5       数据结构        93
95014   1       数据库  91
95014   2       数学    100
95014   4       操作系统        98
95015   1       数据库  91
95015   3       信息系统        59
95015   4       操作系统        100
95015   6       数据处理        95
95016   1       数据库  92
95016   2       数学    99
95016   4       操作系统        82
95017   4       操作系统        82
95017   5       数据结构        100
95017   6       数据处理        58
95018   1       数据库  95
95018   2       数学    100
95018   3       信息系统        67
95018   4       操作系统        78
95019   1       数据库  77
95019   2       数学    90
95019   3       信息系统        91
95019   4       操作系统        67
95019   5       数据结构        87
95020   1       数据库  66
95020   2       数学    99
95020   5       数据结构        93
95021   2       数学    93
95021   5       数据结构        91
95021   6       数据处理        99
95022   3       信息系统        69
95022   4       操作系统        93
95022   5       数据结构        82
95022   6       数据处理        100

select s.name,sc.course,sc.score 
from student s join id_num_course_score sc on s.id=sc.id;
结果:
s.name  sc.course       sc.score
李勇    数据库  81
李勇    数学    85
李勇    信息系统        88
李勇    操作系统        70
刘晨    数学    90
刘晨    信息系统        80
刘晨    操作系统        71
刘晨    数据结构        60
王敏    数据库  82
王敏    信息系统        90
王敏    数据结构        100
张立    数据库  80
张立    数学    92
张立    操作系统        91
张立    数据结构        70
刘刚    数据库  70
刘刚    数学    92
刘刚    信息系统        99
刘刚    数据处理        87
孙庆    数据库  72
孙庆    数学    62
孙庆    信息系统        100
孙庆    操作系统        59
孙庆    数据结构        60
孙庆    数据处理        98
易思玲  信息系统        68
易思玲  操作系统        91
易思玲  数据结构        94
易思玲  数据处理        78
李娜    数据库  98
李娜    信息系统        89
李娜    数据处理        91
梦圆圆  数学    81
梦圆圆  操作系统        89
梦圆圆  数据处理        100
孔小涛  数学    98
孔小涛  数据结构        90
孔小涛  数据处理        80
包小柏  数据库  81
包小柏  数学    91
包小柏  信息系统        81
包小柏  操作系统        86
孙花    数据库  81
孙花    信息系统        78
孙花    操作系统        85
孙花    数据处理        98
冯伟    数据库  98
冯伟    数学    58
冯伟    操作系统        88
冯伟    数据结构        93
王小丽  数据库  91
王小丽  数学    100
王小丽  操作系统        98
王君    数据库  91
王君    信息系统        59
王君    操作系统        100
王君    数据处理        95
钱国    数据库  92
钱国    数学    99
钱国    操作系统        82
王风娟  操作系统        82
王风娟  数据结构        100
王风娟  数据处理        58
王一    数据库  95
王一    数学    100
王一    信息系统        67
王一    操作系统        78
邢小丽  数据库  77
邢小丽  数学    90
邢小丽  信息系统        91
邢小丽  操作系统        67
邢小丽  数据结构        87
赵钱    数据库  66
赵钱    数学    99
赵钱    数据结构        93
周二    数学    93
周二    数据结构        91
周二    数据处理        99
郑明    信息系统        69
郑明    操作系统        93
郑明    数据结构        82
郑明    数据处理        100

(3)查询选修2号课程且成绩在90分以上的所有学生。

create table id_num_course_score as 
select sc.id id,sc.num num,c.course course,sc.score score 
from course c join studentcourse sc on c.num=sc.num;

select * from id_num_course_score;
结果:
id_num_course_score.id  id_num_course_score.num id_num_course_score.course      id_num_course_score.score
95001   1       数据库  81
95001   2       数学    85
95001   3       信息系统        88
95001   4       操作系统        70
95002   2       数学    90
95002   3       信息系统        80
95002   4       操作系统        71
95002   5       数据结构        60
95003   1       数据库  82
95003   3       信息系统        90
95003   5       数据结构        100
95004   1       数据库  80
95004   2       数学    92
95004   4       操作系统        91
95004   5       数据结构        70
95005   1       数据库  70
95005   2       数学    92
95005   3       信息系统        99
95005   6       数据处理        87
95006   1       数据库  72
95006   2       数学    62
95006   3       信息系统        100
95006   4       操作系统        59
95006   5       数据结构        60
95006   6       数据处理        98
95007   3       信息系统        68
95007   4       操作系统        91
95007   5       数据结构        94
95007   6       数据处理        78
95008   1       数据库  98
95008   3       信息系统        89
95008   6       数据处理        91
95009   2       数学    81
95009   4       操作系统        89
95009   6       数据处理        100
95010   2       数学    98
95010   5       数据结构        90
95010   6       数据处理        80
95011   1       数据库  81
95011   2       数学    91
95011   3       信息系统        81
95011   4       操作系统        86
95012   1       数据库  81
95012   3       信息系统        78
95012   4       操作系统        85
95012   6       数据处理        98
95013   1       数据库  98
95013   2       数学    58
95013   4       操作系统        88
95013   5       数据结构        93
95014   1       数据库  91
95014   2       数学    100
95014   4       操作系统        98
95015   1       数据库  91
95015   3       信息系统        59
95015   4       操作系统        100
95015   6       数据处理        95
95016   1       数据库  92
95016   2       数学    99
95016   4       操作系统        82
95017   4       操作系统        82
95017   5       数据结构        100
95017   6       数据处理        58
95018   1       数据库  95
95018   2       数学    100
95018   3       信息系统        67
95018   4       操作系统        78
95019   1       数据库  77
95019   2       数学    90
95019   3       信息系统        91
95019   4       操作系统        67
95019   5       数据结构        87
95020   1       数据库  66
95020   2       数学    99
95020   5       数据结构        93
95021   2       数学    93
95021   5       数据结构        91
95021   6       数据处理        99
95022   3       信息系统        69
95022   4       操作系统        93
95022   5       数据结构        82
95022   6       数据处理        100

select a.name ,b.num,b.score 
from student a join id_num_course_score b on a.id=b.id 
where b.num=2 and b.score>90;

结果:
a.name  b.num   b.score
张立    2       92
刘刚    2       92
孔小涛  2       98
包小柏  2       91
王小丽  2       100
钱国    2       99
王一    2       100
赵钱    2       99
周二    2       93
第五题:left,right 和 full outer join

(1)查询所有学生的信息,如果在成绩表中有成绩,则输出成绩表中的课程号

select a.*,sc.num 
from student a left join studentcourse sc on a.id=sc.id;

结果:
a.id    a.name  a.sex   a.age   a.deparment     sc.num
95002   刘晨    女      19      IS      2
95002   刘晨    女      19      IS      3
95002   刘晨    女      19      IS      4
95002   刘晨    女      19      IS      5
95017   王风娟  女      18      IS      4
95017   王风娟  女      18      IS      5
95017   王风娟  女      18      IS      6
95018   王一    女      19      IS      1
95018   王一    女      19      IS      2
95018   王一    女      19      IS      3
95018   王一    女      19      IS      4
95013   冯伟    男      21      CS      1
95013   冯伟    男      21      CS      2
95013   冯伟    男      21      CS      4
95013   冯伟    男      21      CS      5
95014   王小丽  女      19      CS      1
95014   王小丽  女      19      CS      2
95014   王小丽  女      19      CS      4
95019   邢小丽  女      19      IS      1
95019   邢小丽  女      19      IS      2
95019   邢小丽  女      19      IS      3
95019   邢小丽  女      19      IS      4
95019   邢小丽  女      19      IS      5
95020   赵钱    男      21      IS      1
95020   赵钱    男      21      IS      2
95020   赵钱    男      21      IS      5
95003   王敏    女      22      MA      1
95003   王敏    女      22      MA      3
95003   王敏    女      22      MA      5
95004   张立    男      19      IS      1
95004   张立    男      19      IS      2
95004   张立    男      19      IS      4
95004   张立    男      19      IS      5
95012   孙花    女      20      CS      1
95012   孙花    女      20      CS      3
95012   孙花    女      20      CS      4
95012   孙花    女      20      CS      6
95010   孔小涛  男      19      CS      2
95010   孔小涛  男      19      CS      5
95010   孔小涛  男      19      CS      6
95005   刘刚    男      18      MA      1
95005   刘刚    男      18      MA      2
95005   刘刚    男      18      MA      3
95005   刘刚    男      18      MA      6
95006   孙庆    男      23      CS      1
95006   孙庆    男      23      CS      2
95006   孙庆    男      23      CS      3
95006   孙庆    男      23      CS      4
95006   孙庆    男      23      CS      5
95006   孙庆    男      23      CS      6
95007   易思玲  女      19      MA      3
95007   易思玲  女      19      MA      4
95007   易思玲  女      19      MA      5
95007   易思玲  女      19      MA      6
95008   李娜    女      18      CS      1
95008   李娜    女      18      CS      3
95008   李娜    女      18      CS      6
95021   周二    男      17      MA      2
95021   周二    男      17      MA      5
95021   周二    男      17      MA      6
95022   郑明    男      20      MA      3
95022   郑明    男      20      MA      4
95022   郑明    男      20      MA      5
95022   郑明    男      20      MA      6
95001   李勇    男      20      CS      1
95001   李勇    男      20      CS      2
95001   李勇    男      20      CS      3
95001   李勇    男      20      CS      4
95011   包小柏  男      18      MA      1
95011   包小柏  男      18      MA      2
95011   包小柏  男      18      MA      3
95011   包小柏  男      18      MA      4
95009   梦圆圆  女      18      MA      2
95009   梦圆圆  女      18      MA      4
95009   梦圆圆  女      18      MA      6
95015   王君    男      18      MA      1
95015   王君    男      18      MA      3
95015   王君    男      18      MA      4
95015   王君    男      18      MA      6
95016   钱国    男      21      MA      1
95016   钱国    男      21      MA      2
95016   钱国    男      21      MA      4
第六题:left SEMI JOIN  用 left semi join重新实现IN/EXISTS

(1)查询与“刘晨”在同一个系学习的学生

select a.name,a.deparment 
from student a left semi join 
(select deparment from student where name = '刘晨') b 
on a.deparment=b.deparment;

结果:
a.name  a.deparment
刘晨    IS
王风娟  IS
王一    IS
邢小丽  IS
赵钱    IS
张立    IS


你可能感兴趣的:(Hive练习)