[TOC]
# 语法:
```
select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件】
【group by 分组】
【having 筛选条件】
【order by 排序列表】
【limit】
```
# 分类:
## 1.内连接
### inner
语法:
```
select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件;
```
### 特点:
①添加排序、分组、筛选
②inner可以省略
③ 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
④inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
## 2.外连接
### 应用场景:
> 用于查询一个表中有,另一个表没有的记录
```
左外:left【outer】
右外:right【outer】
全外:full【outer】
```
### 特点:
```
1、外连接的查询结果为 主表中的所有记录
如果从表中有和它匹配的,则显示匹配的值
如果从表中没有和它匹配的,则显示null
外连接查询结果=内连接结果+主表中有而从表没有的记录
2、左外连接,left join左边的是主表
右外连接,right join右边的是主表
3、左外和右外交换两个表的顺序,可以实现同样的效果
4、全外连接=内连接的结果+表1中有但表2没有的+表2中有但表1没有的
```
#### 例子:
#### 案例1:查询哪个部门没有员工
#### 左外
```
SELECT d.*,e.employee_id
FROM departments d
LEFT OUTER JOIN employees e
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;
```
#### 右外
```
SELECT d.*,e.employee_id
FROM employees e
RIGHT OUTER JOIN departments d
ON d.`department_id` = e.`department_id`
WHERE e.`employee_id` IS NULL;
SQL92 VS SQL99pk
```
功能:sql99支持的较多
可读性:sql99实现连接条件和筛选条件的分离,可读性较高
## 3.交叉连接
### cross
> 交叉连接 使用99语法标准代表笛卡尔乘积。
```
SELECT b.*,bo.*
FROM beauty b
CROSS JOIN boys bo;
```