MySQL筆記——連接查詢

一、含義
當查詢中涉及到了多個表的字段,需要使用多表連接
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 別名;

特點:
類似於笛卡爾乘積

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章