SQL列,排列,组合,可重组合

表Productss:
±-------±------+
| name | price |
±-------±------+
| 橘子 | 100 |
| 苹果 | 50 |
| 香蕉 | 80 |
±-------±------+

一、可重排列:
select p1.name as name_1,p2.name as name_2 from productss p1,productss p2;
±-------±-------+
| name_1 | name_2 |
±-------±-------+
| 橘子 | 橘子 |
| 苹果 | 橘子 |
| 香蕉 | 橘子 |
| 橘子 | 苹果 |
| 苹果 | 苹果 |
| 香蕉 | 苹果 |
| 橘子 | 香蕉 |
| 苹果 | 香蕉 |
| 香蕉 | 香蕉 |
±-------±-------+
有(苹果,苹果)这种由相同元素构成的对,而且(橘子,苹果)和(苹果,橘子)这种只是调换了元素顺序的对也被当作不同的对了。

二、排列:
select p1.name as name_1,p2.name as name_2 from productss p1,productss p2 where p1.name <> p2.name;
±-------±-------+
| name_1 | name_2 |
±-------±-------+
| 苹果 | 橘子 |
| 香蕉 | 橘子 |
| 橘子 | 苹果 |
| 香蕉 | 苹果 |
| 橘子 | 香蕉 |
| 苹果 | 香蕉 |
±-------±-------+
排除掉由相同元素构成的对,但还存在(橘子,苹果)和(苹果,橘子)这样的对。

三、组合
select p1.name as name_1,p2.name as name_2 from productss p1,productss p2 where p1.name > p2.name;
±-------±-------+
| name_1 | name_2 |
±-------±-------+
| 苹果 | 橘子 |
| 香蕉 | 橘子 |
| 香蕉 | 苹果 |
±-------±-------+
将(橘子,苹果)和(苹果,橘子)这样的对也去掉了。

四、可重组合

select p1.name as name_1,p2.name as name_2 from productss p1,productss p2 where p1.name >= p2.name;
±-------±-------+
| name_1 | name_2 |
±-------±-------+
| 橘子 | 橘子 |
| 苹果 | 橘子 |
| 苹果 | 苹果 |
| 香蕉 | 橘子 |
| 香蕉 | 苹果 |
| 香蕉 | 香蕉 |
±-------±-------+
加上了(苹果,苹果)这种由相同元素构成的对。

SQL 中,可以使用自连接(self-join)和交叉连接(cross-join)等技术来实现排列组合。以下是一些示例: 1. 排列 排列是指从给定的 n 个元素中,取出 m 个元素进行排列,有序排列,且每个元素只能使用一次。排列的总数为n!/(n-m)!。 假设有一个名为`items`的表,其中包含`name`,表示要进行排列的元素。如果要从`items`中选择3个元素进行排列,可以使用以下查询: ``` SELECT a.name, b.name, c.name FROM items a, items b, items c WHERE a.name <> b.name AND a.name <> c.name AND b.name <> c.name; ``` 在这个查询中,我们对`items`表进行了三次自连接,每个连接使用不同的别名(a、b、c)。然后使用`WHERE`子句来过滤掉重复的元素,以确保每个元素只使用一次。 2. 组合 组合是指从给定的 n 个元素中,取出 m 个元素进行组合,无序组合,且每个元素只能使用一次。组合的总数为n!/m!(n-m)!。 假设有一个名为`items`的表,其中包含`name`,表示要进行组合的元素。如果要从`items`中选择3个元素进行组合,可以使用以下查询: ``` SELECT a.name, b.name, c.name FROM items a, items b, items c WHERE a.name < b.name AND b.name < c.name; ``` 在这个查询中,我们对`items`表进行了三次自连接,每个连接使用不同的别名(a、b、c)。然后使用`WHERE`子句来过滤掉重复的元素,以确保每个元素只使用一次并且结果是无序的。 需要注意的是,在实际应用中,排列组合通常需要考虑更多的因素,例如元素可能是重复的,或者需要保证结果是有序的。这些因素将影响查询的编方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值