sql多表查詢學習

2022-02-17 08:30:24 字數 2897 閱讀 8148

我們先建立乙個表 emp(15行):

如果想查詢所有資料,很簡單

select

*from emp;

這樣就能查詢到emp的所有資料

在了解多表查詢之前 我們應該先複習一下數學中笛卡爾積的概念

比如乙個集合有(1,2,3)三個元素 另乙個集合有(4,5,6)三個元素

他們的笛卡爾積 其實有3*3 9種情況 

連線查詢分為 內連線 ,外連線,交叉連線

內連線

內連線分顯式和隱式 關鍵字是inner join 其實這個inner可以不寫

隱式的內連線就是笛卡爾積

這裡 建立乙個dept表(4行)

我們想看到這兩個表所有的東西,所以要求它們的笛卡爾積 也就是隱式的內連線

隱式的內連線用cross join 關鍵字

select

*from emp cross

join dept;

這兩個表就會結合到一起:

很明顯有15*4 = 60種情況

顯式內連線

之前的資料太重疊了 我們實際中不想這樣

這裡先介紹一種等值連線

原理就是先做笛卡爾積 然後再根據條件篩選,條件是:欄位的值要相同,才能篩選 也就是說其實兩個欄位的名字可以不同

等值連線 有乙個自然連線 自然連線就是根據名稱相同的字段進行連線 關鍵字:natural join 

我們注意到 emp和dpt這兩個表有乙個相同字段 :deptno

我們直接做乙個 natural join 

select

*from emp natural join dept;

執行:

此時就是15 行  這個自然連線其實就能幫到我們很多忙了

如果欄位名稱不相同呢:

用這種語法: 

表一 inner

join 表二 on 篩選條件

我們可以這麼寫:

這個重複列 並沒有消去

其實欄位的名稱相同也可以:

表一 inner

join 表二 using (欄位名)

結果和natural join 一樣

下面再介紹一種不等值連線:

還有一種自連線

外連線:

我們研究內連線的時候都是研究的等值 不等值的情況就會被忽略 外連線還是比較重要的

外連線分為左連線和右連線

我們先改一下表emp

改為50 很顯然  關鍵字「馬雲」和另乙個表的對應是不存在的

我們用內連線查一下

select

*from emp e inner

join dept p on e.deptno = p.deptno

這個表成為了14行

我們想用emp作為主表 將那行沒有篩選到的資料加入進來

所以下面介紹左外連線:

表一 left  (outer) join 表二 on 篩選條件
這個outer 也可以省

我們來跑一下

select

*from emp e left

join dept p on e.deptno = p.deptno

就會發現 這個沒有被篩選的不等條件 關鍵字「馬雲」這一行被查了出來

左外連線是以左表為主 那麼右外連線就是以右表為主唄

就先介紹到這裡

SQL學習筆記 多表查詢

溫故而知新。多表查詢 內連線 外連線和交叉連線 1 左外連 sql select from table1left jointable2ontable1.條件列名 table2.條件列名 注 table1表資訊全部顯示,符合條件的 table2 都會與 table1 對齊,不符合條件的 table2 ...

SQL 多表查詢

不同的 sql join inner join 內連線 如果表中至少有乙個匹配,也從左表返回所有的行 left join 左連線 即使右表中沒有匹配,也從右表返回所有的行 right join 右連線 即使左表中沒有匹配,也從右表返回所有的行 full join 全連線 只有其中乙個表中存在匹配也從...

SQL 多表查詢

join操作符 1.笛卡爾積,rxs 可直接轉換為sql語句 2.等值連線,記作 可直接轉換為sql語句 3.自然連線,記作 可轉換為sql語句 4.左外連線和右外連線的表示方法及轉換為sql 注意若多個關係有同名屬性,則用 關係名.屬性名 指出重名屬性 連線也可以與投影,選擇等結合使用。1.查詢選...