一、含義
當查詢中涉及到了多個表的字段,需要使用多表連接
select 字段1,字段2
from 表1,表2,...;
笛卡爾乘積:當查詢多個表時,沒有添加有效的連接條件,導致多個表所有行實現完全連接
如何解決:添加有效的連接條件
二、分類
按年代分類:
sql92:
等值
非等值
自連接
也支持一部分外連接(用於oracle、sqlserver,mysql不支持)
sql99【推薦使用】
內連接
等值
非等值
自連接
外連接
左外
右外
全外(mysql不支持)
交叉連接
三、SQL92語法
1、等值連接
語法:
select 查詢列表
from 表1 別名,表2 別名
where 表1.key=表2.key
【and 篩選條件】
【group by 分組字段】
【having 分組後的篩選】
【order by 排序字段】
特點:
① 一般爲表起別名
②多表的順序可以調換
③n表連接至少需要n-1個連接條件
④等值連接的結果是多表的交集部分
2、非等值連接
語法:
select 查詢列表
from 表1 別名,表2 別名
where 非等值的連接條件
【and 篩選條件】
【group by 分組字段】
【having 分組後的篩選】
【order by 排序字段】
3、自連接
語法:
select 查詢列表
from 表 別名1,表 別名2
where 等值的連接條件
【and 篩選條件】
【group by 分組字段】
【having 分組後的篩選】
【order by 排序字段】
四、SQL99語法
1、內連接
語法:
select 查詢列表
from 表1 別名
【inner】 join 表2 別名 on 連接條件
where 篩選條件
group by 分組列表
having 分組後的篩選
order by 排序列表
limit 子句;
特點:
①表的順序可以調換
②內連接的結果=多表的交集
③n表連接至少需要n-1個連接條件
分類:
等值連接
非等值連接
自連接
2、外連接
語法:
select 查詢列表
from 表1 別名
left|right|full【outer】 join 表2 別名 on 連接條件
where 篩選條件
group by 分組列表
having 分組後的篩選
order by 排序列表
limit 子句;
特點:
①查詢的結果=主表中所有的行,如果從表和它匹配的將顯示匹配行,如果從表沒有匹配的則顯示null
②left join 左邊的就是主表,right join 右邊的就是主表
full join 兩邊都是主表
③一般用於查詢除了交集部分的剩餘的不匹配的行
3、交叉連接
語法:
select 查詢列表
from 表1 別名
cross join 表2 別名;
特點:
類似於笛卡爾乘積