赞
踩
1、存储位置:Hive在Hadoop上;Mysql将数据存储在设备或本地系统中;
2、数据更新:Hive不支持数据的改写和添加,是在加载的时候就已经确定好了;数据库可以CRUD;
3、索引:Hive无索引,每次扫描所有数据,底层是MR,并行计算,适用于大数据量;MySQL有索引,适合在线查询数据;
4、执行:Hive底层是MapReduce;MySQL底层是执行引擎;
5、可扩展性:Hive:大数据量;MySQL:相对就很少了。
SQL执行顺序:
from -> where -> group by -> having -> select -> order by -> limit
内容
SQL
Hive
非等值连接
支持
不支持
支持
不支持
insert和update
支持
不支持,仅支持覆盖重写整个表
IS [NOT] NULL
null代表空值
String类型的字段若是空(empty)字符串, 即长度为0, 那么对它进行IS NULL的判断结果是False
数组拆分
LATERAL VIEW explode(数组类型字段) newTable AS newzd
数组包含
find_in_set(value,Array)
array_contains(Array, value)
分号
语句结束标识
需要对分号进行转义表示
不等于
!=或者<>
不能使用!=,只能使用<>
group by别名问题
select中新命名的别名可以直接在group by 中使用
不能直接使用别名,只能使用原内容或者再嵌套一层
更多相关细节:
https://zhuanlan.zhihu.com/p/322399014
https://www.cnblogs.com/yxzfscg/p/4892124.html
学生成绩表Grade
id
name
subject
grade
001
张三
语文
81
001
张三
数学
75
002
李四
语文
76
002
李四
数学
90
003
王五
语文
81
003
王五
数学
100
学生班级表Class
name
class
张三
一班
李四
二班
王五
二班
题目一:用一条SQL 语句查询出每门课都大于80分的学生姓名
法一:
select name
from Grade
group by name
having min(grade) > 80
法二:
select distinct name
from Grade
where name not in (select distinct name
from Grade
where grade <= 80)
题目二:用一条SQL语句查询出每个班语文成绩排名第一的学生班级以及姓名
法一:
select class,name
from
(select Grade.name,class,grade,
dense_rank() over(partition by class order by Grade.grade desc) as ranking
from Grade,Class
where Grade.name = Class.name and subject = "语文"
)
where ranking = 1
法二:
select class,name
from
(select class,max(grade) as grade
from Grade,Class
where Grade.name = Class.name and subject = "语文"
group by class
) a
join
(select class,name,grade
from
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。