mysql中各种常见join连表查询实例总结


本文整理自网络,侵删。

本文实例讲述了mysql中各种常见join连表查询。分享给大家供大家参考,具体如下:

通常我们需要连接多个表查询数据,以获取想要的结果。

一、连接可以分为三类:

  (1) 内连接:join,inner join

  (2) 外连接:left join,left outer join,right join,right outer join,union,union all

  (3) 交叉连接:cross join

 

二、准备需要演示的表:

CREATE TABLE `a` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `a_name` varchar(32) DEFAULT '' COMMENT 'a表名称',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `b` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `a_id` int(11) DEFAULT '0' COMMENT 'a表ID',
 `b_name` varchar(32) DEFAULT '' COMMENT 'b表名称',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

a表与b表的数据如图中所示:

三、内连接inner join或join

select * from a inner join b on a.id = b.a_id;
select * from a join b on a.id = b.a_id;
select * from a, b where a.id = b.a_id;

结果如下:

内连接可以理解为,两个表中同时满足某条件的数据记录组合。也就是表A和表B中满足条件a.id = b.a_id的所有记录。

当表A中的一条记录对应表B中的多条记录时,会以重复的方式对应多条表B记录出现在结果集中。

当表B中的一条记录对应表A中的多条记录时,会以重复的方式对应多条表A记录出现在结果集中。

四、外连接left join或right join

  (1) 左外连接

select * from a left join b on a.id = b.a_id;
select * from a left outer join b on a.id = b.a_id;

左外连接,会以左边的表A为主表,返回所有行,即使右表B中没有匹配的行。

如果左边的表A在右表B中找不到一条记录,则返回表A所有记录并且表B相应的字段设为null。

如果左边的表A在右表B中找到多条记录,则以相同表A记录和不同表B记录多条显示在结果集中。

这种情况下,其实是把表A中所有记录都查询出来了,包括不满足条件的记录。

如果我们只想查出表A中满足条件的,或是不满足条件的,该怎么查?

select * from a left join b on a.id = b.a_id where b.a_id is not null;
select * from a left outer join b on a.id = b.a_id where b.a_id is not null;

阅读剩余部分

相关阅读 >>

在navicat中如何设置数据库的操作权限

mysql怎么删除表

mysql中多表不关联查询的实现方法详解

mysql查询优化详解

mysql双向备份的方法介绍(附代码)

mysql怎么删除数据表中的全部数据?

mysql如何添加多行数据?

mysql8.0.21.0社区版安装教程(图文详解)

mysql怎么删除表中的某一字段

mysql索引背后的数据结构及算法原理详解

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...