本文实例讲述了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;

上面的语句查询的,就是表A中满足条件的。

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

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

上面的语句查询的,就是表A中不满足条件的。

(2) 右外连接

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

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

右外连接其实跟左外连接一样,区别在于 主表的确定,两者之间可以相互转换。

右外连接的描述基本与左外连接相同,这里就不过多描述了。

(3) 全连接full join

mysql并不支持全连接,不过有相应的替代方案,就是left join union right join 来代替。

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

union

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

全连接会从表A和表B中返回所有的行,如果表A中的行在表B中没有匹配,或是表B中的行在表A中没有匹配,这些行都会显示,不存在的字段以null补充。

union会把其中重复的行合并。

这种情况下,是把表A和表B中满足条件和不满足条件的记录都显示出来了。

如果只想显示所有不满足条件的记录,则通过如下语句:

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

union

select * from a right join b on a.id = b.a_id where a.id is null;

如果只想显示所有满足条件的记录,则通过如下语句:

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

union

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

五、交叉连接

交叉连接实际上就是表A与表B的笛卡尔乘积。

select * from a cross join b;

select * from a, b;

更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL查询技巧大全》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》

希望本文所述对大家MySQL数据库计有所帮助。

本文标题: mysql中各种常见join连表查询实例总结

本文地址: http://www.cppcns.com/shujuku/mysql/300859.html

连表查询 mysql实例_mysql中各种常见join连表查询实例总结相关推荐

  1. mysql查询动态表名的数据类型_Mysql中查询某个数据库中所有表的字段信息

    前言 有时候,需要在数据库中查询一些字段的具体信息,而这些字段又存在于不同的表中,那么我们如何来查询呢? 在每一个数据库链接的information_schema数据库中,存在这样一张表--COLUM ...

  2. mysql 两张表合并查询_mysql中的分区表和合并表详解(一个常见知识点)

    分区表是mysql5.1之后的新特性,合并表已经存在很长时间了.这篇文章主要介绍这两个概念以及他们基本的操作. 一.合并表 合并表说实话是一种将要被淘汰的技术,但是掌握了合并表的概念再去看分区表就比较 ...

  3. mysql中怎么查询单行单列_MySql中的子查询-结果单行单列

    MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...

  4. web获取多行mysql结果_mysql中的多行查询结果合并成一个

    SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...

  5. mysql 子查询怎么写_MySQL中两种子查询的写法

    MySQL的测试环境 测试表如下 create table test_table2 ( id int auto_increment primary key, pay_id int, pay_time ...

  6. mysql临时表的使用实例_MySQL中临时表的使用示例

    这两天事情稍微有点多,公众号也停止更新了几天,结果有读者催更了,也是,说明还是有人关注,利己及人,挺好. 今天分享的内容是MySQL中的临时表,对于临时表,之前我其实没有过多的研究,只是知道MySQL ...

  7. mysql中写锁定实例_MySQL中的锁

    我学习MySQL是半路出家,刚开始接触的时候,只知道数据库的增删改查和事务,直到有一天数据库突然爆出(1205, 'Lock wait timeout exceeded; try restarting ...

  8. MySQL表如何导入图片_mysql中怎样插入图片

    mysql中插入图片的方法:首先要在数据库中建表:然后装载JDBC驱动,建立连接:最后创建Statement接口类,来执行SQL语句即可. mysql中插入图片的方法: 1.首先,先要在数据库中建表. ...

  9. mysql表date类型长度_mysql中数据类型的长度解释

    11.2. 数值类型 MySQL支持所有标准SQL数值数据类型.这些类型包括严格数值数据类型(INTEGER.SMALLINT.DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT.RE ...

  10. mysql中删除标识列的语句_MySQL中一些常用的数据表操作语句笔记

    0.创建表 CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件]) "完整性约束条件&quo ...

最新文章

  1. 2021年大数据Hive(三):手把手教你如何吃透Hive数据库和表操作(学会秒变数仓大佬)
  2. myeclipse-pro-2014-GA-offline-installer-windows 安装步骤 与安装效果预览
  3. 目前我国家庭计算机用户接入因特网的下述,目前我国家庭计算机用户接入因特网的下述几种方法中,速度最快的是________ 。...
  4. anaconda安装python视频_怎么安装anaconda?
  5. 一文读懂Hive(架构原理,DDL,常用函数,优化技巧)
  6. 舰船目标检测的学习笔记(legacy)
  7. mysql 字符串函数
  8. 开源PaaS Rainbond发布v3.7.2版本,帮助企业快速构建应用市场 1
  9. 二分图中的最大匹配数等于最小点覆盖数的证明
  10. elasticsearch索引模块缓存
  11. softmax 惩罚函数推到过程 转载
  12. 车企进军手机市场,意在智能汽车
  13. 人在囧途之tar命令
  14. [0CTF 2016]piapiapia WP
  15. mt2503 [ShapeEngine]泰语音标字符发生偏移
  16. HBase Flush 解析
  17. Centos7.3开机自动启动或执行指定命令
  18. 27. OP-TEE驱动篇----libteec接口在驱动中的实现
  19. Svelte笔记:必须吹爆的几个理由
  20. 高数笔记(十三):多元函数的极限及连续性,闭区域上多元连续函数的性质,偏导数,全微分

热门文章

  1. nod32 update and id
  2. DOTFUN XML Silverlight中文留言簿Beta V1.0 即将上线!
  3. 阿里云服务器安装宝塔面板和配置安全组
  4. wordpress导入数据错误MySQL返回:#1273 – Unknown collation:’utf8mb4_unicode_ci’
  5. win10的文件夹(文件资源管理器)卡住了
  6. 南阳oj-----一种排序(优先队列法)
  7. sleuth zipkin mysql_springCloud的使用08-----服务链路追踪(sleuth+zipkin)
  8. C语言main函数的参数及其返回值详细解析
  9. d3.js中点可以用图片吗_WebGL 直线直吗?
  10. 计算机万能知识,电脑知识讲解ppt课件.ppt