设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 手机 数据 公司
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2022-03-13 12:52 所属栏目:115 来源:互联网
导读:本文实例讲述了mysql中各种常见join连表查询。分享给大家供大家参考,具体如下: 通常我们需要连接多个表查询数据,以获取想要的结果。 一、连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,right join,right ou
  本文实例讲述了mysql中各种常见join连表查询。分享给大家供大家参考,具体如下:
 
  通常我们需要连接多个表查询数据,以获取想要的结果。
 
  一、连接可以分为三类:
 
    (1) 内连接:join,inner join
 
    (2) 外连接:left join,left outer join,right join,right outer join,union,union all
 
    (3) 交叉连接:cross join
 
   mysql中各种常见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表的数据如图中所示:
 
  mysql中各种常见join连表查询实例总结

  三、外连接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;
  mysql中各种常见join连表查询实例总结
 
  左外连接,会以左边的表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;
  mysql中各种常见join连表查询实例总结
 
  上面的语句查询的,就是表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;
  mysql中各种常见join连表查询实例总结
 
  上面的语句查询的,就是表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;
  mysql中各种常见join连表查询实例总结
 
  右外连接其实跟左外连接一样,区别在于 主表的确定,两者之间可以相互转换。
 
  右外连接的描述基本与左外连接相同,这里就不过多描述了。
 
    (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;
  mysql中各种常见join连表查询实例总结
 
  全连接会从表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的笛卡尔乘积。

(编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读