Mysql 中的左右连接问题
最近碰到sql左右连接问题,查阅了有关资料,现在做一些总结:
- 笛卡尔积
- 左连接
- 右连接
- 区别
1. 笛卡尔积:在数学中,两个集合X和Y的笛卡儿积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。
设A,B为集合,用A中元素为第一元素,B中元素为第二元素构成有序对,所有这样的有序对组成的集合叫做A与B的笛卡尔积,记作AxB.
笛卡尔积的符号化为:
A×B={(x,y)|x∈A∧y∈B}
例如,A={a,b}, B={0,1,2},则
A×B={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
B×A={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
2. 左连接:上面讲了笛卡尔积,那么左连接和这个有什么关系,就是以左表(A)为主表,右表(B)以on条件来匹配;
SELECT * FROM A LEFT JOIN B ON A.id=B.id;
表A
表B
当运行 SELECT * FROM A LEFT JOIN B ON A.id=B.id 结果如下:
结果是:以左表(A)为基准,显示右表(B)匹配到的信息,对于左表中没有匹配到的,显示为null;
3.右连接:右连接当然就是以右表作为基准表了;
当运行 SELECT * FROM A RIGHT JOIN B ON A.id=B.id 结果如下:
结果显示 :以右表(B)左右基准,B表只有3个记录,A表有4个记录,
A匹配B,以A为基准,所以只显示三条记录
4.区别:根据上面的结果,就能发现左右连接就是关于,以左表或者右表来作为基准,来进行匹配显示的过程;
如果你想以左表来作为基准显示就用左表,反之,亦是如此!根据业务需求来改变!