mysql经常使用基础操做语法(八)~~多表查询合并结果和内链接查询【命令行模式】...

一、使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2;


注意这个操做必须保证两张表字段相同,字段数据类型也相同。另外,使用union的时候会去除重复(相同)的记录,而union all则不会。

注:下边的几个链接查询涉及到笛卡尔积的概念,即若是存在两张表,第一张记录数为n条,另外一张表的记录数为m条,那么笛卡尔积得出的记录数就是n*m条;若是第一张表的字段数为a个,另外一张的字段数为b个,则笛卡尔积得出的字段数就是a+b个。

二、使用natural join天然链接:前提是两张表有相同的字段:(这个操做会去掉重复的字段)


对于这个查询,个人理解是:保留这两张表中关联字段(例如这里的depart_id)都存在的数据,去掉只有一个表中有的:


如上述内容中,company中有四条数据,而emp中有7条,结果不论哪一个放前边都只出来六条,由于company中depart_id为4的,emp中没有,而emp中depart_id为5的,company中又没有。

三、inner join on等值链接查询:


这个操做在我理解,和上边的天然链接区别就在于没有去掉重复的字段,还有更加的灵活,不须要有相同字段名的字段:


四、inner join on不等值链接查询:


对于这个查询,个人理解就是,他是“=”查询的补集,即这个查询的结果集 = 笛卡尔积结果集  减去“=”查询的结果集;本例中,company有4条记录,emp有7条记录,笛卡尔积是4*7=28条记录;“=”查询的结果是6条记录,一次"!="查询就应该是其他的22条记录。

五、从上边的操做中能够拓展出另外一种查询:字链接查询,即实际只有一张表,用重命名的方式当成两张来用:


能够看到,根据笛卡尔积,这里应该有4*4=16条结果,可是由于有了条件,就筛选出了四条。