工作中总会遇到需要查询数据的情况,虽说咱不会写那么复杂漂亮的sql代码,但是基本的一些sql查询语句总该是需要会的吧。
这里总结一些经常用到的sql语句,希望将来自己也能写出一手好看的sql代码。
再推荐一个好用的数据库查询软件:DBeaver。
Dbeaver
DBeaver是一个集成的数据库客户端工具,需要java语言支持,所以安装之前需要配置JDK环境。
DBeaver支持hive、mysql等多种数据库的sql操作。
Sql常用语句
1.建表&删表语句
create table xx(
'id' bigint comment ''
'name' string comment '')
partitioned by ('p_day' date) ##按照p_day字段分区
drop table xx ## 删除表格
truncate table xx ##只删除表格中的数据,不删除表格本身
alter table xx drop index index_name ##删除表格中的索引
2.选择语句
select * from table
where 条件 and 条件
group by a ##按照a分组
order by b desc ##按照b排序 降序
limit 100 ## 选择前100条记录
3.拼接语句
横向拼接:
left join ## 依据左边的表格拼接,右表不匹配时返回null
right join ## 依据右边的表格拼接,左表不匹配时返回null
inner join/join ## 取两表共同的部分
full outer join/full join ## 返回两表所有内容
纵向拼接:
union all ## 合并两表的数据(两表的列需要相等)
union ## 合并两表不重复的数据
4.匹配语句
select * from table where a like 'N%' ##选择table中a字段以N开头的数据
select * from table where a like '%N' ##选择table中a字段以N结尾的数据
select * from table where a like '%N%' ##选择table中a字段包含N的数据
select * from table where a like '[ABC]%' ## 以A或B或C开头的数据
select * from table where a like '[!ABC]%' ##不以A或B或C开头的数据
in ('A', 'B') ## 为A或B的数据
between 'A' and 'B' ##在A和B之间的数据
select * from table where a like '_N' ##第一个字符之后是N的数据
5.SQL函数
标记行号
## 同一个name下的数据按照时间排序 并标记行号
select * from
(select row_number() over(partitioned by name order by created_at) as number) t1
where number = 1
count 统计个数
count(1) / count(*) ## 全部行数
count(distinct(xx)) ## 某列不同值的个数
case条件语句
case when 条件 then a else b end
拼接语句
## 连接一个或者多个字符串
concat('11', '22', '33')
Output: 112233
## 有分隔符的连接
concat_ws(',', collect_set(name))
暂时总结到这里,如果后续有更多内容将会进行更新。