SQL进阶 1-2 自连接的用法

1.针对相同的表进行连接的技术称为自连接。

2.集合是SQL能处理唯一的数据结构。

3.自连接的性能开销很大(特别是与非等值连接结合使用的时候,用于自连接的列推荐使用主键或者相关列上建立索引)。

select p1.name as name_1, p2.name as name_2 from Products p1, Products p2 

where p1.name >= p2.name



方法一:窗口函数

select district, name, price, rank() over (partition by distinct order by price DESC) as rank_1

from DistrictProducts;

partitition by 具体将表分割成若干个小的子集的作用。因为本题以地区作为分割条件,所以指定distinct列。

方法二:标量子查询

select p1.district, p1.name, p1.price,

                (select count(p2.price) from DistrictProducts p2

                    where p1.district = p2.district  --在同一个地区内进行比较

                            and p2.price > p1.price) + 1 as rank_1

from DistrictProducts p1;

方法三:自连接

select p1.district, p1.name, max(p1.price) as price, count(p2.name)+1 as rank_1

from DistrictProducts p1 left outer join DistrictProducts p2 

on p1.district = p2.district

and p1.price < p2.price

group by p1.district,p1.name

UPDATE DistrictProducts2 P1

SET ranking = (SELECT COUNT(P2.price) + 1

FROM DistrictProducts2 P2

WHERE P1.district = P2.district

AND P2.price > P1.price);

方法一:在update语句的set子句中加入计算位次的逻辑

update DistrictProducts1 p1 set ranking = (select count(p2.price) + 1 from DistrictProducts2 p2

where p1.district = p2.district and p2.price > p1.price ) 

方法二:窗口函数

update DistrictProducts2 set ranking = rank() over(partition by district order by price desc)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 可重排列、排列、组合 此系列为Mick的SQL进阶教程的笔记,有错误的地方欢迎批评指正 这一部分,我们所用的数据库...
    吃土少女欣阅读 7,284评论 0 1
  • 集合是SQL能处理的唯一数据结构! 自连接是不亚于CASE表达式的重要技术,请一定熟练掌握。最后说一个需要注意的地...
    洛水青柳2017阅读 7,178评论 1 1
  • 数据库中的join操作不一定是两个不同的表,同一张表也可以自己连接自己,只是需要起个别名,合理的使用自连接可以完成...
    鸿雁长飞光不度阅读 3,736评论 0 0
  • 作者:码海 由于工作需要,最近做了很多 BI 取数的工作,需要用到一些比较高级的 SQL 技巧,总结了一下工作中用...
    逆风_c69c阅读 1,832评论 0 1
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 12,746评论 28 53

友情链接更多精彩内容