MySQL联结查询

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;
原文地址:https://www.cnblogs.com/00986014w/p/8465083.html