自連線顧名思義就是資料表與自身之間的連線。
依然以emp表為例。
可以看出 emp 表中,empno 字段 與 mgr 字段實際上都是員工的編號,只不過在同一行中產生了對應關係。
此時,如果想要查詢每個 員工 與其對應的 mgr 的詳細資訊。即emp表與自身之間的聯絡。這時使用到的就是自連線。
示例:查詢emp表中員工編號、員工姓名、員工工作、員工對應的mgr的編號、姓名、工作資訊
select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e, emp m where e.mgr = m.empno;
內連線即對 兩張表的笛卡爾積 進行條件篩選。
示例:查詢員工的資訊與員工對應的部門的詳細資訊、
select * from emp e inner join dept d on e.deptno = d.deptno;
等價於 select * from emp e join dept d on e.deptno = d.deptno;
等價於 select * from emp e, dept d where e.deptno = d.deptno;
外連線即在條件篩選後得到的內連線資料基礎上,還包括了其中一張表或者兩張表中不滿足條件的資料。具體分以下三種情況。
外連線的示例效果在兩張表的關聯字段沒有全部對應的時候體現比較明顯。這裡我們就不再建表。我們採用自連線的示例來演示外連線。
不知有沒有人發現,自連線中 員工與經理 之間的對應關係表中,總共14個員工,卻只產生了13組對應關係。原因是有乙個最大的 「boss" king 先生,並沒有對應的經理。所以也就沒有顯示出來。
但是,如果我們想讓他顯示出來在上下級對應關係表的員工列中,只是其對應的 上級 mgr 顯示為空呢?
又或者說,有很多員工沒有 mgr 身份,換言之,沒有下屬,但我們想讓這些員工也顯示在上下級對應關係表的mgr列中,只是其對應的下級 員工 為空呢?
1、左外連線 -- left join
left join 關鍵字左側的表完全顯示
select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e left join emp m on e.mgr = m.empno;
等價於select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e, emp m where e.mgr = m.empno(+);
★ 注意:(+)號 代表 等號對方的表 就是需要保留的表
2、右外連線 -- right join
right join 關鍵字右側的表完全顯示
select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e right join emp m on e.mgr = m.empno;
等價於select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e, emp m where e.mgr(+) = m.empno;
★ 注意:可以發現,實際上左右外聯是可以相互轉換的。只需要將 left join 或者 right join 關鍵字變更的同時 表的左右位置也變化,最終的得到的結果是完全一樣的。
select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e right join emp m on e.mgr = m.empno;
等價於select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp m left join emp e on e.mgr = m.empno;
3、完全外連線 -- full outer join兩張表都完全顯示。
select e.empno 員工編號, e.ename 員工姓名, e.job 員工工作, m.empno 經理編號, m.ename 經理姓名, m.job 經理工作 from emp e full outer join emp m on e.mgr = m.empno;
Oracle學習筆記2 連線資料庫
安裝完oracle10g後,有乙個叫sql plus的命令列工具,開啟它,填入使用者名稱和密碼,另外還有乙個叫 主機字串 的框,開始我也不知道是啥東西,了解到在 中連線資料庫時除了使用者名稱和密碼,還需要乙個服務名稱,試著把服務名稱填上去,還真行了。實際上,sql plus是通過該服務名稱在 win...
MySQL學習筆記(8) 連線查詢
將多張表連在一起查詢 會導致記錄數行和字段數列發生改變 意義 在關係型資料庫設計過程中,實體與實體之間是存在很多聯絡的。在關係型資料庫表的設計過程中,遵循著關係來設計 一對一,一對多,多對多。通常在實際操作中,需要利用這層關係來保證資料的完整性。將兩張表的資料與另外一張表彼此交叉 笛卡爾積 表1 c...
Mosh Mysql 學習筆記(三) 連線
課程是國外mosh hamedani 的付費mysql課程。該課程乾貨滿滿,沒有廢話。並且授課方式目的性強,適合各個基礎的學生。課程在b站有搬運,大家動動手就可以找到 希望能幫助到各位同學 本章覆蓋了mysql中的所有連線方式,包括內連線,外連線,自連線,多表連線,跨資料庫連線,聯合,自然連線,交叉...