mysql多表查询和join区别,mysql join连接多个表

mysql多表查询和join区别,mysql join连接多个表,mysql中各种常见join连表查询实例总结

本文主要介绍了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数据库有所帮助。

mysql多表查询和join区别,mysql join连接多个表