一、基本语法
Hive SQL内置运算符:
关系运算符
关系运算符是用于操作关系模型中的表格和元组的操作符。这些操作符允许对表格进行连接、选择、投影、并集、交集和差集等操作,以进行数据查询和处理。
以下是一些常见的关系运算符:
-
选择(Selection):选择运算符用于从关系中选择满足指定条件的元组。通常使用谓词(predicate)来指定条件。例如,SELECT * FROM 表名 WHERE 条件。
-
投影(Projection):投影运算符用于从关系中选择指定的列,生成一个新的关系。它可以用于数据的列裁剪,只保留感兴趣的属性。例如,SELECT 列名 FROM 表名。
-
并(Union):并运算符用于生成两个关系的并集,即包括两个关系中的所有元组,并去除重复的元组。例如,SELECT * FROM 表名1 UNION SELECT * FROM 表名2。
-
差(Difference):差运算符用于从第一个关系中去除在第二个关系中共有的元组,即找到两个关系之间的差异。例如,SELECT * FROM 表名1 EXCEPT SELECT * FROM 表名2。
-
交(Intersection):交运算符用于生成两个关系的交集,即包括同时存在于两个关系中的元组。例如,SELECT * FROM 表名1 INTERSECT SELECT * FROM 表名2。
-
笛卡尔积(Cartesian Product):笛卡尔积运算符用于生成两个关系的笛卡尔积,即将两个关系的元组进行配对组合。例如,SELECT * FROM 表名1, 表名2。
-
连接(Join):连接运算符用于将两个关系中的元组按照给定的连接条件进行关联。常见的连接类型包括内连接、左连接、右连接和全连接。例如,SELECT * FROM 表名1 INNER JOIN 表名2 ON 条件。
这些关系运算符可根据需要组合使用,以实现更复杂的数据查询和处理操作。在关系型数据库中,结构化查询语言(SQL)提供了这些运算符的语法和操作方式。
运算符 | 操作 | 描述 |
A = B | 全部基本类型 | 若是表达式A等于表达式B,结果是TRUE,不然FALSE |
A != B | 全部基本类型 | 若是A不等于表达式B表达返回TRUE,不然FALSE |
A < B | 全部基本类型 | TRUE,若是表达式A小于表达式B,不然FALSE |
A <= B | 全部基本类型 | TRUE,若是表达式A小于或等于表达式B,不然FALSE |
A > B | 全部基本类型 | TRUE,若是表达式A大于表达式B,不然FALSE |
A >= B | 全部基本类型 | TRUE,若是表达式A大于或等于表达式B,不然FALSE |
A IS NULL | 全部类型 | TRUE,若是表达式的计算结果为NULL,不然FALSE |
A IS NOT NULL | 全部类型 | FALSE,若是表达式A的计算结果为NULL,不然TRUE |
A LIKE B | 字符串 | TRUE,若是字符串模式A匹配到B,不然FALSE |
A RLIKE B | 字符串 | NULL,若是A或B为NULL;TRUE,若是A任何子字符串匹配Java正则表达式B;不然FALSE |
A REGEXP B | 字符串 | 等同于RLIKE |
在天算中使用like进行匹配,中文名字加双引号转换成字符串如果知道对方姓而且知道对方名字是几个字时可用"_"代替,例如:"王_";如果知道对方姓,但是不知道对方名字有几个字时可用"%"代替,例如:"王%"。"_"和"%"类似于正则表达式中的符号,可以放在字符串中的任意位置。
算术运算符
算术运算符是用于执行基本的数学运算操作的运算符。它们用于对数字进行加法、减法、乘法和除法等操作。以下是常见的算术运算符:
-
加法运算符(+):用于将两个操作数相加,例如 a + b。
-
减法运算符(-):用于将第一个操作数减去第二个操作数,例如 a - b。
-
乘法运算符(*):用于将两个操作数相乘,例如 a * b。
-
除法运算符(/):用于将第一个操作数除以第二个操作数得到商,例如 a / b。在某些编程语言中,两个整数相除可能产生整数结果,而浮点数相除则会产生浮点数结果。
-
取模运算符(%):也称为取余运算符,用于得到两个整数相除后的余数,例如 a % b。
-
自增运算符(++):用于将操作数的值加1,例如 a++。可以分为前自增和后自增,即 a++ 和 ++a,区别在于自增运算的时机不同。
-
自减运算符(--):用于将操作数的值减1,例如 a–。同样也有前自减和后自减的区别,即 a-- 和 --a。
运算符 操作 描述 A + B 全部数字类型 A加B的结果 A - B 全部数字类型 A减去B的结果 A * B 全部数字类型 A乘以B的结果 A / B 全部数字类型 A除以B的结果 A % B 全部数字类型 A除以B产生的余数 A & B 全部数字类型 A和B的按位与结果 A | B 全部数字类型 A和B的按位与结果 A ^ B 全部数字类型 A和B的按位异或结果 ~A 全部数字类型 A按位非的结果
逻辑运算符
逻辑运算符用于对逻辑表达式进行操作,判断条件的真假以及对多个条件进行逻辑连接。常见的逻辑运算符包括以下几种:
-
与运算符(&& 或 and):用于判断多个条件同时为真时,整个表达式的结果为真。例如,a && b 或 a and b。
-
或运算符(|| 或 or):用于判断多个条件中至少有一个为真时,整个表达式的结果为真。例如,a || b 或 a or b。
-
非运算符(! 或 not):用于对条件的结果取非,即如果条件为真,则结果为假;如果条件为假,则结果为真。例如,!a 或 not a。
这些逻辑运算符可以用于组合多个条件,构建复杂的逻辑表达式来进行条件判断和逻辑控制。在编程中,逻辑运算符常常与条件语句(如 if 语句)和循环语句(如 while 语句)结合使用,以实现不同的逻辑判断和流程控制。
运算符 | 操作 | 描述 |
A AND B | boolean | TRUE,若是A和B都是TRUE,不然FALSE |
A && B | boolean | 相似于A AND B |
A OR B | boolean | TRUE,若是A或B或二者都是TRUE,不然是FALSE |
A || B | boolean | 相似于A OR B |
NOT A | boolean | TRUE,若是A是FALSE,不然FALSE |
!A | boolean | 相似于NOT A |
复杂算子
复杂算子通常是指在编程领域中使用的一些复杂的运算符或函数,它们提供了更高级的功能和灵活性,用于解决特定的问题或实现特定的操作。以下是一些常见的复杂算子:
-
条件运算符(三元运算符):条件运算符用于根据条件的真假选择不同的结果。它的语法是:条件 ? 结果1 : 结果2。例如,condition ? trueValue : falseValue。
-
位运算符:位运算符用于对二进制数据的位进行操作。常见的位运算符包括按位与(&)、按位或(|)、按位异或(^)、左移(<<)、右移(>>)等。
-
字符串连接运算符:字符串连接运算符用于将多个字符串连接成一个字符串。在不同的编程语言中,字符串连接运算符的语法可能有所不同,如 “+” 或 “.”。
-
求余运算符(%):求余运算符用于计算两个数相除后的余数。它通常用于判断一个数是否为偶数或奇数。
-
赋值运算符(+=、-=、*=、/= 等):赋值运算符用于将右侧的值赋给左侧的变量,并同时进行一定的运算操作。例如,a += 5 相当于 a = a + 5。
-
指针运算符(*、&):指针运算符用于在指针类型的数据中进行操作。例如,*p 表示取出指针 p 所指向的值,&a 表示取变量 a 的地址。
-
函数调用运算符:函数调用运算符用于调用函数执行特定的操作。它的语法通常是函数名后跟一对圆括号,括号中可以传递函数所需的参数。
这些复杂算子提供了更灵活和高级的功能,使得程序可以进行更复杂的操作和逻辑判断。在编程中合理地运用这些算子,可以提高代码的可读性、简洁性和效率性。
运算符 | 操作 | 描述 |
A[n] | A是一个数组,n是一个int | 它返回数组A的第n个元素,第一个元素的索引0。 |
M[key] | M是一个Map<K,V>并key的类型为K | 它返回对应于映射中关键字的值 |
S.x | S是一个结构 | 它返回S的s字段 |
二、基本查询
1.全表查询和特定列查询
select * from emp
select empno,ename from emp
2.列别名(重命名一个列)
select ename AS name,deptno dn from emp
3.筛选指定字段:select 字段名 from 表名
4.DISTINCT去重:select distinct 列名 from 表名
select distinct * from @column_b
select distinct column_a<'本人号码'>,column_c<'对端号码'> from @column_b
针对字段进行重命名(两种方法)
select column_a<'本人号码'>,brhm,column_c<'对端号码'> as ddhm from @column_b
5.注意事项:
(一)SQL语言对大小写不敏感
(二)SQL可以写在一行或多行
SELECT
*
FROM
@column_b
(三)关键字不能被缩写也不能分行
(四)各子句一般要分行写
(五)使用缩进提高语句的可读性
三、where条件语句
使用where子句,过滤出满足条件的行数据,where子句紧随from子句
1.比较运算符
>、=、<、!=、between...and、in(1,2)、is null
2.like和rlike(语法:A LIKE B)
like全部匹配,可以结合%(代表匹配任意个数字符)、_(代表匹配任意一个字符)
select * from emp where name LIKE "王"
3.逻辑运算符(And/Or/Not)
需要多个条件的时候
select * from emp where sal>1000 or deptno=30
4.条件语句
(1)NVL NVL(string1,replace_with)
给值为NULL的数据赋值,如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL,则返回NULL。
nvl(column_a<'银行卡号'>,'无效')
(2)CASE条件赋值
select a1,(CASE
WHEN condition1 THEN result1
WHEN conditionN THEN resultN
ELSE result_else END) as a2 from tab_name
四、Group by聚合统计
GROUP BY语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作
count()、sum()、max()、min()、avg() 先字段分组后,再对字段进行统计
select name,sum(number) from test1 group by name
结合having语句,进行分组统计后的条件判断
区别:where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据
例:求部门平均薪水大于2000的部门
select deptno,avg(sal) avg_sal from emp group by deptno having
五、order by全局排序
1.ASC(ascend):升序(默认)
2.DESC(descend):降序
3.注:天算的order by必须结合limit使用,注意排序字段的格式问题
例:limit限定排序条数
select * from emp order by sal desc limit 100
六、join on多表关联
1.多表关联包含:内连接、左连接、右连接、全连接
内连接:只返回两个标准连接字段关联条件相等的行,取两表的交集
select e.empno, e.ename, d.deotno, d.dname from emp e join dept d on e.deptno = d.deptno
七、窗口函数
1.窗口函数(windowing functions)基本语法
xxx() over(PARTITION by yyy ORDER by zzz)
xxx为函数名,如:
聚合函数(SUM、AVG、MAX、MIN、COUNT)
分析函数(RANK、DENSE_RANK、ROW_NUMBER)
取值函数(lag、lead、first_value、last_value)
OVER()括号中的内容这窗口的内容
PARTITION by后的为分组的字段,划分的范围被称为窗口
ORDER by后决定着窗口范围内数据的排序方式