sql的連表方式

2021-08-17 01:36:43 字數 1738 閱讀 7937

連表方式有三大種,分別是外連線(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...