mysql-关联查询

关联查询:数据查询是Mysql数据库管理最重要的一个功能,关联查询是关系型数据库最主要的查询。包括内连接([inner] join … on),外连接(left/right [outer] join … on),全外连接,通过关联查询可实现多个表连接的条件关系查询得到预期结果。
基本定义:
[inner] join … on(内连接或等值连接,不写inner默认为内连接):返回两张表中符合连接条件的字段值,即两张表的数据交集。
left [outer] join … on(左外连接,一般默认不写outer):以左边的表为基表,返回左表的全部记录,右表中符合连接条件的记录,不足的地方为Null。
right [outer] join … on(右外连接,一般默认不写outer):以右边的表为基表,返回右表的全部记录,左表中符合连接条件的记录,不足的地方为Null。
full join(全外连接):oracle支持该种写法,mysql不支持。mysql可通过union关键字实现(左连接 union 右连接)。
说明:
union(合并查询,去重复):使用UNION关键字是将所有查询结果合并到一起,然后去除相同的记录。
union all(合并查询):使用UNION ALL关键字则是将所有的结果合并到一起。
示例解释:
新建两张表:

CREATE TABLE `a_table` (
  `a_id` int(11) DEFAULT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `b_table` (
  `b_id` int(11) DEFAULT NULL,
  `b_name` varchar(10) DEFAULT NULL,
  `b_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

插入数据:

INSERT INTO `a_table` VALUES(1,'赵','销售');
INSERT INTO `a_table` VALUES(2,'钱','技术');
INSERT INTO `a_table` VALUES(3,'孙','人事');
INSERT INTO `a_table` VALUES(4,'李','销售');
INSERT INTO `b_table` VALUES(2,'钱','技术');
INSERT INTO `b_table` VALUES(4,'李','销售');
INSERT INTO `b_table` VALUES(6,'周','技术');
INSERT INTO `b_table` VALUES(8,'吴','人事');

在这里插入图片描述 在这里插入图片描述
内连接(不写inner时,默认为内连接):

select * from a_table a inner join b_table b on a.a_id = b.b_id;

结果如下图:
在这里插入图片描述
说明:将表a_table和表b_table中a.id和b.id相同的行筛选出,求两表的交集
在这里插入图片描述
左连接:

select * from a_table a left join b_table b on a.a_id = b.b_id;

结果如下图:
在这里插入图片描述
说明:左表(a_table)的记录将会全部显示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
在这里插入图片描述
右连接:

select * from a_table a right join b_table b on a.a_id = b.b_id;

结果如下图:
在这里插入图片描述
说明:和左连接规则相反。
在这里插入图片描述
全外连接(union):

select * from a_table a left join  b_table b on a.a_id=b.b_id 
	union 
select * from a_table a right join b_table b on a.a_id = b.b_id;

结果如下图:
在这里插入图片描述
说明:使用UNION关键字是将所有查询结果合并到一起,然后去除相同的记录。左表的记录+右表的记录-相交的记录
全外连接(union all):

select * from a_table a left join  b_table b on a.a_id=b.b_id 
	union all
select * from a_table a right join b_table b on a.a_id = b.b_id;

结果如下图:
在这里插入图片描述
说明:使用UNION ALL关键字则是将所有的结果合并到一起。左表的记录+右表的记录+相交的记录

原文可参考链接:

https://www.jianshu.com/p/766dec20e28f
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值