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
- 1
- 2
- 3
- 4
- 5
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
- 1
- 2
- 3
- 4
- 5
插入数据:
INSERT INTO `a_table` VALUES(1,'赵','销售');
INSERT INTO `a_table` VALUES(2,'钱','技术');
INSERT INTO `a_table` VALUES(3,'孙','人事');
INSERT INTO `a_table` VALUES(4,'李','销售');
- 1
- 2
- 3
- 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,'吴','人事');
- 1
- 2
- 3
- 4
内连接(不写inner时,默认为内连接):
select * from a_table a inner join b_table b on a.a_id = b.b_id;
- 1
结果如下图:
说明:将表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;
- 1
结果如下图:
说明:左表(a_table)的记录将会全部显示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。
右连接:
select * from a_table a right join b_table b on a.a_id = b.b_id;
- 1
结果如下图:
说明:和左连接规则相反。
全外连接(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;
- 1
- 2
- 3
结果如下图:
说明:使用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;
- 1
- 2
- 3
结果如下图:
说明:使用UNION ALL关键字则是将所有的结果合并到一起。左表的记录+右表的记录+相交的记录
原文可参考链接:
https://www.jianshu.com/p/766dec20e28f
- 1