[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;
```