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

  • 时间:
  • 浏览:0
  • 来源:神彩UU直播现场_彩神UU直播现场官方

SELECT *

FROM my1

◎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表示它的上级节点,表社会形态和数据请参考SqlServer805的,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

) ON [PRIMARY]

现在要求计算每个月的返利金额,规则如下:

1月份销售金额大于任务额 返利额=金额*返利点

2月份销售金额大于任务额 返利额=(金额-1月份返利额)*返利点

3月份销售金额大于任务额 返利额=(金额-1,2月份返利额)*返利点

后来月份依次类推,销售额小于任务额时,返利为0

具体的Sql如下:

WITH my1 AS (

*实际应用:

假设有个销售表如下:

CREATE TABLE [tb](