身无饥寒,父母未曾亏我;我无长进,我以何待父母;愿你离去时,还有归途,愿你归来时,还有守候;
说明
今天我们要说的内容就主要会围绕下面这张图片来讲
一般左连接
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
|