作用:连接查询(Join)操作,用于联结多个表以获取更全面和准确的数据
基本分类:
语法(两种语法不同,作用相同):
隐式内连接:select 字段列表 from 表1 , 表2 where 条件 ... ;
显式内连接:select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 ... ;
- -- 内连接 查询员工与部门关联信息
- select employees.name 员工名字, departments.name 部门名称
- from employees
- inner join departments
- on employees.department_id = departments.id

语法:select 字段列表 from 表1 left [ outer] join 表2 on 条件 ... ;
- -- 左外连接 从员工表查询对应部门
- select employees.name, departments.name 部门名称
- from employees
- left join departments
- on employees.department_id = departments.id
- limit 5,6;

语法:select 字段列表 from 表1 right [ outer] join 表2 on 条件 ... ;
- -- 右外连接 从部门表查询对应员工信息
- select employees.name, departments.name 部门名称
- from employees
- right join departments
- on employees.department_id = departments.id
- limit 5,6;

MySQL不支持全连接的关键字(full join),但可以通过左连接和右连接的组合实现全连接
- -- 全连接 查询员工和对应部门的对应关系
- select employees.name, departments.name 部门名称
- from employees
- left join departments
- on employees.department_id = departments.id
-
- union
-
- select employees.name, departments.name 部门名称
- from employees
- right join departments
- on employees.department_id = departments.id
- limit 5,8;

语法:select 字段列表 from 表A 别名A join 表A 别名B on 条件 ... ;
- -- 自连接 查询每个员工和对应的领导名字
- SELECT e1.name AS 员工姓名, e2.name AS 上级领导姓名
- FROM employees e1
- INNER JOIN employees e2
- ON e1.manager_id = e2.id;
也可以实现联合查询:
SELECT 字段列表 FROM 表A 条件 ...
union [ all]
SELECT 字段列表 FROM 表B 条件....;
- -- 查询薪水小于5000 或 年龄大于50的员工
- select * from employees where salary < 5000
- union
- select * from employees where age > 50;
注意点: