HQL練習_02,經典sql50題
阿新 • • 發佈:2020-02-06
題目
Student(Sid,Sname,Sage,Ssex)學生表
Sid:學號
Sname:學生姓名
Sbirth:學生生日
Ssex:學生性別
01 趙雷 1990-01-01 男
02 錢電 1990-12-21 男
03 孫風 1990-05-20 男
04 李雲 1990-08-06 男
05 周梅 1991-12-01 女
06 吳蘭 1992-03-01 女
07 鄭竹 1989-07-01 女
08 王菊 1990-01-20 女
Course(Cid,Cname,Tid)課程表
Cid:課程編號
Cname:課程名稱
Tid:教師編號
01 語文 02
02 數學 01
03 英語 03
04 hadoop 01
Teacher(Tid,Tname)教師表
Tid:教師編號:
Tname:教師名字
01 張三
02 李四
03 王五
SC(Sid,Cid,score)成績表
Sid:學號
Cid:課程編號
score:成績
01 01 80
01 02 90
01 03 99
02 01 70
02 02 60
02 03 80
03 01 80
03 02 80
03 03 80
04 01 50
04 02 30
04 03 20
05 01 76
05 02 87
06 01 31
06 03 34
07 02 89
07 03 98
07 04 60
建表:
建表: CREATE TABLE IF NOT EXISTS `myhive2.student2` ( sid int,sname string,sbirth string,ssex string ) row format delimited fields terminated by '\t' ; load data local inpath "/zgm/student2.txt" into table myhive2.student2; CREATE TABLE IF NOT EXISTS myhive2.course2 ( cid int,cname string,tid int ) row format delimited fields terminated by '\t' ; load data local inpath "/zgm/course2.txt" into table myhive2.course2; CREATE TABLE IF NOT EXISTS myhive2.teacher2 ( tid int,tname string ) row format delimited fields terminated by '\t' ; load data local inpath "/zgm/teacher2.txt" into table myhive2.teacher2; CREATE TABLE IF NOT EXISTS myhive2.sc2 ( sid int,cid int,score int ) row format delimited fields terminated by '\t' ; load data local inpath "/zgm/sc2.txt" into table myhive2.sc2;
1、查詢"01"課程比"02"課程成績高的學生的資訊及課程分數:
select c.*,a.score as `01課程成績`,b.score as `02課程成績`
from student2 c
join sc2 a on c.sid=a.sid and a.cid=1
left join sc2 b on a.sid=b.sid and b.cid=2
where a.score>b.score or b.sid is null;
2、查詢"01"課程比"02"課程成績低的學生的資訊及課程分數:
select c.*,b.score as `01課程成績`,a.score as `02課程成績`
from student2 c
join sc2 a on c.sid=a.sid and a.cid=2
left join sc2 b on a.sid=b.sid and b.cid=1
where a.score>b.score or b.sid is null;
3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績:
select a.sid,a.sname,avg(b.score) as `平均成績`
from student2 a
join sc2 b on a.sid=b.sid
group by a.sid,a.sname
having `平均成績`>=60;
4、查詢平均成績小於60分的同學的學生編號和學生姓名和平均成績:
(包括有成績的和無成績的)
select a.sid,avg(nvl(b.score,0)) as `平均成績`
from student2 a
left join sc2 b on a.sid=b.sid
group by a.sid,a.sname
having `平均成績`<=60;
結果:
a.sid a.sname 平均成績
4 李雲 33.333333333333336
6 吳蘭 32.5
8 王菊 0.0
-----------------------------------------------------
第二種不符合題目要求
select a.sid,avg(b.score) as `平均成績`
from student2 a
left join sc2 b on a.sid=b.sid
group by a.sid,a.sname
having `平均成績`<=60;
結果:
a.sid a.sname 平均成績
4 李雲 33.333333333333336
6 吳蘭 32.5
5、查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績:
select a.sid,count(b.cid),sum(nvl(score,0))
from student2 a
left join sc2 b on a.sid=b.sid
group by a.sid,a.sname;