Mysql高手系列 - 第11篇:深入了解连接查询及原理
这是Mysql系列第11篇。
环境:mysql5.7.25,cmd命令中进行演示。
当我们查询的数据来源于多张表的时候,我们需要用到连接查询,连接查询使用率非常高,希望大家都务必掌握。
本文内容
- 笛卡尔积
- 内连接
- 外连接
- 左连接
- 右连接
- 表连接的原理
- 使用java实现连接查询,加深理解
准备数据
2张表:
t_team:组表。
t_employee:员工表,内部有个team_id引用组表的id。
drop table if exists t_team; create table t_team( id int not null AUTO_INCREMENT PRIMARY KEY comment '组id', team_name varchar(32) not null default '' comment '名称' ) comment '组表'; drop table if exists t_employee; create table t_employee( id int not null AUTO_INCREMENT PRIMARY KEY comment '部门id', emp_name varchar(32) not null default '' comment '员工名称', team_id int not null default 0 comment '员工所在组id' ) comment '员工表表'; insert into t_team values (1,'架构组'),(2,'测试组'),(3,'java组'),(4,'前端组'); insert into t_employee values (1,'路人甲Java',1),(2,'张三',2),(3,'李四',3),(4,'王五',0),(5,'赵六',0);
t_team
表4条记录,如下:
mysql> select * from t_team; +----+-----------+ | id | team_name | +----+-----------+ | 1 | 架构组 | | 2 | 测试组 | | 3 | java组 | | 4 | 前端组 | +----+-----------+ 4 rows in set (0.00 sec)
t_employee
表5条记录,如下:
mysql> select * from t_employee; +----+---------------+---------+ | id | emp_name | team_id | +----+---------------+---------+ | 1 | 路人甲Java | 1 | | 2 | 张三 | 2 | | 3 | 李四 | 3 | | 4 | 王五 | 0 | | 5 | 赵六 | 0 | +----+---------------+---------+ 5 rows in set (0.00 sec)
笛卡尔积
介绍连接查询之前,我们需要先了解一下笛卡尔积。
笛卡尔积简单点理解:有两个集合A和B,笛卡尔积表示A集合中的元素和B集合中的元素任意相互关联产生的所有可能的结果。
假如A中有m个元素,B中有n个元素,A、B笛卡尔积产生的结果有m*n个结果,相当于循环遍历两个集合中的元素,任意组合。
java伪代码表示如下: