linq to sql 行转列_SQL优化大神带你写有趣的SQL(6) SELF JOIN的应用

大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子

今天给大家,带来的是 SELF JOIN的应用

下面是,表结构和,INSERT 语句脚本。

create table t0718 (
 idx int,
 no int ,
 val1 varchar(30),
 val2 varchar(10)
 );
 
 insert into t0718 values( 1 ,10 ,'1 2 3' ,'11');
 insert into t0718 values( 2 ,20 ,'4 5 6' ,'12');
 insert into t0718 values( 3 ,30 ,'7 8 9' ,'13');
 insert into t0718 values( 4 ,40 ,'4 8 9' ,'14');
 insert into t0718 values( 5 ,50 ,'1 4 8' ,'15');
 insert into t0718 values( 6 ,55 ,'3 2 9' ,'21');
 insert into t0718 values( 7 ,13 ,'7 0 4' ,'33');
 insert into t0718 values( 8 ,77 ,'1 6 9' ,'45');
 insert into t0718 values( 9 ,22 ,'5 7 8' ,'23');
 insert into t0718 values( 10 ,77 ,'8 0 9' ,'99');

82b996653d53670ab85784de8379aa77.png

在如上的数据中,对val1 进行查询,如果查到了,如输入值为2 ,

那就返回,从下一行开始的三行数据,返回结果如下

6f4189b653231a1c35b53be491ca3bfe.png

类似这种,找出特定的值开始查出几行数据问题,都需要一个连续的不间断的一列,

或者如果没有的话,需要人为的制造出这样的一个列,这里为了简单,

把制作序列的事情去掉了,直接给出,如果不会的话,

可以参照 《SQL优化大神带你写有趣的SQL(5) 自定义变量的应用(1)》文章。

现在开始,进行分析,如果想得到上图的所示的结果

第一,查出满足条件的行,所在的唯一值,如pk,unique key ,这里是idx

第二,拿着idx 查出大于idx 小于 等于idx+3的值,返回结果!

根据上面的思路写SQL

f235f59aa24f75a65d5797253e5fcde3.png

第二步:拿着idx 查出大于idx 小于 等于idx+3的值,返回结果!

这里因为返回的是一个表的内容,所以推荐大家使用半连接

6c138503c7f469ff7ee8ebb19fb0201a.png

上面的SQL 理解起来,比较难!

在这里解释一下,exists 里面t1表的结果集其实就是两个值,1,6

那么每一个t表中idx(idx 值为1到10)比1大且小于等于4或者比6大且小于等于9的数

就是如图所示的内容!

一个SQL 有好几种解决方法,也可以写成如下

61937142da9128982afbc341bbfe9e8c.png

在这两个当中,让我选的话,如果我是初学者 我会选择第一个,因为他可以无视JOIN之后的

结果重复性,具有通用性。但是如果我是中级以上的MySQL DBA我会选第二个,因为我可以

熟练的掌握SQL,根据业务我会保证不会有重复值,因为这样更有利与性能优化,这里涉及

一些执行计划的分析,还有MySQL 特性问题,不再本系列讨论范围。

至于下面的SQL

7d92a91a8bce5adb969198ec89537108.png

虽然看似,也能得出正确的结果,但纯粹是为了得到结果而写的没有通用性,所以只是作为

一个SQL多样性,进行参考,没有讨论必要性。

谢谢大家~ 欢饮转发

我是知数堂SQL 优化班老师~ ^^

如有关于SQL优化方面疑问和一起交流的请加 并且 @兔子@知数堂SQL优化

高性能MySQL,SQL优化群 有叶金荣,吴炳锡 两位大神坐镇 :579036588

欢迎加入 知数堂大家庭。

从这期,开始还准备了,视频,视频地址在今日头条

SQL优化大神带你写有趣的SQL(6) SELF JOIN的应用​www.ixigua.com

往期文章

1.比较有意思的SQL(1)

https://www.toutiao.com/i6707064970636427789/

2.有趣的SQL(2):两个表没连接条件的JOIN

https://www.toutiao.com/i6708876385844199940/

3.有意思的SQL(3) 行转列,列转行和复制

https://www.toutiao.com/i6711483799634444808/

4.有趣的SQL(4) 行转列的复杂应用和优化思想

https://www.toutiao.com/i6712576799496208899/

5.SQL优化大神带你写有趣的SQL(5) 自定义变量的应用(1)

https://www.toutiao.com/i6713758942863819268/

大家关注下 头条号 :SQL开发与优化

就可以看到相关视频

9d98e3b79d68e296a8e625e83b81de68.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值