在做连表查询的时候,可以在联合的字段上面,分别加上索引字段,这样有加快搜索的速度
左右连表查询时条件放在on后面和where后面的执行时机是不一样的
例如
test1表
test2表
执行
SELECT * FROM test1 t1 LEFT JOIN test2 t2
ON t1.no=t2.no AND t2.name='aaa';
结果为
SELECT * FROM test1 t1 LEFT JOIN test2 t2
ON t1.no=t2.no WHERE t2.name='aaa';
从这两个查询的结果集可以看出来,on的条件是优先于where的,第一个查询是首先将t2表满足条件的筛选出来,然后用t1表左连过去,将t1表全部映射到t2上面,第二个查询是,首先t1表和t2进行左连查询后,在将满足的条件筛选出来
扩展一下
SELECT * FROM test1 t1 LEFT JOIN test2 t2
ON t1.no=t2.no AND t1.name='zhou';
这个时候就会发现,首先筛选出t1中name=zhou的信息,然后将整个t1表左连到t2,只不过将zhou的信息优先放在第一条
右连效果同样
SELECT * FROM test1 t1 RIGHT JOIN test2 t2
ON t1.no=t2.no AND t1.name='zhou';
SELECT * FROM test1 t1 RIGHT JOIN test2 t2
ON t1.no=t2.no AND t2.name='bbb';