**sql92语法:**
- 只支持内连接:包括
1)等值连接
2)非等值连接(常用于对区间的判断)
3)自连接
- 查询条件与部分筛选条件都写在where关键字后面,可读性较差
**sql99语法:**
- 支持内连接与外连接,连接条件写在on关键字后,之后的筛选条件可以正常写
<br>
## 3.1内连接
* 案例:查询每个工种、每个部门的部门名、工种名和最低工资(三表连接)
```
select d.department_name,j.job_title,min(salary)
from employees e
join departments d on e.department_id=d.department_id
join jobs j on e.job_id=j.job_id
group by j.job_title,d.department_name
```
* 案例:非等值连接
```
select j.job_level,count(*) 个数
from employees e join job_grade j
on e.salary between j.lowest_sal and j.highest_sal
```
* 案例:选择每个员工的姓名和他的管理者的姓名(自连接)
```
select e1.first_name,e2.first_name
from employees e1 join employees e2
on e1.manager_id=e2.first_name
```
## 3.2外连接(左外,右外,全外(MySql不支持),交叉连接(相当于笛卡尔积))
- 左外连接,已左表为主表,主表的信息都会出现,从表有信息则显示,没有则显示null值
- 右外连接,已右表为主表,主表的信息都会出现,从表有信息则显示,没有则显示null值
> 左外连接,右外连接可以互相转换
* 案例查询部门名为 SAL 或 IT 的员工信息
```
SELECT d.department_name,e.*
FROM departments d LEFT JOIN employees e
on d.department_id=e.department_id
WHERE d.department_name='SAL' or department_name='IT';
```
***********************************************************************************