mysql外连接怎么理解 mysql 外联

MySQL连接查询 内连接和外连接的区别内连接mysql外连接怎么理解:指连接结果仅包含符合连接条件mysql外连接怎么理解的行mysql外连接怎么理解 , 参与连接的两个表都应该符合连接条件 。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行 。包括左外连接、右外连接和全外连接 。
左外连接:左边表数据行全部保留 , 右边表保留符合连接条件的行 。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行 。
全外连接:左外连接 union 右外连接 。
示例:
数据库版本:Oracle
表TESTA,TESTB,TESTC,各有A, B两列 。
A.内连接
内连接,即最常见的等值连接 , 例:
SELECT *
FROM TESTA,TESTB
WHERE TESTA.A=TESTB.A
结果:
B.外连接
外连接分为左外连接,右外连接和全外连接 。
1.左外连接 left outer join 或者 left join
左外连接就是在等值连接的基础上加上主表中的未匹配数据 , 例:
SELECT *
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
结果:
三个表做左外链接:
SELECT *
FROM TESTA
LEFT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
LEFT OUTER JOIN TESTC
ON TESTA.A=TESTC.A
结果:
2. 右外连接 right outer join 或者 right join
右外连接是在等值连接的基础上加上被连接表的不匹配数据
SELECT *
FROM TESTA
RIGHT OUTER JOIN TESTB
ON TESTA.A=TESTB.A
3.全外连接 full outer join 或者 full join
全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上 。
SELECT *
FROM TESTA
FULL OUTER JOIN TESTB
ON TESTA.A=TESTB.A
结果:
mysql为什么要有左外连接和右外连接?以下均为个人看法,不喜勿喷 。
(1)写法上的区别
现在是两张表,写起来简单,如果是多张表,多种连接,甚至包含子查询,那么如果只存在左连接或者右连接,那么写法上会麻烦很多 。
比如 a left join b on XXX=xxxx
right join c XXX=xxxx
left join d XXX=xxx
where a.xxxx=F.xxxx
等等,甚至更麻烦一些,那么只存在一种连接的话,改写起来就会比较麻烦 。
(2)语句只是工具
习惯上我们一般会找一个主表(起主要作用的表),并从它开始写相应的语句,假设只存在一种连接,那么为了写语句就可能会打乱思维方式 。语句只是工具,当然是怎么方便怎么来,所以二者相应的都存在 。
(3)语言的规范性
我说的是编程语言,只有左没有右,就好像只有前没有后,内部解析的时候可能都是一样的 , 但是外部写作的时候必须是完整的,如果只有做没有右,那么可能就是缺失的 。
mysql数据库的左连接 , 右连接,内链接 。有何区别一般所说的左连接 , 外连接是指左外连接,右外连接 。做个简单的测试你看吧 。
先说左外连接和右外连接:
[TEST1@orcl#16-12月-11] SQLselect * from t1;
ID NAME
---------- --------------------
1 aaa
2 bbb
[TEST1@orcl#16-12月-11] SQLselect * from t2;
IDAGE
---------- ----------
120
330
左外连接:
[TEST1@orcl#16-12月-11] SQLselect * from t1 left join t2 on t1.id=t2.id;
ID NAMEIDAGE
---------- -------------------- ---------- ----------
1 aaa120
2 bbb
右外连接:
[TEST1@orcl#16-12月-11] SQLselect * from t1 right join t2 on t1.id=t2.id;
ID NAMEIDAGE
---------- -------------------- ---------- ----------
1 aaa120
330
从上面的显示你可以看出:左外连接是以左边的表为基准 。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录 。如果没有匹配的id,比如说t1中id为2的t2中就没有 。那边就以null显示 。

推荐阅读