一张表
sql
select a.name, b.name
from team a, team b
结果
问题:
为什么会出来这样的排列顺序
aa
ba
ca
da
a表的abcd对应b表的4个a。正常来说应该是abcd对应abcd才对
然后我改了下sql:
select a.name,b.name
from team a, team b
where a.name<b.name
就变成了这样的结果,这又是什么原理呢
第一个sql出来的是笛卡尔积,就相当于两个班级人,每个班50人,你不加握手的条件,那么这两个班每个人都需要握手50次,就相当于2500次。如果你加了条件,比如说每个班人按照成绩排名握手,那么每个人只需要握手一次,就是50次。两个班的人就好比两张表的数据,按照成绩握手就好比这两个数据的关系。如果想要把两张表关联查询,就需要找到他们的关系,否则查询出来的结果就是笛卡尔积的结果。你上面用的是内连接,还有左、右、全外等多种连接,每种连接方式的原理也不同。这是关系型数据处理的核心。另外就是汇总和判断。也是核心。
数据库返回的结果一般是顺序无关的,换一句话说,数据库不承诺按照特定顺序返回结果,只承诺返回这么多行数据。
因此它以什么顺序返回取决于数据存储的顺序、查询算法底层的实现。