本文主要介绍了mysql中各种常见的join连接查询,并结合实例总结分析了MySQL中join连接查询的各种常见用法及相关操作注意事项。有需要的可以参考一下。
本文通过示例描述了mysql中各种常见的连接表查询。分享给你,供你参考,如下:
通常,我们需要连接多个表来查询数据,以获得所需的结果。
一.联系可分为三类:
(1)内部连接:连接,内部连接
(2)外连接:左连接、左外连接、右连接、右外连接、联合、联合所有
(3)交叉连接:交叉连接
其次,准备要演示的桌子:
创建表“a ”(
` id ` int(11)unsigned NOT NULL AUTO _ INCREMENT注释 ID ,
` a _ name ` varchar(32)default comment 一个表名,
主键(` id `)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb 4;
创建表` b `(
` id ` int(11)unsigned NOT NULL AUTO _ INCREMENT注释 ID ,
` a _ id`int (11) default 0 注释一个表id ,
` b _ name ` varchar(32)default comment b表名,
主键(` id `)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb 4;
表A和表B的数据如图所示:
三。内部联接或联接
select * from a . id=b . a _ id上的内部联接b;
select * from a . id=b . a _ id上的联接b;
select * from a,b其中a . id=b . a _ id;
结果如下:
Join可以理解为同时满足一定条件的两个表中的数据记录的组合。即表a和表b中满足条件a.id=b.a_id的所有记录.
当表A中的一条记录对应表B中的多条记录时,表B中对应的记录会以重复的方式出现在结果集中。
当表B中的一条记录对应表A中的多条记录时,表A中的多条记录会以重复的方式出现在结果集中。
四。外部连接左连接或右连接
(1)左侧外部连接
select * from a . id=b . a _ id上的左联接b;
select * from a . id=b . a _ id上的左外联接b;
Left outer join将把左表A作为主表,并返回所有行,即使右表b中没有匹配的行。
如果左边的表A在右边的表B中找不到记录,则返回表A中的所有记录,并将表B中相应的字段设置为null。
如果左表A在右表B中找到多条记录,则结果集中会显示多条表A记录相同而表B记录不同的记录。
在这种情况下,实际上表A中的所有记录都被找出来了,包括不符合条件的记录。
如果我们只想找出表A中哪些符合条件,哪些不符合条件,应该怎么查?
select * from a . id=b.a_id上的左联接b,其中b . a _ id不为空;
select * from a . id=b.a_id上的左外联接b,其中b . a _ id不为null
上述语句的查询符合表a中的条件。
select * from a . id=b.a_id上的左联接b,其中b . a _ id为空;
select * from a . id=b.a_id上的左外联接b,其中b . a _ id为空;
上述语句的查询不符合表a中的条件。
(2)右连接
select * from a . id=b . a _ id上的右联接b;
select * from a . id=b . a _ id上的右外联接b;
其实右连接和左外连接是一样的,只是区别在于主表的确定,两者可以相互转换。
右join的描述和左外连接基本相同,这里不做描述。
(3)全连接全联接
Mysql不支持全联接,但有相应的替代,即left join union right join代替。
select * from a . id=b . a _ id上的左连接b
联盟
select * from a . id=b . a _ id上的右联接b;
Join将返回表A和表B中的所有行。如果表A中的行与表B中的行不匹配,或者表B中的行与表A中的行不匹配,则将显示这些行,并且不存在的字段将用null进行补充。
Union将合并重复的行。
在这种情况下,显示表A和表B中符合条件和不符合条件的记录。
如果您只想显示所有不符合条件的记录,请使用以下语句:
select * from a . id=b.a_id上的左连接b,其中b . a _ id为空
联盟
select * from a.id=b . a _ id上的右联接b,其中a . id为null
如果只想显示符合条件的所有记录,可以使用以下语句:
select * from a . id=b.a_id上的左连接b,其中b . a _ id不为空
联盟
select * from a.id=b . a _ id上的右联接b,其中a . id不为空;
动词(verb的缩写)交叉连接
交集实际上是表A和表b的笛卡尔积。
select * from a cross join b;
从a,b中选择*;
对更多MySQL相关内容感兴趣的读者可以查看我们的专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》和《MySQL数据库锁相关技巧汇总》。
希望这篇文章对大家的MySQL数据库有所帮助。