这是Mysql系列第11篇。

环境:mysql5.7.25,cmd命令中进行演示。

当我们查询的数据来源于多张表的时候,我们需要用到连接查询,连接查询使用率非常高,希望大家都务必掌握。

本文内容

  1. 笛卡尔积
  2. 内连接
  3. 外连接
  4. 左连接
  5. 右连接
  6. 表连接的原理
  7. 使用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伪代码表示如下: