什麼是聯結?
union、intersect等集合運算,它的特徵是以 “行” 為單位進行操作,通俗點說,就是進行這些集合運算,會導致記錄行數的增減,使用union會增加記錄行數,使用 intersect 或 expect 會減少行記錄,集合運算不會導致 “列” 數量的改變。而聯結(join) 操作,就是將其他表中的列新增過來,進行 “列新增”的運算。當需要從多張表中取出不同的列組成一個新的查詢結果時,就需要用的聯結(join)運算了。以下是幾種聯結運算的簡單說明。
1、join 和 inner join是一樣的,為了簡寫省掉 inner 可直接寫為 join, 內聯結,表示以兩個表的交集為主,查出來是兩個表有交集的部分,其餘沒有關聯就不額外顯示出來,如下;
2、left join 左聯結,就是“左聯結”,表1 left join 表2,以左為主,表示以表1為主,關聯上表2的資料,查出來的結果顯示左邊的所有資料,然後右邊顯示的是和左邊有交集部分的資料。如下
3、right join “右聯結”,表1 right join 表2,以右為主,表示以表2為主,關聯查詢表1的資料,查出表2所有資料以及表1和表2有交集的資料,如下:
4、outer join,在MySQL中, 外聯結必須指定主表,需指定左右,也即 left outer join,right outer join,實際上,就是 left join 和 right join,為了方便書寫把outer省略掉了,在Oracle中,支援全外聯結,即 full outer join;
5、下圖可以囊括聯結的所有情況
6、交叉聯結 CROSS JOIN (也就是耳熟能詳的的笛卡爾積),交叉聯結的結果是兩個表中行數的乘積,交叉聯結的結果中包含了內連線,外連線,全連線的所有結果。實際業務中很少會使用交叉聯結,因為交叉聯結的記過沒有實用價值,運算結果函式太多,需要浪費很多運算效能。