連表方式有三大種,分別是外連線(outer join)、內連線(inner join)和交叉連線(cross join),其中外連線又包括三種,分別是左外連線、右外連線、全外連線。
表的資料如下:
表a(tablea)
idname
表b(tableb)
idjob
parent_id1張三
1學生12
李四2經理2
3王五3工程師
4注意:tablea.id同tableb.parent_id存在關係
一、左、右外連線
左、右外連線都會以一種表為基表(左連線以連線的左表為基表,右連線以連線的右表為基表),另外乙個表的外表,其中基表的所有行、列都會顯示,外表如果和條件不匹配則所有的外表列值都為null。sql關鍵字left/rightouter join,通常我們省略outer寫成left/rightjoin
例子:左連線:select* from tablea a left join tableb b on a.id=b.parent_id;
結果是:
idname
idjob
parent_id1張三
1學生12
李四2經理2
3王五右連線:select* from tablea a right join tableb b on a.id=b.parent_id;
結果是:
idname
idjob
parent_id1張三
1學生12
李四2經理2
3工程師
4二、全外連線
全外連線中所有表的行、列都會顯示,條件不匹配的值皆為null。sql關鍵字full outer join,通常我們省略outer寫成full join
例子:selecta.*,b.* from tablea a full join tableb bon a.id=b.parent_id ;
結果是:
idname
idjob
parent_id1張三
1學生12
李四2經理2
3工程師43
王五三、內連線
內連線是用比較運算子比較要連線的列的值的連線,不匹配的行不會被顯示。sql關鍵字join 或者innerjoin,通常我們寫成join
例子:select a.*,b.* from tablea a jointableb b on a.id=b.parent_id ;
結果是:
idname
idjob
parent_id
張三學生
李四經理
四、交叉連線
沒有where條件的交叉連線將產生連線表所涉及的笛卡爾積。即tablea的行數*tableb的行數的結果集。(tablea 3行*tableb 3行=9行)
例子:select * from tablea cross join tableb
結果是:
idname
idjob
parent_id1張三
1學生12
李四1學生1
3王五1學生
11張三2
經理22李四
2經理23
王五2經理2
1張三3工程師42
李四3工程師43王五
3工程師
4
SQL連表查詢
感覺好笨,老大寫過想了一會才想明白。因為資料都是在兩個表中的兩個表中,所以是四個表。應該先把乙個表中的兩個表篩選出來,然後再用union.sql union 操作符 union 操作符用於合併兩個或多個 select 語句的結果集。請注意,union 內部的 select 語句必須擁有相同數量的列。...
sql連表查詢
1.join和union區別 join 是兩張表做交連後裡面條件相同的部分記錄產生乙個記錄集,交集 union是產生的兩個記錄集 欄位要一樣的 並在一起,成為乙個新的記錄集。並集 join用於按照on條件聯接兩個表,主要有四種 inner join 內部聯接兩個表中的記錄,僅當至少有乙個同屬於兩表的...
SQL 連表更新
現在資料如下 需求如下 要求 更新 earnings 表中的earnings欄位 當 table 2 kpi 大於等於1時 earinings kpi 2000,否則等於 kpi 1500 1 update earnings 2set earnings 3 select 4case when tab...