mysql连接查询

身无饥寒,父母未曾亏我;我无长进,我以何待父母;愿你离去时,还有归途,愿你归来时,还有守候;

说明

今天我们要说的内容就主要会围绕下面这张图片来讲

一般左连接

1
SELECT * FROM tablea a LEFT JOIN tableb b ON a.val = b.val

说明:
在内连接的基础上, 还包含左表中所有不符合条件的数据行, 并在其中的右表列补充值为 null, 右表中没有被匹配到列不会出现在结果集当中
对于table1中的每一条记录对应的记录如果在table2中也恰好存在而且刚好只有一条,那么就会在返回的结果中形成一条新的记录。
对于table1中的每一条记录对应的记录如果在table2中也恰好存在而且有N条,那么就会在返回的结果中形成 N条新的记录(数据可能会有重复)。
对于table1中的每一条记录对应的记录如果在table2中不存在,那么就会在返回的结果中形成一条条新的记录,且该记录的右边全部NULL。

一般右连接

1
SELECT * FROM tablea a RIGHT JOIN tableb b ON a.val = b.val

交集

1
SELECT * FROM tablea a INNER JOIN tableb b ON a.val = b.val

说明:
如果两张表不加任何条件的做一个内连接, 结果将是两站表的笛卡尔积
如果关联的时候有条件, 使用关键字 on, 查询的结果是完全复合这个条件的结果, 不会有重复的数据
在内连接的查询条件, 使用where和on 的条件是一样的, 但在外连接中就不能代替

并集

1
SELECT * FROM tablea a FULL OUTER JOIN tableb ON a.val = b.val

差集A-B

1
SELECT * FROM tablea a LEFT JOIN tableb b ON a.val=b.val WHERE b.val IS NULL

差集B-A

1
SELECT * FROM tablea a RIGHT JOIN tableb b ON a.val=b.val WHERE a.val IS NULL

去掉两集合的公共元素

1
SELECT * FROM tablea a FULL OUTER JOIN tableb b ON a.val=b.val WHERE a.val IS NULL OR b.val IS NULL