- 作为学习笔记存在
二、自链接的使用
针对相同的表进行的连接被称为“自连接”(self join)。
2.1 获取列的组合
products原始数据:
name | price |
---|---|
苹果 | 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 ;
查询出的数据:六种组合
name name 葡萄 苹果 香蕉 苹果 葡萄 橘子 香蕉 橘子 苹果 橘子 香蕉 葡萄 -
想要获取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 ;
查询出的数据:
name name name 香蕉 葡萄 苹果 香蕉 葡萄 橘子 香蕉 苹果 橘子 葡萄 苹果 橘子 补充说明:“>”和“<” 等比较运算符不仅可以用于比较数值大小,也可以用于比较字符串(比如按字典序进行比较)或者日期等。
3.2 查找局部不一致的列
products表原始数据:
name | price |
---|---|
苹果 | 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 ;
查询出的数据:
name price 葡萄 50.0 苹果 50.0 西瓜 80.0 香蕉 80.0 草莓 100.0 橘子 100.0