文章目录
1. 关系运算符
每个关系运算符都返回 boolean 类型结果:
注意:判断字段值是否为
null
,不能用=
或者!=
,只能用col is null
或col is not null
1.1 is not null
--is null空值判断
select 1 from dual where 'itcast' is null; -- 返回0条数据
--is not null 非空值判断
select 1 from dual where 'itcast' is not null; -- 返回一条数据,且数值为1
1.2 like
like比较: _
表示任意单个字符, %
表示任意数量字符。
select 1 from dual where 'itcast' like 'it_'; -- 返回0条数据1
select 1 from dual where 'itcast' like 'it%'; -- 返回一条数据,且数值为
-- not...like 中的not 可以放在like前;也可以放在where后。下面两条语句等价:
select 1 from dual where 'itcast' not like 'hadoo_';
select 1 from dual where not 'itcast' like 'hadoo_';
1.3 rlike / regexp
rlike / regexp:确定字符串是否匹配正则表达式。
select 1 from dual where 'itcast' rlike '^i.*t$'; --- 返回1条数据,且值为1
select 1 from dual where '123456' rlike '^\\d+$'; --判断是否全为数字.返回1条数据,且值为1
select 1 from dual where '123456aa' rlike '^\\d+$'; -- 返回0条数据
-- 可以把rlike关键字换成regexp,效果是一样的。
select 1 from dual where 'itcast' regexp '^i.*t$';
2. 算术运算符
每个算术运算符都返回 数:
-
直接在字段后进行四则运算:
select 1+1 from table1; -- 返回1条数据,且值为 2 select 1+1; -- hive3.0之后可以不写 from 表名
-
直接在字段前面加上 负号 ,可以将数变为相反数:
接下来重点介绍右边的。
2.1 div 和 %
div:取计算结果的整数部分,其实就是向下取整
%:取计算结果的余数
select 17 div 3; -- 返回一条数据,且值为 5
select 17 % 3; -- 返回一条数据,且值为 2
2.2 ~、& 、 | 、^
~:某数按位取反
&:两数进行 ’与‘ 逻辑操作
| :两数进行 ’或‘ 逻辑操作
^:两数进行 ’异或‘ 逻辑操作
--4转换二进制:0100 6转换二进制:0110
select 6 from dual; -- 返回一条数据
select 6 & 4 from dual; -- 返回一条数据,且值为 4
select 6 | 4 from dual; -- 返回一条数据,且值为 6
select 6 ^ 4 from dual; -- 返回一条数据,且值为 2
3. 逻辑运算符
select 1 from dual where 3 > 1 and 2 > 1; -- 返回一条数据,且值为1
select 1 from dual where 3 > 1 or 2 != 2; -- 返回一条数据,且值为1
select 1 from dual where not 2 > 1; -- 返回0条数据
select 1 from dual where ! 2=1; -- 返回一条数据,且值为1
-- 在不在
select 1 from dual where 11 in(11,22,33); -- 返回一条数据,且值为1
select 1 from dual where 11 not in(22,33,44); -- 返回一条数据,且值为1
-- 存不存在:[NOT] EXISTS (subquery)
select A.* from A
where exists (select B.id from B where A.id = B.id);
4. 和java一样,括号内的先运算
5. case … end
-
语法:
case when colName布尔表达式 then 值 when colName布尔表达式 then 值 .... else 值 end as colName_rename
-
功能:
- 等于 if-else if-else
- 等价实现or的功能:用到or时经常伴随着要用很多括号,导致看的很不方便,此时可以用 case…end 等价替换,去掉括号
-
细节:如果有多个
when..then...
,如果一条记录满足第一个case when就不会再去执行后面的case when。和java的if-else if-else一样,当做java使用就可以了