1. 聚能聊>
  2. 话题详情

SQL诞生43年了!作为常青藤级别的语言,你真的懂它吗?

Stack Overflow(IT技术问答网站)今年开展了一项调查,共有64000名开发者参与。调查显示,SQL是目前第二大编程语言,有50%的开发者(包括Web,桌面,运维,数据等方向)在使用SQL。唯一打败了SQL的,是年龄只有SQL一半的JavaScript。

image

作为常青藤级别的SQL语言,你真的懂它吗?

我们来调查一下,这些SQL知识点你知道多少?

知道的童鞋可以回复其对应的应用场景或案例,有机会获得奖品哦。

1、你会用递归查询

2、窗口查询

3、多维分组查询

4、SQL流式计算

5、全文检索、前后模糊查询、正则查询 如何选择索引

6、JSON、K-V、数组、range 类型的应用

7、行列变换

8、你知道有哪些数据库索引吗

9、你知道空间数据有哪些编码、索引方法吗

10、你知道数据库的异步消息功能吗

PostgreSQL是SQL标准的践行着,从最新的SQL标准到扩展的SQL功能,这些是PostgreSQL的一些《应用场景和最佳实践》,仅供参考:

1 任意维度实时圈人

2 时序数据实时处理

3 时间、空间、业务 多维数据实时透视

4 独立事件相关性分析

5 海量关系实时图式搜索

6 社交业务案例

7 流式数据实时处理案例

8 物联网应用

9 海量全文检索

10 海量模糊、正则查询案例

11 海量数组、图像特征数据 实时检索

12 数据清洗、采样、脱敏、批处理、合并

13 空间数据应用案例

14 金融业务

15 异步消息应用案例

16 海量冷热数据分离

17 倒排索引案例

阿里云提供专业的 PostgreSQLHybridDB (MPP) 数据库服务,包括OSS的整合(冷热数据存储分离),内核优化、向量计算、LLVM、SORT KEY等功能和性能的增强。

云端用户在使用阿里云提供的RDS PG, HDB PG时可以享受到更专业的服务。

PostgreSQL 10增加的一些面向HTAP方向的特性:

并行计算、JIT、向量计算、流计算、时序插件、quorum based sync replication 、sharding agg pushdown。

参与话题

奖品区域 活动规则 已 结束

86个回答

4

三哥的 复制链接去分享

6年程序员经验,7年dba与架构师经验,4年技术总监经验,见过n多新技术新语言,个人感觉唯一没有过时的就是sql,里面只有异步消息没有实际的生产环境经验,其他的都了然于胸( •̥́ ˍ •̀ू )

德哥 回复

赞,可以举一些现实场景的例子么,让更多人可以消化。

大神求带飞 回复

老司机求带飞

阿周 回复

萌新给大佬递茶

雅布2017 回复

都是高人!

lisicong 回复

佩服!

五娘液 回复

求赐教

评论
2

凌云ali 复制链接去分享

◎SqlServer版本的Sql如下:
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:
CREATE TABLE [aaa](
 [id] [int] NULL,
 [pid] [int] NULL,
 [name] nchar
)
GO
INSERT INTO aaa VALUES(1,0,'a')
INSERT INTO aaa VALUES(2,0,'b')
INSERT INTO aaa VALUES(3,1,'c')
INSERT INTO aaa VALUES(4,1,'d')
INSERT INTO aaa VALUES(5,2,'e')
INSERT INTO aaa VALUES(6,3,'f')
INSERT INTO aaa VALUES(7,3,'g')
INSERT INTO aaa VALUES(8,4,'h')
GO
--下面的Sql是查询出1结点的所有子结点
with my1 as(select * from aaa where id = 1
 union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
select * from my1 --结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1
--下面的Sql是查询出8结点的所有父结点
with my1 as(select * from aaa where id = 8
 union all select aaa.* from my1, aaa where my1.pid = aaa.id
)
select * from my1;
 --下面是递归删除1结点和所有子结点的语句:
with my1 as(select * from aaa where id = 1
   union all select aaa.* from my1, aaa where my1.id = aaa.pid
)
delete from aaa where exists (select id from my1 where my1.id = aaa.id) 
◎Oracle版本的Sql如下:
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据请参考SqlServer2005的,Sql如下:
--下面的Sql是查询出1结点的所有子结点
 SELECT * FROM aaa
  START WITH id = 1
CONNECT BY pid = PRIOR id
--下面的Sql是查询出8结点的所有父结点
 SELECT * FROM aaa
  START WITH id = 8
CONNECT BY PRIOR pid = id

*实际应用:
假设有个销售表如下:
CREATE TABLE [tb](

[qj] [int] NULL,    -- 月份,本测试假设从1月份开始,并且数据都是连续的月份,中间没有隔断
[je] [int] NULL,    -- 本月销售实际金额
[rwe] [int] NULL,    -- 本月销售任务额
[fld] [float] NULL    -- 本月金额大于任务额时的返利点,返利额为je*fld

) ON [PRIMARY]
现在要求计算每个月的返利金额,规则如下:
1月份销售金额大于任务额 返利额=金额*返利点
2月份销售金额大于任务额 返利额=(金额-1月份返利额)*返利点
3月份销售金额大于任务额 返利额=(金额-1,2月份返利额)*返利点
以后月份依次类推,销售额小于任务额时,返利为0
具体的Sql如下:
WITH my1 AS (

            SELECT *,
                   CASE 
                        WHEN je > rwe THEN (je * fld)
                        ELSE 0
                   END fle,
                   CAST(0 AS FLOAT) tmp
            FROM   tb
            WHERE  qj = 1
            UNION ALL
            SELECT tb.*,
                   CASE 
                        WHEN tb.je > tb.rwe THEN (tb.je - my1.fle -my1.tmp) 
                             * tb.fld
                        ELSE 0
                   END fle,
                   my1.fle + my1.tmp tmp -- 用于累加前面月份的返利
            FROM   my1,
                   tb
            WHERE  tb.qj = my1.qj + 1
        )

SELECT *
FROM my1

德哥 回复

赞,这是语法层面的用法,可以举一些现实场景的例子么,让更多人可以消化。

无智无得 回复

学习了写得祥细

评论
1

1055600613970044 复制链接去分享

12 数据清洗
在数据仓库项目中大量的ETL工作,主要数据清洗,转换,加载工作,已经批量导入导出,增量处理等

8数据库索引
有唯一索引,主建索引,聚集索引

7行列处理
很多需要行数据转换为列数据应用

德哥 回复

数据库索引还有更多,比如 btree, hash, gin, gist, spgist, rum, brin, bloom, ...应对各种数据结构、数据分布、查询需求。

评论
1

北方的郎 复制链接去分享

想哪说哪吧
递归查询
Oracle:
start with .... connect by... 查一棵树的所有子孙,或者根。
窗口查询
Oracle:
over (partition by XXX)
Oracle分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
行列变换
Oracle
很多方式,我一般用Decode方式

1

星辰之心 复制链接去分享

个人觉得案例的分类不清晰,更像是案例的罗列。

1

1236449675274733 复制链接去分享

设计专业,运营出身的产品,只会查询语言

1

aieii 复制链接去分享

无论学习哪一个都有不同的领域层次,我选择我需要学习和深入的

0

五娘液 复制链接去分享

好多都不知道😖

0

次元聚联盟 复制链接去分享

现在都是要专业哦~!

0

1344915295029005 复制链接去分享

真的不懂

0

星辰之心 复制链接去分享

数据处理和数据分析方面SQL的用法是不一样的。

0

1413001154658861 复制链接去分享

知识点好多,我好像都没有用过

0

1786601112992548 复制链接去分享

不懂

0

1332198891170157 复制链接去分享

不错写的

0

1332198891170157 复制链接去分享

与时共进

0

1633450235888295 复制链接去分享

可以试着探索,但求真理脑洞大开

0

1210501053516108 复制链接去分享

0

沙漠兔 复制链接去分享

优惠口令怎么不能使用

0

1735200346436118 复制链接去分享

完全是个云小白

0

1333801048301677 复制链接去分享

路过

5