sql 基础(7)自连接

集合 是SQL能处理的唯一数据结构!

自连接是不亚于 CASE 表达式的重要技术,请一定熟练掌握。最后说一个需要注意的地方,与多表之间进行的普通连接相比,自连接的性能开销更大(特别是与非等值连接结合使用的时候),因此用于自连接的列推荐使用主键或者在相关列上建立索引。

在日常的数据处理过程中自连接似乎用的很少,那是因为缺少对自连接认识,遇到问题,都采用数据库特有的函数或者标量(面向过程)来解决了!

下面是几个问题:

1.水果的组合问题

《sql 基础(7)自连接》 product表

《sql 基础(7)自连接》 查询语句

《sql 基础(7)自连接》 对应查询结果(由左至右)

2.水果价格的排名问题

《sql 基础(7)自连接》 productnew

《sql 基础(7)自连接》 查询语句

《sql 基础(7)自连接》 查询结果

3分地区后的水果价格排序

《sql 基础(7)自连接》 表结构

《sql 基础(7)自连接》 查询语句和结果

–备用代码

— 1_2自连接示例

SELECT a.`name` ,b.`name` FROM  1_2product  as a ,1_2product as b  — 查询所有组合

SELECT  a.`name` ,b.`name` FROM  1_2product  as a ,1_2product as b  WHERE  a.`name` =b.`name` — 查询所有重复组合

SELECT  a.`name` ,b.`name` FROM  1_2product  as a ,1_2product as b  WHERE  a.`name` <>b.`name`– 查询所有不重复组合

SELECT  a.`name` ,b.`name` FROM  1_2product  as a ,1_2product as b  WHERE  a.`name` >b.`name`  — 查询所有不重复列

SELECT a.`name` ,b.`name` FROM  1_2product  as a ,1_2product as b  WHERE  a.`name` >=b.`name` — 查询可重复集合

SELECT  a.`name` ,b.`name` ,c.`name` FROM  1_2product  as a ,1_2product as b ,1_2product as c

WHERE  a.`name` >b.`name`  and  b.`name` >  c.`name`  — 三个产品组合的集合组合

— 删除重复的行 (mysql中没有相应的函数 )

–1查询价格相同的水果

SELECT DISTINCT  a.`name`,a.price FROM 1_2productnew as a  ,1_2productnew as b

WHERE a.`name`<>b.`name`  and a.price =b.price    ORDER BY price 

–2根据价格大小对 水果进行排序 ,分跳过和不跳过

–2_1运用子查询 

SELECT P1.name,P1.price,

      (SELECT COUNT(P2.price) FROM 1_2productnew P2 WHERE P2.price > P1.price) + 1 AS rank_1,

      (SELECT COUNT( DISTINCT P2.price) FROM 1_2productnew P2 WHERE P2.price > P1.price) +1  as rank_2

FROM 1_2productnew P1

ORDER BY rank_1;

–2_2运用自连接

SELECT P1.name,P1.price ,COUNT(P2.price)+1 as rank_1,COUNT(DISTINCT P2.price)+1 as rank_2

FROM    1_2productnew P1  LEFT  join 1_2productnew P2    on  P1.price

    原文作者:洛水青柳2017
    原文地址: https://www.jianshu.com/p/335a52c6db5e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞