SQL中的区别

1.on和where的区别

1)在进行表连接查询时会产生一张中间表(临时表),on是在生成中间表时使用的条件;where是在中间表生成后对中间表进行过滤使用的条件。
例如:
t1

idname
1Rose
2Tom
3Amy

t2

idname
2xiaoming
5xiaohong
select * from t1 left join t2 on t1.id = t2.id and t1.id = 2;
select * from t1 left join t2 on t1.id = t2.id where t1.id = 2;

运行结果:
第一个语句结果

idnameidname
1Rosenullnull
2Tom2xiaoming
3Amynullnull

第二个语句结果

idnameidname
2Tom2xiaoming

2)在进行内连接inner join时,on和where都可以使用;在进行外连接 left/right/full outer join 时,必须使用on,不然会报错。
3)on、where、having的执行顺序:
在多表连接查询时,系统首先根据各个表之间的连接条件(跟在on后面的语句),把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完成后再由having进行过滤。总之,on最先执行,where次之,having最后。
原文链接

2.datediff函数在mySQL和Hive中的区别

datediff函数求两个指定日期的差
1)Hive:datediff(endDate,startDate)

select datediff('2022-08-15','2022-08-16')
-- 运行结果: -1
select datediff('2022-08-17','2022-08-16')
-- 运行结果: 1

2)mySQL:datediff(datepart,startDate,endDate) 不支持Hive
有时候需要求两个指定日期相差的月数,需要设置datepart为m

datepart缩写
yyyy,yy
季度qq,q
mm,m
年中的日dy,y
dd,d
wk,w
星期dw,w
小时hh
分钟mi,n
ss,s
毫秒ms
微秒mcs
纳秒ns
select datediff(''d'','2003-01-01','2003-01-02')
-- 返回的是1;
select datediff(''d'','2003-01-02','2003-01-01')
-- 返回的是-1;

原文链接
原文链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值