Mysql 内部自联接的表示顺序

Mysql 内部自联接的表示顺序,mysql,sql,join,self-join,Mysql,Sql,Join,Self Join,如果我有如下表格: +------+-------+ | sno | cno | +------+-------+ | 1 | CS112 | | 1 | CS113 | | 1 | CS114 | | 2 | CS112 | | 3 | CS112 | | 3 | CS114 | | 4 | CS112 | | 4 | CS113 | | 5 | CS113 | | 6 | CS

如果我有如下表格:

+------+-------+   
| sno  | cno   |  
+------+-------+  
|    1 | CS112 |  
|    1 | CS113 |  
|    1 | CS114 |  
|    2 | CS112 |  
|    3 | CS112 |  
|    3 | CS114 |  
|    4 | CS112 |  
|    4 | CS113 |  
|    5 | CS113 |  
|    6 | CS113 |  
|    6 | CS114 |  
+------+-------+  
如果我在
sno
上执行内部自联接,我希望看到以下顺序的行:

+------+-------+------+-------+  
| sno  | cno   | sno  | cno   |  
+------+-------+------+-------+  
|    1 | CS112 |    1 | CS112 |  
|    1 | CS112 |    1 | CS113 |  
|    1 | CS112 |    1 | CS114 |  
|    1 | CS113 |    1 | CS112 |  
|    1 | CS113 |    1 | CS113 |  
|    1 | CS113 |    1 | CS114 |  
etc
+------+-------+------+-------+    
但命令是

+------+-------+------+-------+  
| sno  | cno   | sno  | cno   |  
+------+-------+------+-------+  
|    1 | CS112 |    1 | CS112 |   
|    1 | CS113 |    1 | CS112 |  
|    1 | CS114 |    1 | CS112 |  
|    1 | CS112 |    1 | CS113 |  
|    1 | CS113 |    1 | CS113 |  
|    1 | CS114 |    1 | CS113 |  
|    1 | CS112 |    1 | CS114 |  
etc
+------+-------+------+-------+    
也就是说,我希望看到左侧的每一排都会在骑乘设施的每一排重复出现。情况正好相反。即,它似乎将所有行与联接右侧的第一行相匹配。

为什么订单是这样的

除非使用
orderby
子句(或者在MySQL中使用
groupby
子句),否则您不应该期望查询结果的顺序

不幸的是,我在MySQL文档中没有找到明确说明这一点的参考。最接近的是这句话:

在前面的示例中,您可能已经注意到结果行 不按特定顺序显示。它通常更容易检查 以某种有意义的方式对行进行排序时的查询输出。分类 因此,请使用ORDERBY子句


不过,ANSI标准确实规定,查询结果(和表)是无序的,除非指定了
order by
子句。

将表视为记录集。我之所以说“集”,是因为在SQL的远亲中,它通常是一个有效的词,叫做。当然,集合中没有顺序

添加一个
order by
子句后,将按指定的顺序获得结果:

select t1.sno, t1.cno, t2.sno, t2.cno from t t1
join t t2 on t1.sno = t2.sno
order by t1.sno, t2.sno, t1.cno, t2.cno

我理解你的意思,但从概念上讲,我想到的是对左边表格的线性扫描和对右边表格的平行扫描。它似乎是反其道而行之。我想知道为什么。@Cratylus。SQL在很大程度上是一种描述性语言。也就是说,is指定了所需的结果,而不是如何获得它们。SQL引擎是一个返回这些结果的黑盒。在本例中,引擎决定翻转连接的两侧,相对于您预期的方向。要理解这一点和其他优化技术,您需要研究特定数据库的细节。这是我的想法还是大多数教科书都暗示了我所期望的“排序”?@Cratylus。我不能为其他作家说话。我所写的关于SQL的所有内容都强调表和查询会生成无序的结果集。理解算法和查询结果很容易混淆。不幸的是,您不会在SQL入门教材中学习哈希连接、合并连接、并行哈希连接和其他连接技术(MySQL中不一定会用到这些)。