SQL进阶:二、自链接的使用

  • 作为学习笔记存在

二、自链接的使用

针对相同的表进行的连接被称为“自连接”(self join)。

2.1 获取列的组合

products原始数据:

nameprice
苹果50.0
橘子100.0
香蕉80.0
葡萄50.0
  • 获取name商品名称的组合有几种。(A,A) 不算、(A,B)和(B,A)是一种

    SELECT
    	p.name ,
    	p2.name
    FROM
    	products p ,
    	products p2
    WHERE
    	p.name > p2.name ;
    
    

    查询出的数据:六种组合

    namename
    葡萄苹果
    香蕉苹果
    葡萄橘子
    香蕉橘子
    苹果橘子
    香蕉葡萄
  • 想要获取3个以上元素的组合时,像下面这样简单的扩展一下就可以了。

    SELECT
    	p.name ,
    	p2.name,
    	p3.name
    FROM
    	products p ,
    	products p2,
    	products p3
    WHERE
    	p.name > p2.name
    	AND p2.name > p3.name ;
    

    查询出的数据:

    namenamename
    香蕉葡萄苹果
    香蕉葡萄橘子
    香蕉苹果橘子
    葡萄苹果橘子

    补充说明:“>”和“<” 等比较运算符不仅可以用于比较数值大小,也可以用于比较字符串(比如按字典序进行比较)或者日期等。

3.2 查找局部不一致的列

products表原始数据:

nameprice
苹果50.0
橘子100.0
香蕉80.0
葡萄50.0
西瓜80.0
柠檬30.0
草莓100.0
草莓100.0
  • 从商品表里找出价格相同的商品的组合,并按照价格正序排序。

    -- 方法一
    SELECT
    	DISTINCT p1.name ,
    	p1.price
    FROM
    	products p1 ,
    	products p2
    WHERE
    	p1.price = p2.price
    	AND p1.name <> p2.name
    ORDER BY
    	p1.price ASC ;
    	
    	
    -- 方法二
    SELECT
     	DISTINCT  p1.name ,
    	p1.price
    FROM
    	products p1
    WHERE
    	EXISTS 
    (
    	SELECT
    		p2.price
    	FROM
    		products p2
    	WHERE
    		p1.price = p2.price AND p1.name <> p2.name ) ORDER BY p1.price ASC ;
    
    

    查询出的数据:

    nameprice
    葡萄50.0
    苹果50.0
    西瓜80.0
    香蕉80.0
    草莓100.0
    橘子100.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杳杳明明

您的鼓励就是我的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值