mysql 连表查询


写在前面

在MySQL中join操作被称为连接,作用是能连接多个表的数据(通过连接条件),从多个表中获取数据合并在一起作为结果集返回给客户端。即使用连接查询一条SQL搞定需求。

  • 多表操作是实际开发时经常遇到的解决问题的方案
  • 多表操作能够在数据库层就实现大量数据的组合或者筛选

在写sql查询的时候,用的最多的就是where条件查询,这种查询也叫内连查询inner join,当然还有外连查询outer join,左外连接,右外连接查询,常用在多对多关系中,那他们区别和联系是什么呢?

用于本文档演示的数据表准备

  • 建表语句
CREATE TABLE `a_table` (
  `a_id` int(11) NOT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_blogs` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8



CREATE TABLE `b_table` (
  `a_id` int(11) NOT NULL,
  `a_blogs` varchar(10) DEFAULT NULL,
  `a_url` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
  • 表测试数据

mysql连表查询测试数据

一、内连接

连接结果仅包含符合连接条件的行组合起来作为结果集,参与连接的两个表都应该符合连接条件使用关键词:INNER JOIN 连接多张表
也就是返回两个表的交集(阴影)部分,如下图所示:

mysql连表查询内连接

内连接查询结果:

  • 从左表中取出每一条记录,去右表中与所有的记录进行匹配;
  • 匹配必须是某个条件是左表中与右表中相同,才会保留结果,否则不保留;

内连接关键字:

inner join on

内连接基本语法:

左表 [inner] join 右表 on 左表.字段 = 右表.字段;

内连接演示:

  • sql语句
select * from a_table a inner join b_table b on a.a_blogs = b.b_blogs;
  • 执行结果

mysql连表查询内连接测试

内连接注意事项:

  • 1、on 表示连接条件;条件字段代表相同的业务含义(即两个表中的某个字段是一样的业务含义)
  • 2、内连接可以没有连接条件,没有on之后的内容,这时候系统会保留所有结果(笛卡尔集)
  • 3、内连接可以使用where 代替 on,通常不用where,因为where没有on效率高

on指匹配到第一条成功的就结束,其他不匹配;若没有,不进行匹配,而where会一直匹配,进行判断

  • 4、通常使用字段别名,表别名在查询数据的时候,不同表有同名字段,这时候需要加上表名才能区分,而若表名太长,使用表别名若不想使用默认的字段名 可以通过[as] 设置字段别名

二、外连接

2.1 左外连接

左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL,如下图所示:

mysql连表查询左外连接

左外连接查询结果:

  • 以第一张表为基表 进行相关查询,取出里面的所有记录,然后每条与另外一张表进行连接,
  • 第一张表的内容不管能不能匹配上条件,最终都会保留;
  • 第二张表能匹配,正确保留,不能匹配其他表的字段都置空null。

左外连接关键字:

LEFT JOIN ON
LEFT OUTER JOIN ON

left join 是 left outer join 的简写,它的全称是左外连接,是外连接中的一种。

左外连接基本语法:

左表 left join 右表 on 左表.字段 = 右表.字段;

左外连接演示:

  • sql语句
select * from a_table a left join b_table b on a.a_blogs = b.b_blogs;
  • 执行结果

mysql连表查询左外连接测试

2.2 右外连接

与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL,如下图所示:

mysql连表查询右外连接

右外连接查询结果:

  • 以第二张表为基表 进行相关查询,取出里面的所有记录,然后每条与另外一张表进行连接,
  • 第二张表的内容不管能不能匹配上条件,最终都会保留;
  • 第一张表能匹配,正确保留,不能匹配其他表的字段都置空null。

右外连接关键字:

RIGHT JOIN ON
RIGHT OUTER JOIN ON

right join 是 right outer join 的简写,它的全称是右外连接,是外连接中的一种。

右外连接基本语法:

左表 RIGHT JOIN 右表 on 左表.字段 = 右表.字段;

右外连接演示:

  • sql语句
select * from a_table a right outer join b_table b  on a.a_blogs = b.b_blogs;
  • 执行结果

mysql连表查询左外连接测试

三、总结

  • 内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。

  • 外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。

  • 左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。

  • 右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。

  • 全外连接:左外连接 union 右外连接,Mysql 中暂不支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰哥的技术杂货铺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值