SQL中,联结主要分为6种类型:
1.内联结
将两张表的公共的数据显示出来,即显示两张表的交集:
SELECT <list> FROM A INNER JOIN B ON A.key = B.key;
2.左外联结
将两张表中,只存在于左表中而不存在于右表中的数据筛选出来:
SELECT <list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL;
如果不加后面的where子句,会将两张表的共同部分也显示出来。
3.右外联结
将两张表中,只存在于右表中而不存在于左表中的数据筛选出来:
SELECT <list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL;
如果不加后面的where子句,会将两张表的共同部分也显示出来。
4.全联结
将两张表中所有记录都显示出来,即获取两张表的并集。但是MySQL中并不支持全联结操作,需要人为将左外联结和右外联结合并:
SELECT <list> FROM A LEFT JOIN B ON A.key = B.key UNION ALL SELECT <list> FROM A RIGHT JOIN B ON A.key = B.key; 这里union all允许重复数据的存在,如果需要去重则使用union
5.交叉联结
又称笛卡尔积联结,返回左表乘以右表的所有条目:
SELECT <list> FROM A CROSS JOIN B;
6.自联结
对同一张表进行联结操作:
SELECT p1.id, p1.name FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.id = 10;