前言
Mysql 的 join 是什么,join 这个单词的意思是退出、加入、连贯,而在数据库中,也是连贯的意思,将两个表连接起来查问出咱们想要的数据。在数据库中,join 的用法次要分成三种,别离是左连贯、右连贯和内连贯,然而理论使用中,两个表之间的操作,是一共有七种,那咱们明天就开始认识一下这七种用法吧
上面所有的椭圆都代表两个不同的表,假设右边为 test1 表,左边的为 test2 表,上面是两个表的状况
test1 表有 uid、名字和地区三个字段
test2 表有 uid、姓名、性别和年龄四个字段
1. 全连贯
如图,将这两张表全连贯查问,假如 A 表有 M 条记录,B 表有 N 条记录,全连贯的时候就是用笛卡尔积来计算的,所以查问进去的是是 M×N 条记录
而 test1 和 test2 两张表全连贯的 sql 语句和查问的后果如下
SELECT * FROM test1 LEFT JOIN test2 ON test1.uid = test2.uid UNION SELECT * FROM test1 RIGHT JOIN test2 ON test1.uid = test2.uid;
查问到两个表所有的数据,如果没有数据就为空
总结:查问到的内容是两个表的所有内容
2. 去交加
如图,将这两张表去交加连贯查问,两个表的全连贯去掉两头的交加的局部就是去交加
而 test1 和 test2 两张表去交加连贯的 sql 语句和后果如下
SELECT * FROM test1 LEFT JOIN test2 ON test1.uid = test2.uid WHERE test2.uid IS NULL
UNION SELECT * FROM test1 RIGHT JOIN test2 ON test1.uid = test2.uid WHERE test1.uid IS NULL
查问进去的信息,去掉了 101~107 的公共局部,查问进去两个表独有的局部——test1 的 108、109,test2 的 100
总结:查问到的内容是两个表的没有公共局部的内容
3. 左连贯
如图,将这两张表进行左连贯查问,依据雷同的局部去加上左表剩下的内容
而 test1 和 test2 两张表去交加连贯的 sql 语句和后果如下
SELECT * FROM test1 LEFT JOIN test2 ON test1.uid = test2.uid;
光看图如同跟只查问左表没什么区别,实际上两个表的公共局部都是一起查问了,右表的数据如果有就查出来,没有就为空。
次要看以哪个表为主,这里为左连贯就以左表为主,左表的数据都查问进去,右表有数据则显示,没有则为空
总结:查问的是两表独特的局部加上左表剩下的局部
4. 右连贯
而 test1 和 test2 两张表去交加连贯的 sql 语句和后果如下
SELECT * FROM test1 RIGHT JOIN test2 ON test1.uid =test2.uid;
跟左连贯相似,光看图如同跟只查问右表没什么区别,实际上两个表的公共局部也是一起查问了,左表的数据如果有就查出来,没有就为空
次要看以哪个表为主,这里为左连贯就以左表为主,左表的数据都查问进去,右表有数据则显示,没有则为空
总结:查问的是两表独特局部加上右表剩下的局部
5. 内连贯
而 test1 和 test2 两张表去交加连贯的 sql 语句和后果如下
SELECT * FROM test1 INNER JOIN test2 ON test1.`uid` = test2.`uid`;
在表中,test1 中的 109 和 108,test2 的 100 没有被查问进去
总结:查问到的内容是两个表共有的局部
6. 左独有
而 test1 和 test2 两张表去交加连贯的 sql 语句和后果如下
SELECT * FROM test1 LEFT JOIN test2 ON test1.uid = test2.uid WHERE test2.uid IS NULL;
这里查问出了 test1 表中独有 108、109 的数据
总结:查问的是左表中右表没有的内容
7. 右独有
而 test1 和 test2 两张表去交加连贯的 sql 语句和后果如下
SELECT * FROM test1 RIGHT JOIN test2 ON test1.uid = test2.uid WHERE test1.uid IS NULL;
这里查问出了 test2 表中独有 100 的数据
总结:查问的是右表中左表没有的内容